commit 41dd41b30409d55f10b6add1835e1f5384b9dbdb Author: Ravi Gulhane <> Date: Thu Sep 3 09:54:34 2026 +0530 first commit diff --git a/README.md b/README.md new file mode 100644 index 0000000..7959ce4 --- /dev/null +++ b/README.md @@ -0,0 +1,69 @@ +# React + TypeScript + Vite + +This template provides a minimal setup to get React working in Vite with HMR and some ESLint rules. + +Currently, two official plugins are available: + +- [@vitejs/plugin-react](https://github.com/vitejs/vite-plugin-react/blob/main/packages/plugin-react) uses [Babel](https://babeljs.io/) for Fast Refresh +- [@vitejs/plugin-react-swc](https://github.com/vitejs/vite-plugin-react/blob/main/packages/plugin-react-swc) uses [SWC](https://swc.rs/) for Fast Refresh + +## Expanding the ESLint configuration + +If you are developing a production application, we recommend updating the configuration to enable type-aware lint rules: + +```js +export default tseslint.config([ + globalIgnores(['dist']), + { + files: ['**/*.{ts,tsx}'], + extends: [ + // Other configs... + + // Remove tseslint.configs.recommended and replace with this + ...tseslint.configs.recommendedTypeChecked, + // Alternatively, use this for stricter rules + ...tseslint.configs.strictTypeChecked, + // Optionally, add this for stylistic rules + ...tseslint.configs.stylisticTypeChecked, + + // Other configs... + ], + languageOptions: { + parserOptions: { + project: ['./tsconfig.node.json', './tsconfig.app.json'], + tsconfigRootDir: import.meta.dirname, + }, + // other options... + }, + }, +]) +``` + +You can also install [eslint-plugin-react-x](https://github.com/Rel1cx/eslint-react/tree/main/packages/plugins/eslint-plugin-react-x) and [eslint-plugin-react-dom](https://github.com/Rel1cx/eslint-react/tree/main/packages/plugins/eslint-plugin-react-dom) for React-specific lint rules: + +```js +// eslint.config.js +import reactX from 'eslint-plugin-react-x' +import reactDom from 'eslint-plugin-react-dom' + +export default tseslint.config([ + globalIgnores(['dist']), + { + files: ['**/*.{ts,tsx}'], + extends: [ + // Other configs... + // Enable lint rules for React + reactX.configs['recommended-typescript'], + // Enable lint rules for React DOM + reactDom.configs.recommended, + ], + languageOptions: { + parserOptions: { + project: ['./tsconfig.node.json', './tsconfig.app.json'], + tsconfigRootDir: import.meta.dirname, + }, + // other options... + }, + }, +]) +``` diff --git a/bun.lock b/bun.lock new file mode 100644 index 0000000..a3ecce2 --- /dev/null +++ b/bun.lock @@ -0,0 +1,1232 @@ +{ + "lockfileVersion": 1, + "workspaces": { + "": { + "name": "ubold-react", + "dependencies": { + "@dnd-kit/core": "^6.3.1", + "@dnd-kit/modifiers": "^9.0.0", + "@dnd-kit/sortable": "^10.0.0", + "@fullcalendar/core": "^6.1.17", + "@fullcalendar/daygrid": "^6.1.17", + "@fullcalendar/interaction": "^6.1.17", + "@fullcalendar/list": "^6.1.17", + "@fullcalendar/react": "^6.1.17", + "@fullcalendar/timegrid": "^6.1.17", + "@hello-pangea/dnd": "^18.0.1", + "@hookform/resolvers": "^5.1.1", + "@rc-component/tour": "^2.1.6", + "@tanstack/react-table": "^8.21.3", + "apexcharts": "^4.7.0", + "apextree": "^1.3.0", + "bootstrap": "^5.3.7", + "chart.js": "^4.5.0", + "clsx": "^2.1.1", + "datatables.net-bs5": "^2.3.1", + "datatables.net-buttons": "^3.2.3", + "datatables.net-buttons-bs5": "^3.2.3", + "datatables.net-fixedheader": "^4.0.2", + "datatables.net-fixedheader-bs5": "^4.0.2", + "datatables.net-react": "^1.0.1", + "datatables.net-responsive": "^3.0.4", + "datatables.net-responsive-bs5": "^3.0.4", + "datatables.net-select": "^3.0.1", + "datatables.net-select-bs5": "^3.0.1", + "date-fns": "^4.1.0", + "dayjs": "^1.11.13", + "filepond": "^4.32.8", + "filepond-plugin-image-exif-orientation": "^1.0.11", + "filepond-plugin-image-preview": "^4.6.12", + "flatpickr": "^4.6.13", + "jsvectormap": "1.3.3", + "jszip": "^3.10.1", + "ladda": "^2.0.3", + "leaflet": "^1.9.4", + "lodash": "^4.17.21", + "masonic": "^4.1.0", + "moment": "^2.30.1", + "pdfmake": "^0.2.20", + "quill": "^2.0.3", + "rc-util": "^5.44.4", + "react": "^19.1.1", + "react-apexcharts": "^1.7.0", + "react-arborist": "^3.4.3", + "react-bootstrap": "^2.10.10", + "react-bootstrap-typeahead": "^6.4.1", + "react-chartjs-2": "^5.3.0", + "react-colorful": "^5.6.1", + "react-countup": "^6.5.3", + "react-datepicker": "^8.4.0", + "react-day-picker": "^9.7.0", + "react-dom": "^19.1.1", + "react-dropzone": "^14.3.8", + "react-filepond": "^7.1.3", + "react-flatpickr": "^4.0.10", + "react-hook-form": "^7.57.0", + "react-icons": "^5.5.0", + "react-leaflet": "^5.0.0-rc.2", + "react-number-format": "^5.4.4", + "react-password-checklist": "^1.8.1", + "react-pdf": "^9.2.1", + "react-quill-new": "^3.4.6", + "react-range": "^1.10.0", + "react-router": "^7.8.2", + "react-select": "^5.10.1", + "react-sortablejs": "^6.1.4", + "react-use-wizard": "^2.3.0", + "simplebar-react": "3.3.0", + "sortablejs": "^1.15.6", + "sweetalert2": "^11.22.0", + "sweetalert2-react-content": "^5.1.0", + "usehooks-ts": "^3.1.1", + "yup": "^1.6.1", + "zod": "^3.25.63", + }, + "devDependencies": { + "@eslint/js": "^9.33.0", + "@types/leaflet": "^1.9.18", + "@types/lodash": "^4.17.17", + "@types/node": "^24.3.0", + "@types/react": "^19.1.10", + "@types/react-dom": "^19.1.7", + "@types/sortablejs": "^1.15.8", + "@vitejs/plugin-react": "^5.0.0", + "eslint": "^9.33.0", + "eslint-plugin-react-hooks": "^5.2.0", + "eslint-plugin-react-refresh": "^0.4.20", + "globals": "^16.3.0", + "sass": "1.77.6", + "typescript": "~5.8.3", + "typescript-eslint": "^8.39.1", + "vite": "^7.1.2", + }, + }, + }, + "packages": { + "@ampproject/remapping": ["@ampproject/remapping@2.3.0", "", { "dependencies": { "@jridgewell/gen-mapping": "^0.3.5", "@jridgewell/trace-mapping": "^0.3.24" } }, "sha512-30iZtAPgz+LTIYoeivqYo853f02jBYSd5uGnGpkFV0M3xOt9aN73erkgYAmZU43x4VfqcnLxW9Kpg3R5LC4YYw=="], + + "@babel/code-frame": ["@babel/code-frame@7.27.1", "", { "dependencies": { "@babel/helper-validator-identifier": "^7.27.1", "js-tokens": "^4.0.0", "picocolors": "^1.1.1" } }, "sha512-cjQ7ZlQ0Mv3b47hABuTevyTuYN4i+loJKGeV9flcCgIK37cCXRh+L1bd3iBHlynerhQ7BhCkn2BPbQUL+rGqFg=="], + + "@babel/compat-data": ["@babel/compat-data@7.28.0", "", {}, "sha512-60X7qkglvrap8mn1lh2ebxXdZYtUcpd7gsmy9kLaBJ4i/WdY8PqTSdxyA8qraikqKQK5C1KRBKXqznrVapyNaw=="], + + "@babel/core": ["@babel/core@7.28.3", "", { "dependencies": { "@ampproject/remapping": "^2.2.0", "@babel/code-frame": "^7.27.1", "@babel/generator": "^7.28.3", "@babel/helper-compilation-targets": "^7.27.2", "@babel/helper-module-transforms": "^7.28.3", "@babel/helpers": "^7.28.3", "@babel/parser": "^7.28.3", "@babel/template": "^7.27.2", "@babel/traverse": "^7.28.3", "@babel/types": "^7.28.2", "convert-source-map": "^2.0.0", "debug": "^4.1.0", "gensync": "^1.0.0-beta.2", "json5": "^2.2.3", "semver": "^6.3.1" } }, "sha512-yDBHV9kQNcr2/sUr9jghVyz9C3Y5G2zUM2H2lo+9mKv4sFgbA8s8Z9t8D1jiTkGoO/NoIfKMyKWr4s6CN23ZwQ=="], + + "@babel/generator": ["@babel/generator@7.28.3", "", { "dependencies": { "@babel/parser": "^7.28.3", "@babel/types": "^7.28.2", "@jridgewell/gen-mapping": "^0.3.12", "@jridgewell/trace-mapping": "^0.3.28", "jsesc": "^3.0.2" } }, "sha512-3lSpxGgvnmZznmBkCRnVREPUFJv2wrv9iAoFDvADJc0ypmdOxdUtcLeBgBJ6zE0PMeTKnxeQzyk0xTBq4Ep7zw=="], + + "@babel/helper-compilation-targets": ["@babel/helper-compilation-targets@7.27.2", "", { "dependencies": { "@babel/compat-data": "^7.27.2", "@babel/helper-validator-option": "^7.27.1", "browserslist": "^4.24.0", "lru-cache": "^5.1.1", "semver": "^6.3.1" } }, "sha512-2+1thGUUWWjLTYTHZWK1n8Yga0ijBz1XAhUXcKy81rd5g6yh7hGqMp45v7cadSbEHc9G3OTv45SyneRN3ps4DQ=="], + + "@babel/helper-globals": ["@babel/helper-globals@7.28.0", "", {}, "sha512-+W6cISkXFa1jXsDEdYA8HeevQT/FULhxzR99pxphltZcVaugps53THCeiWA8SguxxpSp3gKPiuYfSWopkLQ4hw=="], + + "@babel/helper-module-imports": ["@babel/helper-module-imports@7.27.1", "", { "dependencies": { "@babel/traverse": "^7.27.1", "@babel/types": "^7.27.1" } }, "sha512-0gSFWUPNXNopqtIPQvlD5WgXYI5GY2kP2cCvoT8kczjbfcfuIljTbcWrulD1CIPIX2gt1wghbDy08yE1p+/r3w=="], + + "@babel/helper-module-transforms": ["@babel/helper-module-transforms@7.28.3", "", { "dependencies": { "@babel/helper-module-imports": "^7.27.1", "@babel/helper-validator-identifier": "^7.27.1", "@babel/traverse": "^7.28.3" }, "peerDependencies": { "@babel/core": "^7.0.0" } }, "sha512-gytXUbs8k2sXS9PnQptz5o0QnpLL51SwASIORY6XaBKF88nsOT0Zw9szLqlSGQDP/4TljBAD5y98p2U1fqkdsw=="], + + "@babel/helper-plugin-utils": ["@babel/helper-plugin-utils@7.27.1", "", {}, "sha512-1gn1Up5YXka3YYAHGKpbideQ5Yjf1tDa9qYcgysz+cNCXukyLl6DjPXhD3VRwSb8c0J9tA4b2+rHEZtc6R0tlw=="], + + "@babel/helper-string-parser": ["@babel/helper-string-parser@7.27.1", "", {}, "sha512-qMlSxKbpRlAridDExk92nSobyDdpPijUq2DW6oDnUqd0iOGxmQjyqhMIihI9+zv4LPyZdRje2cavWPbCbWm3eA=="], + + "@babel/helper-validator-identifier": ["@babel/helper-validator-identifier@7.27.1", "", {}, "sha512-D2hP9eA+Sqx1kBZgzxZh0y1trbuU+JoDkiEwqhQ36nodYqJwyEIhPSdMNd7lOm/4io72luTPWH20Yda0xOuUow=="], + + "@babel/helper-validator-option": ["@babel/helper-validator-option@7.27.1", "", {}, "sha512-YvjJow9FxbhFFKDSuFnVCe2WxXk1zWc22fFePVNEaWJEu8IrZVlda6N0uHwzZrUM1il7NC9Mlp4MaJYbYd9JSg=="], + + "@babel/helpers": ["@babel/helpers@7.28.3", "", { "dependencies": { "@babel/template": "^7.27.2", "@babel/types": "^7.28.2" } }, "sha512-PTNtvUQihsAsDHMOP5pfobP8C6CM4JWXmP8DrEIt46c3r2bf87Ua1zoqevsMo9g+tWDwgWrFP5EIxuBx5RudAw=="], + + "@babel/parser": ["@babel/parser@7.28.3", "", { "dependencies": { "@babel/types": "^7.28.2" }, "bin": "./bin/babel-parser.js" }, "sha512-7+Ey1mAgYqFAx2h0RuoxcQT5+MlG3GTV0TQrgr7/ZliKsm/MNDxVVutlWaziMq7wJNAz8MTqz55XLpWvva6StA=="], + + "@babel/plugin-transform-react-jsx-self": ["@babel/plugin-transform-react-jsx-self@7.27.1", "", { "dependencies": { "@babel/helper-plugin-utils": "^7.27.1" }, "peerDependencies": { "@babel/core": "^7.0.0-0" } }, "sha512-6UzkCs+ejGdZ5mFFC/OCUrv028ab2fp1znZmCZjAOBKiBK2jXD1O+BPSfX8X2qjJ75fZBMSnQn3Rq2mrBJK2mw=="], + + "@babel/plugin-transform-react-jsx-source": ["@babel/plugin-transform-react-jsx-source@7.27.1", "", { "dependencies": { "@babel/helper-plugin-utils": "^7.27.1" }, "peerDependencies": { "@babel/core": "^7.0.0-0" } }, "sha512-zbwoTsBruTeKB9hSq73ha66iFeJHuaFkUbwvqElnygoNbj/jHRsSeokowZFN3CZ64IvEqcmmkVe89OPXc7ldAw=="], + + "@babel/runtime": ["@babel/runtime@7.28.3", "", {}, "sha512-9uIQ10o0WGdpP6GDhXcdOJPJuDgFtIDtN/9+ArJQ2NAfAmiuhTQdzkaTGR33v43GYS2UrSA0eX2pPPHoFVvpxA=="], + + "@babel/template": ["@babel/template@7.27.2", "", { "dependencies": { "@babel/code-frame": "^7.27.1", "@babel/parser": "^7.27.2", "@babel/types": "^7.27.1" } }, "sha512-LPDZ85aEJyYSd18/DkjNh4/y1ntkE5KwUHWTiqgRxruuZL2F1yuHligVHLvcHY2vMHXttKFpJn6LwfI7cw7ODw=="], + + "@babel/traverse": ["@babel/traverse@7.28.3", "", { "dependencies": { "@babel/code-frame": "^7.27.1", "@babel/generator": "^7.28.3", "@babel/helper-globals": "^7.28.0", "@babel/parser": "^7.28.3", "@babel/template": "^7.27.2", "@babel/types": "^7.28.2", "debug": "^4.3.1" } }, "sha512-7w4kZYHneL3A6NP2nxzHvT3HCZ7puDZZjFMqDpBPECub79sTtSO5CGXDkKrTQq8ksAwfD/XI2MRFX23njdDaIQ=="], + + "@babel/types": ["@babel/types@7.28.2", "", { "dependencies": { "@babel/helper-string-parser": "^7.27.1", "@babel/helper-validator-identifier": "^7.27.1" } }, "sha512-ruv7Ae4J5dUYULmeXw1gmb7rYRz57OWCPM57pHojnLq/3Z1CK2lNSLTCVjxVk1F/TZHwOZZrOWi0ur95BbLxNQ=="], + + "@dagrejs/dagre": ["@dagrejs/dagre@1.1.5", "", { "dependencies": { "@dagrejs/graphlib": "2.2.4" } }, "sha512-Ghgrh08s12DCL5SeiR6AoyE80mQELTWhJBRmXfFoqDiFkR458vPEdgTbbjA0T+9ETNxUblnD0QW55tfdvi5pjQ=="], + + "@dagrejs/graphlib": ["@dagrejs/graphlib@2.2.4", "", {}, "sha512-mepCf/e9+SKYy1d02/UkvSy6+6MoyXhVxP8lLDfA7BPE1X1d4dR0sZznmbM8/XVJ1GPM+Svnx7Xj6ZweByWUkw=="], + + "@date-fns/tz": ["@date-fns/tz@1.4.1", "", {}, "sha512-P5LUNhtbj6YfI3iJjw5EL9eUAG6OitD0W3fWQcpQjDRc/QIsL0tRNuO1PcDvPccWL1fSTXXdE1ds+l95DV/OFA=="], + + "@dnd-kit/accessibility": ["@dnd-kit/accessibility@3.1.1", "", { "dependencies": { "tslib": "^2.0.0" }, "peerDependencies": { "react": ">=16.8.0" } }, "sha512-2P+YgaXF+gRsIihwwY1gCsQSYnu9Zyj2py8kY5fFvUM1qm2WA2u639R6YNVfU4GWr+ZM5mqEsfHZZLoRONbemw=="], + + "@dnd-kit/core": ["@dnd-kit/core@6.3.1", "", { "dependencies": { "@dnd-kit/accessibility": "^3.1.1", "@dnd-kit/utilities": "^3.2.2", "tslib": "^2.0.0" }, "peerDependencies": { "react": ">=16.8.0", "react-dom": ">=16.8.0" } }, "sha512-xkGBRQQab4RLwgXxoqETICr6S5JlogafbhNsidmrkVv2YRs5MLwpjoF2qpiGjQt8S9AoxtIV603s0GIUpY5eYQ=="], + + "@dnd-kit/modifiers": ["@dnd-kit/modifiers@9.0.0", "", { "dependencies": { "@dnd-kit/utilities": "^3.2.2", "tslib": "^2.0.0" }, "peerDependencies": { "@dnd-kit/core": "^6.3.0", "react": ">=16.8.0" } }, "sha512-ybiLc66qRGuZoC20wdSSG6pDXFikui/dCNGthxv4Ndy8ylErY0N3KVxY2bgo7AWwIbxDmXDg3ylAFmnrjcbVvw=="], + + "@dnd-kit/sortable": ["@dnd-kit/sortable@10.0.0", "", { "dependencies": { "@dnd-kit/utilities": "^3.2.2", "tslib": "^2.0.0" }, "peerDependencies": { "@dnd-kit/core": "^6.3.0", "react": ">=16.8.0" } }, "sha512-+xqhmIIzvAYMGfBYYnbKuNicfSsk4RksY2XdmJhT+HAC01nix6fHCztU68jooFiMUB01Ky3F0FyOvhG/BZrWkg=="], + + "@dnd-kit/utilities": ["@dnd-kit/utilities@3.2.2", "", { "dependencies": { "tslib": "^2.0.0" }, "peerDependencies": { "react": ">=16.8.0" } }, "sha512-+MKAJEOfaBe5SmV6t34p80MMKhjvUz0vRrvVJbPT0WElzaOJ/1xs+D+KDv+tD/NE5ujfrChEcshd4fLn0wpiqg=="], + + "@emotion/babel-plugin": ["@emotion/babel-plugin@11.13.5", "", { "dependencies": { "@babel/helper-module-imports": "^7.16.7", "@babel/runtime": "^7.18.3", "@emotion/hash": "^0.9.2", "@emotion/memoize": "^0.9.0", "@emotion/serialize": "^1.3.3", "babel-plugin-macros": "^3.1.0", "convert-source-map": "^1.5.0", "escape-string-regexp": "^4.0.0", "find-root": "^1.1.0", "source-map": "^0.5.7", "stylis": "4.2.0" } }, "sha512-pxHCpT2ex+0q+HH91/zsdHkw/lXd468DIN2zvfvLtPKLLMo6gQj7oLObq8PhkrxOZb/gGCq03S3Z7PDhS8pduQ=="], + + "@emotion/cache": ["@emotion/cache@11.14.0", "", { "dependencies": { "@emotion/memoize": "^0.9.0", "@emotion/sheet": "^1.4.0", "@emotion/utils": "^1.4.2", "@emotion/weak-memoize": "^0.4.0", "stylis": "4.2.0" } }, "sha512-L/B1lc/TViYk4DcpGxtAVbx0ZyiKM5ktoIyafGkH6zg/tj+mA+NE//aPYKG0k8kCHSHVJrpLpcAlOBEXQ3SavA=="], + + "@emotion/hash": ["@emotion/hash@0.9.2", "", {}, "sha512-MyqliTZGuOm3+5ZRSaaBGP3USLw6+EGykkwZns2EPC5g8jJ4z9OrdZY9apkl3+UP9+sdz76YYkwCKP5gh8iY3g=="], + + "@emotion/memoize": ["@emotion/memoize@0.9.0", "", {}, "sha512-30FAj7/EoJ5mwVPOWhAyCX+FPfMDrVecJAM+Iw9NRoSl4BBAQeqj4cApHHUXOVvIPgLVDsCFoz/hGD+5QQD1GQ=="], + + "@emotion/react": ["@emotion/react@11.14.0", "", { "dependencies": { "@babel/runtime": "^7.18.3", "@emotion/babel-plugin": "^11.13.5", "@emotion/cache": "^11.14.0", "@emotion/serialize": "^1.3.3", "@emotion/use-insertion-effect-with-fallbacks": "^1.2.0", "@emotion/utils": "^1.4.2", "@emotion/weak-memoize": "^0.4.0", "hoist-non-react-statics": "^3.3.1" }, "peerDependencies": { "react": ">=16.8.0" } }, "sha512-O000MLDBDdk/EohJPFUqvnp4qnHeYkVP5B0xEG0D/L7cOKP9kefu2DXn8dj74cQfsEzUqh+sr1RzFqiL1o+PpA=="], + + "@emotion/serialize": ["@emotion/serialize@1.3.3", "", { "dependencies": { "@emotion/hash": "^0.9.2", "@emotion/memoize": "^0.9.0", "@emotion/unitless": "^0.10.0", "@emotion/utils": "^1.4.2", "csstype": "^3.0.2" } }, "sha512-EISGqt7sSNWHGI76hC7x1CksiXPahbxEOrC5RjmFRJTqLyEK9/9hZvBbiYn70dw4wuwMKiEMCUlR6ZXTSWQqxA=="], + + "@emotion/sheet": ["@emotion/sheet@1.4.0", "", {}, "sha512-fTBW9/8r2w3dXWYM4HCB1Rdp8NLibOw2+XELH5m5+AkWiL/KqYX6dc0kKYlaYyKjrQ6ds33MCdMPEwgs2z1rqg=="], + + "@emotion/unitless": ["@emotion/unitless@0.10.0", "", {}, "sha512-dFoMUuQA20zvtVTuxZww6OHoJYgrzfKM1t52mVySDJnMSEa08ruEvdYQbhvyu6soU+NeLVd3yKfTfT0NeV6qGg=="], + + "@emotion/use-insertion-effect-with-fallbacks": ["@emotion/use-insertion-effect-with-fallbacks@1.2.0", "", { "peerDependencies": { "react": ">=16.8.0" } }, "sha512-yJMtVdH59sxi/aVJBpk9FQq+OR8ll5GT8oWd57UpeaKEVGab41JWaCFA7FRLoMLloOZF/c/wsPoe+bfGmRKgDg=="], + + "@emotion/utils": ["@emotion/utils@1.4.2", "", {}, "sha512-3vLclRofFziIa3J2wDh9jjbkUz9qk5Vi3IZ/FSTKViB0k+ef0fPV7dYrUIugbgupYDx7v9ud/SjrtEP8Y4xLoA=="], + + "@emotion/weak-memoize": ["@emotion/weak-memoize@0.4.0", "", {}, "sha512-snKqtPW01tN0ui7yu9rGv69aJXr/a/Ywvl11sUjNtEcRc+ng/mQriFL0wLXMef74iHa/EkftbDzU9F8iFbH+zg=="], + + "@esbuild/aix-ppc64": ["@esbuild/aix-ppc64@0.25.9", "", { "os": "aix", "cpu": "ppc64" }, "sha512-OaGtL73Jck6pBKjNIe24BnFE6agGl+6KxDtTfHhy1HmhthfKouEcOhqpSL64K4/0WCtbKFLOdzD/44cJ4k9opA=="], + + "@esbuild/android-arm": ["@esbuild/android-arm@0.25.9", "", { "os": "android", "cpu": "arm" }, "sha512-5WNI1DaMtxQ7t7B6xa572XMXpHAaI/9Hnhk8lcxF4zVN4xstUgTlvuGDorBguKEnZO70qwEcLpfifMLoxiPqHQ=="], + + "@esbuild/android-arm64": ["@esbuild/android-arm64@0.25.9", "", { "os": "android", "cpu": "arm64" }, "sha512-IDrddSmpSv51ftWslJMvl3Q2ZT98fUSL2/rlUXuVqRXHCs5EUF1/f+jbjF5+NG9UffUDMCiTyh8iec7u8RlTLg=="], + + "@esbuild/android-x64": ["@esbuild/android-x64@0.25.9", "", { "os": "android", "cpu": "x64" }, "sha512-I853iMZ1hWZdNllhVZKm34f4wErd4lMyeV7BLzEExGEIZYsOzqDWDf+y082izYUE8gtJnYHdeDpN/6tUdwvfiw=="], + + "@esbuild/darwin-arm64": ["@esbuild/darwin-arm64@0.25.9", "", { "os": "darwin", "cpu": "arm64" }, "sha512-XIpIDMAjOELi/9PB30vEbVMs3GV1v2zkkPnuyRRURbhqjyzIINwj+nbQATh4H9GxUgH1kFsEyQMxwiLFKUS6Rg=="], + + "@esbuild/darwin-x64": ["@esbuild/darwin-x64@0.25.9", "", { "os": "darwin", "cpu": "x64" }, "sha512-jhHfBzjYTA1IQu8VyrjCX4ApJDnH+ez+IYVEoJHeqJm9VhG9Dh2BYaJritkYK3vMaXrf7Ogr/0MQ8/MeIefsPQ=="], + + "@esbuild/freebsd-arm64": ["@esbuild/freebsd-arm64@0.25.9", "", { "os": "freebsd", "cpu": "arm64" }, "sha512-z93DmbnY6fX9+KdD4Ue/H6sYs+bhFQJNCPZsi4XWJoYblUqT06MQUdBCpcSfuiN72AbqeBFu5LVQTjfXDE2A6Q=="], + + "@esbuild/freebsd-x64": ["@esbuild/freebsd-x64@0.25.9", "", { "os": "freebsd", "cpu": "x64" }, "sha512-mrKX6H/vOyo5v71YfXWJxLVxgy1kyt1MQaD8wZJgJfG4gq4DpQGpgTB74e5yBeQdyMTbgxp0YtNj7NuHN0PoZg=="], + + "@esbuild/linux-arm": ["@esbuild/linux-arm@0.25.9", "", { "os": "linux", "cpu": "arm" }, "sha512-HBU2Xv78SMgaydBmdor38lg8YDnFKSARg1Q6AT0/y2ezUAKiZvc211RDFHlEZRFNRVhcMamiToo7bDx3VEOYQw=="], + + "@esbuild/linux-arm64": ["@esbuild/linux-arm64@0.25.9", "", { "os": "linux", "cpu": "arm64" }, "sha512-BlB7bIcLT3G26urh5Dmse7fiLmLXnRlopw4s8DalgZ8ef79Jj4aUcYbk90g8iCa2467HX8SAIidbL7gsqXHdRw=="], + + "@esbuild/linux-ia32": ["@esbuild/linux-ia32@0.25.9", "", { "os": "linux", "cpu": "ia32" }, "sha512-e7S3MOJPZGp2QW6AK6+Ly81rC7oOSerQ+P8L0ta4FhVi+/j/v2yZzx5CqqDaWjtPFfYz21Vi1S0auHrap3Ma3A=="], + + "@esbuild/linux-loong64": ["@esbuild/linux-loong64@0.25.9", "", { "os": "linux", "cpu": "none" }, "sha512-Sbe10Bnn0oUAB2AalYztvGcK+o6YFFA/9829PhOCUS9vkJElXGdphz0A3DbMdP8gmKkqPmPcMJmJOrI3VYB1JQ=="], + + "@esbuild/linux-mips64el": ["@esbuild/linux-mips64el@0.25.9", "", { "os": "linux", "cpu": "none" }, "sha512-YcM5br0mVyZw2jcQeLIkhWtKPeVfAerES5PvOzaDxVtIyZ2NUBZKNLjC5z3/fUlDgT6w89VsxP2qzNipOaaDyA=="], + + "@esbuild/linux-ppc64": ["@esbuild/linux-ppc64@0.25.9", "", { "os": "linux", "cpu": "ppc64" }, "sha512-++0HQvasdo20JytyDpFvQtNrEsAgNG2CY1CLMwGXfFTKGBGQT3bOeLSYE2l1fYdvML5KUuwn9Z8L1EWe2tzs1w=="], + + "@esbuild/linux-riscv64": ["@esbuild/linux-riscv64@0.25.9", "", { "os": "linux", "cpu": "none" }, "sha512-uNIBa279Y3fkjV+2cUjx36xkx7eSjb8IvnL01eXUKXez/CBHNRw5ekCGMPM0BcmqBxBcdgUWuUXmVWwm4CH9kg=="], + + "@esbuild/linux-s390x": ["@esbuild/linux-s390x@0.25.9", "", { "os": "linux", "cpu": "s390x" }, "sha512-Mfiphvp3MjC/lctb+7D287Xw1DGzqJPb/J2aHHcHxflUo+8tmN/6d4k6I2yFR7BVo5/g7x2Monq4+Yew0EHRIA=="], + + "@esbuild/linux-x64": ["@esbuild/linux-x64@0.25.9", "", { "os": "linux", "cpu": "x64" }, "sha512-iSwByxzRe48YVkmpbgoxVzn76BXjlYFXC7NvLYq+b+kDjyyk30J0JY47DIn8z1MO3K0oSl9fZoRmZPQI4Hklzg=="], + + "@esbuild/netbsd-arm64": ["@esbuild/netbsd-arm64@0.25.9", "", { "os": "none", "cpu": "arm64" }, "sha512-9jNJl6FqaUG+COdQMjSCGW4QiMHH88xWbvZ+kRVblZsWrkXlABuGdFJ1E9L7HK+T0Yqd4akKNa/lO0+jDxQD4Q=="], + + "@esbuild/netbsd-x64": ["@esbuild/netbsd-x64@0.25.9", "", { "os": "none", "cpu": "x64" }, "sha512-RLLdkflmqRG8KanPGOU7Rpg829ZHu8nFy5Pqdi9U01VYtG9Y0zOG6Vr2z4/S+/3zIyOxiK6cCeYNWOFR9QP87g=="], + + "@esbuild/openbsd-arm64": ["@esbuild/openbsd-arm64@0.25.9", "", { "os": "openbsd", "cpu": "arm64" }, "sha512-YaFBlPGeDasft5IIM+CQAhJAqS3St3nJzDEgsgFixcfZeyGPCd6eJBWzke5piZuZ7CtL656eOSYKk4Ls2C0FRQ=="], + + "@esbuild/openbsd-x64": ["@esbuild/openbsd-x64@0.25.9", "", { "os": "openbsd", "cpu": "x64" }, "sha512-1MkgTCuvMGWuqVtAvkpkXFmtL8XhWy+j4jaSO2wxfJtilVCi0ZE37b8uOdMItIHz4I6z1bWWtEX4CJwcKYLcuA=="], + + "@esbuild/openharmony-arm64": ["@esbuild/openharmony-arm64@0.25.9", "", { "os": "none", "cpu": "arm64" }, "sha512-4Xd0xNiMVXKh6Fa7HEJQbrpP3m3DDn43jKxMjxLLRjWnRsfxjORYJlXPO4JNcXtOyfajXorRKY9NkOpTHptErg=="], + + "@esbuild/sunos-x64": ["@esbuild/sunos-x64@0.25.9", "", { "os": "sunos", "cpu": "x64" }, "sha512-WjH4s6hzo00nNezhp3wFIAfmGZ8U7KtrJNlFMRKxiI9mxEK1scOMAaa9i4crUtu+tBr+0IN6JCuAcSBJZfnphw=="], + + "@esbuild/win32-arm64": ["@esbuild/win32-arm64@0.25.9", "", { "os": "win32", "cpu": "arm64" }, "sha512-mGFrVJHmZiRqmP8xFOc6b84/7xa5y5YvR1x8djzXpJBSv/UsNK6aqec+6JDjConTgvvQefdGhFDAs2DLAds6gQ=="], + + "@esbuild/win32-ia32": ["@esbuild/win32-ia32@0.25.9", "", { "os": "win32", "cpu": "ia32" }, "sha512-b33gLVU2k11nVx1OhX3C8QQP6UHQK4ZtN56oFWvVXvz2VkDoe6fbG8TOgHFxEvqeqohmRnIHe5A1+HADk4OQww=="], + + "@esbuild/win32-x64": ["@esbuild/win32-x64@0.25.9", "", { "os": "win32", "cpu": "x64" }, "sha512-PPOl1mi6lpLNQxnGoyAfschAodRFYXJ+9fs6WHXz7CSWKbOqiMZsubC+BQsVKuul+3vKLuwTHsS2c2y9EoKwxQ=="], + + "@eslint-community/eslint-utils": ["@eslint-community/eslint-utils@4.7.0", "", { "dependencies": { "eslint-visitor-keys": "^3.4.3" }, "peerDependencies": { "eslint": "^6.0.0 || ^7.0.0 || >=8.0.0" } }, "sha512-dyybb3AcajC7uha6CvhdVRJqaKyn7w2YKqKyAN37NKYgZT36w+iRb0Dymmc5qEJ549c/S31cMMSFd75bteCpCw=="], + + "@eslint-community/regexpp": ["@eslint-community/regexpp@4.12.1", "", {}, "sha512-CCZCDJuduB9OUkFkY2IgppNZMi2lBQgD2qzwXkEia16cge2pijY/aXi96CJMquDMn3nJdlPV1A5KrJEXwfLNzQ=="], + + "@eslint/config-array": ["@eslint/config-array@0.21.0", "", { "dependencies": { "@eslint/object-schema": "^2.1.6", "debug": "^4.3.1", "minimatch": "^3.1.2" } }, "sha512-ENIdc4iLu0d93HeYirvKmrzshzofPw6VkZRKQGe9Nv46ZnWUzcF1xV01dcvEg/1wXUR61OmmlSfyeyO7EvjLxQ=="], + + "@eslint/config-helpers": ["@eslint/config-helpers@0.3.1", "", {}, "sha512-xR93k9WhrDYpXHORXpxVL5oHj3Era7wo6k/Wd8/IsQNnZUTzkGS29lyn3nAT05v6ltUuTFVCCYDEGfy2Or/sPA=="], + + "@eslint/core": ["@eslint/core@0.15.2", "", { "dependencies": { "@types/json-schema": "^7.0.15" } }, "sha512-78Md3/Rrxh83gCxoUc0EiciuOHsIITzLy53m3d9UyiW8y9Dj2D29FeETqyKA+BRK76tnTp6RXWb3pCay8Oyomg=="], + + "@eslint/eslintrc": ["@eslint/eslintrc@3.3.1", "", { "dependencies": { "ajv": "^6.12.4", "debug": "^4.3.2", "espree": "^10.0.1", "globals": "^14.0.0", "ignore": "^5.2.0", "import-fresh": "^3.2.1", "js-yaml": "^4.1.0", "minimatch": "^3.1.2", "strip-json-comments": "^3.1.1" } }, "sha512-gtF186CXhIl1p4pJNGZw8Yc6RlshoePRvE0X91oPGb3vZ8pM3qOS9W9NGPat9LziaBV7XrJWGylNQXkGcnM3IQ=="], + + "@eslint/js": ["@eslint/js@9.34.0", "", {}, "sha512-EoyvqQnBNsV1CWaEJ559rxXL4c8V92gxirbawSmVUOWXlsRxxQXl6LmCpdUblgxgSkDIqKnhzba2SjRTI/A5Rw=="], + + "@eslint/object-schema": ["@eslint/object-schema@2.1.6", "", {}, "sha512-RBMg5FRL0I0gs51M/guSAj5/e14VQ4tpZnQNWwuDT66P14I43ItmPfIZRhO9fUVIPOAQXU47atlywZ/czoqFPA=="], + + "@eslint/plugin-kit": ["@eslint/plugin-kit@0.3.5", "", { "dependencies": { "@eslint/core": "^0.15.2", "levn": "^0.4.1" } }, "sha512-Z5kJ+wU3oA7MMIqVR9tyZRtjYPr4OC004Q4Rw7pgOKUOKkJfZ3O24nz3WYfGRpMDNmcOi3TwQOmgm7B7Tpii0w=="], + + "@essentials/memoize-one": ["@essentials/memoize-one@1.1.0", "", {}, "sha512-HMkuIkKNe0EWSUpZhlaq9+5Yp47YhrMhxLMnXTRnEyE5N4xKLspAvMGjUFdi794VnEF1EcOZFS8rdROeujrgag=="], + + "@essentials/one-key-map": ["@essentials/one-key-map@1.2.0", "", {}, "sha512-C2H7zHVcsoipDv4VKY5uUcv5ilsK+uEgEj+WeOdN5oz/Qj1/OZIzCdle90gDzj0xnGQrmZ9qDujwD7AkBb5k9A=="], + + "@essentials/raf": ["@essentials/raf@1.2.0", "", {}, "sha512-AWJvpprE2o7ATMb7HBYMVUVmPJBCt2wZp2rY7d+rAcNSMvzLbDepy9KFeqqrPZh+s9aIpbw1LgmuAW7kuRFgrQ=="], + + "@essentials/request-timeout": ["@essentials/request-timeout@1.3.0", "", { "dependencies": { "@essentials/raf": "^1.2.0" } }, "sha512-lKZPhKScNFnR1MBnk4+sxshk46fpvdN+Uh1LlKWFO5g1ocuz4EcknNIL7tm/rsCAs/+xMWiBTwbDUvm+pDNlXw=="], + + "@floating-ui/core": ["@floating-ui/core@1.7.3", "", { "dependencies": { "@floating-ui/utils": "^0.2.10" } }, "sha512-sGnvb5dmrJaKEZ+LDIpguvdX3bDlEllmv4/ClQ9awcmCZrlx5jQyyMWFM5kBI+EyNOCDDiKk8il0zeuX3Zlg/w=="], + + "@floating-ui/dom": ["@floating-ui/dom@1.7.4", "", { "dependencies": { "@floating-ui/core": "^1.7.3", "@floating-ui/utils": "^0.2.10" } }, "sha512-OOchDgh4F2CchOX94cRVqhvy7b3AFb+/rQXyswmzmGakRfkMgoWVjfnLWkRirfLEfuD4ysVW16eXzwt3jHIzKA=="], + + "@floating-ui/react": ["@floating-ui/react@0.27.16", "", { "dependencies": { "@floating-ui/react-dom": "^2.1.6", "@floating-ui/utils": "^0.2.10", "tabbable": "^6.0.0" }, "peerDependencies": { "react": ">=17.0.0", "react-dom": ">=17.0.0" } }, "sha512-9O8N4SeG2z++TSM8QA/KTeKFBVCNEz/AGS7gWPJf6KFRzmRWixFRnCnkPHRDwSVZW6QPDO6uT0P2SpWNKCc9/g=="], + + "@floating-ui/react-dom": ["@floating-ui/react-dom@2.1.6", "", { "dependencies": { "@floating-ui/dom": "^1.7.4" }, "peerDependencies": { "react": ">=16.8.0", "react-dom": ">=16.8.0" } }, "sha512-4JX6rEatQEvlmgU80wZyq9RT96HZJa88q8hp0pBd+LrczeDI4o6uA2M+uvxngVHo4Ihr8uibXxH6+70zhAFrVw=="], + + "@floating-ui/utils": ["@floating-ui/utils@0.2.10", "", {}, "sha512-aGTxbpbg8/b5JfU1HXSrbH3wXZuLPJcNEcZQFMxLs3oSzgtVu6nFPkbbGGUvBcUjKV2YyB9Wxxabo+HEH9tcRQ=="], + + "@foliojs-fork/fontkit": ["@foliojs-fork/fontkit@1.9.2", "", { "dependencies": { "@foliojs-fork/restructure": "^2.0.2", "brotli": "^1.2.0", "clone": "^1.0.4", "deep-equal": "^1.0.0", "dfa": "^1.2.0", "tiny-inflate": "^1.0.2", "unicode-properties": "^1.2.2", "unicode-trie": "^2.0.0" } }, "sha512-IfB5EiIb+GZk+77TRB86AHroVaqfq8JRFlUbz0WEwsInyCG0epX2tCPOy+UfaWPju30DeVoUAXfzWXmhn753KA=="], + + "@foliojs-fork/linebreak": ["@foliojs-fork/linebreak@1.1.2", "", { "dependencies": { "base64-js": "1.3.1", "unicode-trie": "^2.0.0" } }, "sha512-ZPohpxxbuKNE0l/5iBJnOAfUaMACwvUIKCvqtWGKIMv1lPYoNjYXRfhi9FeeV9McBkBLxsMFWTVVhHJA8cyzvg=="], + + "@foliojs-fork/pdfkit": ["@foliojs-fork/pdfkit@0.15.3", "", { "dependencies": { "@foliojs-fork/fontkit": "^1.9.2", "@foliojs-fork/linebreak": "^1.1.1", "crypto-js": "^4.2.0", "jpeg-exif": "^1.1.4", "png-js": "^1.0.0" } }, "sha512-Obc0Wmy3bm7BINFVvPhcl2rnSSK61DQrlHU8aXnAqDk9LCjWdUOPwhgD8Ywz5VtuFjRxmVOM/kQ/XLIBjDvltw=="], + + "@foliojs-fork/restructure": ["@foliojs-fork/restructure@2.0.2", "", {}, "sha512-59SgoZ3EXbkfSX7b63tsou/SDGzwUEK6MuB5sKqgVK1/XE0fxmpsOb9DQI8LXW3KfGnAjImCGhhEb7uPPAUVNA=="], + + "@fullcalendar/core": ["@fullcalendar/core@6.1.19", "", { "dependencies": { "preact": "~10.12.1" } }, "sha512-z0aVlO5e4Wah6p6mouM0UEqtRf1MZZPt4mwzEyU6kusaNL+dlWQgAasF2cK23hwT4cmxkEmr4inULXgpyeExdQ=="], + + "@fullcalendar/daygrid": ["@fullcalendar/daygrid@6.1.19", "", { "peerDependencies": { "@fullcalendar/core": "~6.1.19" } }, "sha512-IAAfnMICnVWPjpT4zi87i3FEw0xxSza0avqY/HedKEz+l5MTBYvCDPOWDATpzXoLut3aACsjktIyw9thvIcRYQ=="], + + "@fullcalendar/interaction": ["@fullcalendar/interaction@6.1.19", "", { "peerDependencies": { "@fullcalendar/core": "~6.1.19" } }, "sha512-GOciy79xe8JMVp+1evAU3ytdwN/7tv35t5i1vFkifiuWcQMLC/JnLg/RA2s4sYmQwoYhTw/p4GLcP0gO5B3X5w=="], + + "@fullcalendar/list": ["@fullcalendar/list@6.1.19", "", { "peerDependencies": { "@fullcalendar/core": "~6.1.19" } }, "sha512-knZHpAVF0LbzZpSJSUmLUUzF0XlU/MRGK+Py2s0/mP93bCtno1k2L3XPs/kzh528hSjehwLm89RgKTSfW1P6cA=="], + + "@fullcalendar/react": ["@fullcalendar/react@6.1.19", "", { "peerDependencies": { "@fullcalendar/core": "~6.1.19", "react": "^16.7.0 || ^17 || ^18 || ^19", "react-dom": "^16.7.0 || ^17 || ^18 || ^19" } }, "sha512-FP78vnyylaL/btZeHig8LQgfHgfwxLaIG6sKbNkzkPkKEACv11UyyBoTSkaavPsHtXvAkcTED1l7TOunAyPEnA=="], + + "@fullcalendar/timegrid": ["@fullcalendar/timegrid@6.1.19", "", { "dependencies": { "@fullcalendar/daygrid": "~6.1.19" }, "peerDependencies": { "@fullcalendar/core": "~6.1.19" } }, "sha512-OuzpUueyO9wB5OZ8rs7TWIoqvu4v3yEqdDxZ2VcsMldCpYJRiOe7yHWKr4ap5Tb0fs7Rjbserc/b6Nt7ol6BRg=="], + + "@hello-pangea/dnd": ["@hello-pangea/dnd@18.0.1", "", { "dependencies": { "@babel/runtime": "^7.26.7", "css-box-model": "^1.2.1", "raf-schd": "^4.0.3", "react-redux": "^9.2.0", "redux": "^5.0.1" }, "peerDependencies": { "react": "^18.0.0 || ^19.0.0", "react-dom": "^18.0.0 || ^19.0.0" } }, "sha512-xojVWG8s/TGrKT1fC8K2tIWeejJYTAeJuj36zM//yEm/ZrnZUSFGS15BpO+jGZT1ybWvyXmeDJwPYb4dhWlbZQ=="], + + "@hookform/resolvers": ["@hookform/resolvers@5.2.1", "", { "dependencies": { "@standard-schema/utils": "^0.3.0" }, "peerDependencies": { "react-hook-form": "^7.55.0" } }, "sha512-u0+6X58gkjMcxur1wRWokA7XsiiBJ6aK17aPZxhkoYiK5J+HcTx0Vhu9ovXe6H+dVpO6cjrn2FkJTryXEMlryQ=="], + + "@humanfs/core": ["@humanfs/core@0.19.1", "", {}, "sha512-5DyQ4+1JEUzejeK1JGICcideyfUbGixgS9jNgex5nqkW+cY7WZhxBigmieN5Qnw9ZosSNVC9KQKyb+GUaGyKUA=="], + + "@humanfs/node": ["@humanfs/node@0.16.6", "", { "dependencies": { "@humanfs/core": "^0.19.1", "@humanwhocodes/retry": "^0.3.0" } }, "sha512-YuI2ZHQL78Q5HbhDiBA1X4LmYdXCKCMQIfw0pw7piHJwyREFebJUvrQN4cMssyES6x+vfUbx1CIpaQUKYdQZOw=="], + + "@humanwhocodes/module-importer": ["@humanwhocodes/module-importer@1.0.1", "", {}, "sha512-bxveV4V8v5Yb4ncFTT3rPSgZBOpCkjfK0y4oVVVJwIuDVBRMDXrPyXRL988i5ap9m9bnyEEjWfm5WkBmtffLfA=="], + + "@humanwhocodes/retry": ["@humanwhocodes/retry@0.4.3", "", {}, "sha512-bV0Tgo9K4hfPCek+aMAn81RppFKv2ySDQeMoSZuvTASywNTnVJCArCZE2FWqpvIatKu7VMRLWlR1EazvVhDyhQ=="], + + "@jridgewell/gen-mapping": ["@jridgewell/gen-mapping@0.3.13", "", { "dependencies": { "@jridgewell/sourcemap-codec": "^1.5.0", "@jridgewell/trace-mapping": "^0.3.24" } }, "sha512-2kkt/7niJ6MgEPxF0bYdQ6etZaA+fQvDcLKckhy1yIQOzaoKjBBjSj63/aLVjYE3qhRt5dvM+uUyfCg6UKCBbA=="], + + "@jridgewell/resolve-uri": ["@jridgewell/resolve-uri@3.1.2", "", {}, "sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw=="], + + "@jridgewell/sourcemap-codec": ["@jridgewell/sourcemap-codec@1.5.5", "", {}, "sha512-cYQ9310grqxueWbl+WuIUIaiUaDcj7WOq5fVhEljNVgRfOUhY9fy2zTvfoqWsnebh8Sl70VScFbICvJnLKB0Og=="], + + "@jridgewell/trace-mapping": ["@jridgewell/trace-mapping@0.3.30", "", { "dependencies": { "@jridgewell/resolve-uri": "^3.1.0", "@jridgewell/sourcemap-codec": "^1.4.14" } }, "sha512-GQ7Nw5G2lTu/BtHTKfXhKHok2WGetd4XYcVKGx00SjAk8GMwgJM3zr6zORiPGuOE+/vkc90KtTosSSvaCjKb2Q=="], + + "@kurkle/color": ["@kurkle/color@0.3.4", "", {}, "sha512-M5UknZPHRu3DEDWoipU6sE8PdkZ6Z/S+v4dD+Ke8IaNlpdSQah50lz1KtcFBa2vsdOnwbbnxJwVM4wty6udA5w=="], + + "@nodelib/fs.scandir": ["@nodelib/fs.scandir@2.1.5", "", { "dependencies": { "@nodelib/fs.stat": "2.0.5", "run-parallel": "^1.1.9" } }, "sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g=="], + + "@nodelib/fs.stat": ["@nodelib/fs.stat@2.0.5", "", {}, "sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A=="], + + "@nodelib/fs.walk": ["@nodelib/fs.walk@1.2.8", "", { "dependencies": { "@nodelib/fs.scandir": "2.1.5", "fastq": "^1.6.0" } }, "sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg=="], + + "@popperjs/core": ["@popperjs/core@2.11.8", "", {}, "sha512-P1st0aksCrn9sGZhp8GMYwBnQsbvAWsZAX44oXNNvLHGqAOcoVxmjZiohstwQ7SqKnbR47akdNi+uleWD8+g6A=="], + + "@rc-component/motion": ["@rc-component/motion@1.1.4", "", { "dependencies": { "@rc-component/util": "^1.2.0", "classnames": "^2.2.1" }, "peerDependencies": { "react": ">=16.9.0", "react-dom": ">=16.9.0" } }, "sha512-rz3+kqQ05xEgIAB9/UKQZKCg5CO/ivGNU78QWYKVfptmbjJKynZO4KXJ7pJD3oMxE9aW94LD/N3eppXWeysTjw=="], + + "@rc-component/portal": ["@rc-component/portal@2.0.0", "", { "dependencies": { "@rc-component/util": "^1.2.1", "classnames": "^2.3.2" }, "peerDependencies": { "react": ">=18.0.0", "react-dom": ">=18.0.0" } }, "sha512-337ADhBfgH02S8OujUl33OT+8zVJ67eyuUq11j/dE71rXKYNihMsggW8R2VfI2aL3SciDp8gAFsmPVoPkxLUGw=="], + + "@rc-component/resize-observer": ["@rc-component/resize-observer@1.0.0", "", { "dependencies": { "@rc-component/util": "^1.2.0", "classnames": "^2.2.1" }, "peerDependencies": { "react": ">=16.9.0", "react-dom": ">=16.9.0" } }, "sha512-inR8Ka87OOwtrDJzdVp2VuEVlc5nK20lHolvkwFUnXwV50p+nLhKny1NvNTCKvBmS/pi/rTn/1Hvsw10sRRnXA=="], + + "@rc-component/tour": ["@rc-component/tour@2.1.6", "", { "dependencies": { "@rc-component/portal": "^2.0.0", "@rc-component/trigger": "^3.0.0", "@rc-component/util": "^1.2.1", "classnames": "^2.3.2" }, "peerDependencies": { "react": ">=16.9.0", "react-dom": ">=16.9.0" } }, "sha512-KsjCSjc+BcPxcHgVjoRWnRk491WORbCO2PnVVezVithAu+XW3wv0w30zSCTT1UdFWksecahsKg/t/1f39GLYxg=="], + + "@rc-component/trigger": ["@rc-component/trigger@3.5.2", "", { "dependencies": { "@rc-component/motion": "^1.1.4", "@rc-component/portal": "^2.0.0", "@rc-component/resize-observer": "^1.0.0", "@rc-component/util": "^1.2.1", "classnames": "^2.3.2" }, "peerDependencies": { "react": ">=18.0.0", "react-dom": ">=18.0.0" } }, "sha512-LcJQa6G5RiGIlCz3TxkkwUjNlYpI5IGpcA5O35QzV8u+qzd0WzyyBB6aVPDkq7ZImGrLGU+jCTByM0q80HxPPA=="], + + "@rc-component/util": ["@rc-component/util@1.2.2", "", { "dependencies": { "is-mobile": "^5.0.0", "react-is": "^18.2.0" }, "peerDependencies": { "react": ">=18.0.0", "react-dom": ">=18.0.0" } }, "sha512-p3zQr9Wu8BKncqmuW23olzBoAFsN8PYMS9FaI4JwJLwknH7DvfHAr1fwbfl9aAWw4Jva64ucpenbgG4fznLUSw=="], + + "@react-aria/ssr": ["@react-aria/ssr@3.9.10", "", { "dependencies": { "@swc/helpers": "^0.5.0" }, "peerDependencies": { "react": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1" } }, "sha512-hvTm77Pf+pMBhuBm760Li0BVIO38jv1IBws1xFm1NoL26PU+fe+FMW5+VZWyANR6nYL65joaJKZqOdTQMkO9IQ=="], + + "@react-dnd/asap": ["@react-dnd/asap@4.0.1", "", {}, "sha512-kLy0PJDDwvwwTXxqTFNAAllPHD73AycE9ypWeln/IguoGBEbvFcPDbCV03G52bEcC5E+YgupBE0VzHGdC8SIXg=="], + + "@react-dnd/invariant": ["@react-dnd/invariant@2.0.0", "", {}, "sha512-xL4RCQBCBDJ+GRwKTFhGUW8GXa4yoDfJrPbLblc3U09ciS+9ZJXJ3Qrcs/x2IODOdIE5kQxvMmE2UKyqUictUw=="], + + "@react-dnd/shallowequal": ["@react-dnd/shallowequal@2.0.0", "", {}, "sha512-Pc/AFTdwZwEKJxFJvlxrSmGe/di+aAOBn60sremrpLo6VI/6cmiUYNNwlI5KNYttg7uypzA3ILPMPgxB2GYZEg=="], + + "@react-hook/debounce": ["@react-hook/debounce@3.0.0", "", { "dependencies": { "@react-hook/latest": "^1.0.2" }, "peerDependencies": { "react": ">=16.8" } }, "sha512-ir/kPrSfAzY12Gre0sOHkZ2rkEmM4fS5M5zFxCi4BnCeXh2nvx9Ujd+U4IGpKCuPA+EQD0pg1eK2NGLvfWejag=="], + + "@react-hook/event": ["@react-hook/event@1.2.6", "", { "peerDependencies": { "react": ">=16.8" } }, "sha512-JUL5IluaOdn5w5Afpe/puPa1rj8X6udMlQ9dt4hvMuKmTrBS1Ya6sb4sVgvfe2eU4yDuOfAhik8xhbcCekbg9Q=="], + + "@react-hook/latest": ["@react-hook/latest@1.0.3", "", { "peerDependencies": { "react": ">=16.8" } }, "sha512-dy6duzl+JnAZcDbNTfmaP3xHiKtbXYOaz3G51MGVljh548Y8MWzTr+PHLOfvpypEVW9zwvl+VyKjbWKEVbV1Rg=="], + + "@react-hook/passive-layout-effect": ["@react-hook/passive-layout-effect@1.2.1", "", { "peerDependencies": { "react": ">=16.8" } }, "sha512-IwEphTD75liO8g+6taS+4oqz+nnroocNfWVHWz7j+N+ZO2vYrc6PV1q7GQhuahL0IOR7JccFTsFKQ/mb6iZWAg=="], + + "@react-hook/throttle": ["@react-hook/throttle@2.2.0", "", { "dependencies": { "@react-hook/latest": "^1.0.2" }, "peerDependencies": { "react": ">=16.8" } }, "sha512-LJ5eg+yMV8lXtqK3lR+OtOZ2WH/EfWvuiEEu0M3bhR7dZRfTyEJKxH1oK9uyBxiXPtWXiQggWbZirMCXam51tg=="], + + "@react-hook/window-scroll": ["@react-hook/window-scroll@1.3.0", "", { "dependencies": { "@react-hook/event": "^1.2.1", "@react-hook/throttle": "^2.2.0" }, "peerDependencies": { "react": ">=16.8" } }, "sha512-LdYnCL22pFI+LTs85Fi2OQHSKWkzIuHFgv8lA+wwuaPxLOEhWR5bzJ21iygUH9X4meeLVRZKEbfpYi3OWWD4GQ=="], + + "@react-hook/window-size": ["@react-hook/window-size@3.1.1", "", { "dependencies": { "@react-hook/debounce": "^3.0.0", "@react-hook/event": "^1.2.1", "@react-hook/throttle": "^2.2.0" }, "peerDependencies": { "react": ">=16.8" } }, "sha512-yWnVS5LKnOUIrEsI44oz3bIIUYqflamPL27n+k/PC//PsX/YeWBky09oPeAoc9As6jSH16Wgo8plI+ECZaHk3g=="], + + "@react-leaflet/core": ["@react-leaflet/core@3.0.0", "", { "peerDependencies": { "leaflet": "^1.9.0", "react": "^19.0.0", "react-dom": "^19.0.0" } }, "sha512-3EWmekh4Nz+pGcr+xjf0KNyYfC3U2JjnkWsh0zcqaexYqmmB5ZhH37kz41JXGmKzpaMZCnPofBBm64i+YrEvGQ=="], + + "@restart/hooks": ["@restart/hooks@0.4.16", "", { "dependencies": { "dequal": "^2.0.3" }, "peerDependencies": { "react": ">=16.8.0" } }, "sha512-f7aCv7c+nU/3mF7NWLtVVr0Ra80RqsO89hO72r+Y/nvQr5+q0UFGkocElTH6MJApvReVh6JHUFYn2cw1WdHF3w=="], + + "@restart/ui": ["@restart/ui@1.9.4", "", { "dependencies": { "@babel/runtime": "^7.26.0", "@popperjs/core": "^2.11.8", "@react-aria/ssr": "^3.5.0", "@restart/hooks": "^0.5.0", "@types/warning": "^3.0.3", "dequal": "^2.0.3", "dom-helpers": "^5.2.0", "uncontrollable": "^8.0.4", "warning": "^4.0.3" }, "peerDependencies": { "react": ">=16.14.0", "react-dom": ">=16.14.0" } }, "sha512-N4C7haUc3vn4LTwVUPlkJN8Ach/+yIMvRuTVIhjilNHqegY60SGLrzud6errOMNJwSnmYFnt1J0H/k8FE3A4KA=="], + + "@rolldown/pluginutils": ["@rolldown/pluginutils@1.0.0-beta.32", "", {}, "sha512-QReCdvxiUZAPkvp1xpAg62IeNzykOFA6syH2CnClif4YmALN1XKpB39XneL80008UbtMShthSVDKmrx05N1q/g=="], + + "@rollup/rollup-android-arm-eabi": ["@rollup/rollup-android-arm-eabi@4.48.1", "", { "os": "android", "cpu": "arm" }, "sha512-rGmb8qoG/zdmKoYELCBwu7vt+9HxZ7Koos3pD0+sH5fR3u3Wb/jGcpnqxcnWsPEKDUyzeLSqksN8LJtgXjqBYw=="], + + "@rollup/rollup-android-arm64": ["@rollup/rollup-android-arm64@4.48.1", "", { "os": "android", "cpu": "arm64" }, "sha512-4e9WtTxrk3gu1DFE+imNJr4WsL13nWbD/Y6wQcyku5qadlKHY3OQ3LJ/INrrjngv2BJIHnIzbqMk1GTAC2P8yQ=="], + + "@rollup/rollup-darwin-arm64": ["@rollup/rollup-darwin-arm64@4.48.1", "", { "os": "darwin", "cpu": "arm64" }, "sha512-+XjmyChHfc4TSs6WUQGmVf7Hkg8ferMAE2aNYYWjiLzAS/T62uOsdfnqv+GHRjq7rKRnYh4mwWb4Hz7h/alp8A=="], + + "@rollup/rollup-darwin-x64": ["@rollup/rollup-darwin-x64@4.48.1", "", { "os": "darwin", "cpu": "x64" }, "sha512-upGEY7Ftw8M6BAJyGwnwMw91rSqXTcOKZnnveKrVWsMTF8/k5mleKSuh7D4v4IV1pLxKAk3Tbs0Lo9qYmii5mQ=="], + + "@rollup/rollup-freebsd-arm64": ["@rollup/rollup-freebsd-arm64@4.48.1", "", { "os": "freebsd", "cpu": "arm64" }, "sha512-P9ViWakdoynYFUOZhqq97vBrhuvRLAbN/p2tAVJvhLb8SvN7rbBnJQcBu8e/rQts42pXGLVhfsAP0k9KXWa3nQ=="], + + "@rollup/rollup-freebsd-x64": ["@rollup/rollup-freebsd-x64@4.48.1", "", { "os": "freebsd", "cpu": "x64" }, "sha512-VLKIwIpnBya5/saccM8JshpbxfyJt0Dsli0PjXozHwbSVaHTvWXJH1bbCwPXxnMzU4zVEfgD1HpW3VQHomi2AQ=="], + + "@rollup/rollup-linux-arm-gnueabihf": ["@rollup/rollup-linux-arm-gnueabihf@4.48.1", "", { "os": "linux", "cpu": "arm" }, "sha512-3zEuZsXfKaw8n/yF7t8N6NNdhyFw3s8xJTqjbTDXlipwrEHo4GtIKcMJr5Ed29leLpB9AugtAQpAHW0jvtKKaQ=="], + + "@rollup/rollup-linux-arm-musleabihf": ["@rollup/rollup-linux-arm-musleabihf@4.48.1", "", { "os": "linux", "cpu": "arm" }, "sha512-leo9tOIlKrcBmmEypzunV/2w946JeLbTdDlwEZ7OnnsUyelZ72NMnT4B2vsikSgwQifjnJUbdXzuW4ToN1wV+Q=="], + + "@rollup/rollup-linux-arm64-gnu": ["@rollup/rollup-linux-arm64-gnu@4.48.1", "", { "os": "linux", "cpu": "arm64" }, "sha512-Vy/WS4z4jEyvnJm+CnPfExIv5sSKqZrUr98h03hpAMbE2aI0aD2wvK6GiSe8Gx2wGp3eD81cYDpLLBqNb2ydwQ=="], + + "@rollup/rollup-linux-arm64-musl": ["@rollup/rollup-linux-arm64-musl@4.48.1", "", { "os": "linux", "cpu": "arm64" }, "sha512-x5Kzn7XTwIssU9UYqWDB9VpLpfHYuXw5c6bJr4Mzv9kIv242vmJHbI5PJJEnmBYitUIfoMCODDhR7KoZLot2VQ=="], + + "@rollup/rollup-linux-loongarch64-gnu": ["@rollup/rollup-linux-loongarch64-gnu@4.48.1", "", { "os": "linux", "cpu": "none" }, "sha512-yzCaBbwkkWt/EcgJOKDUdUpMHjhiZT/eDktOPWvSRpqrVE04p0Nd6EGV4/g7MARXXeOqstflqsKuXVM3H9wOIQ=="], + + "@rollup/rollup-linux-ppc64-gnu": ["@rollup/rollup-linux-ppc64-gnu@4.48.1", "", { "os": "linux", "cpu": "ppc64" }, "sha512-UK0WzWUjMAJccHIeOpPhPcKBqax7QFg47hwZTp6kiMhQHeOYJeaMwzeRZe1q5IiTKsaLnHu9s6toSYVUlZ2QtQ=="], + + "@rollup/rollup-linux-riscv64-gnu": ["@rollup/rollup-linux-riscv64-gnu@4.48.1", "", { "os": "linux", "cpu": "none" }, "sha512-3NADEIlt+aCdCbWVZ7D3tBjBX1lHpXxcvrLt/kdXTiBrOds8APTdtk2yRL2GgmnSVeX4YS1JIf0imFujg78vpw=="], + + "@rollup/rollup-linux-riscv64-musl": ["@rollup/rollup-linux-riscv64-musl@4.48.1", "", { "os": "linux", "cpu": "none" }, "sha512-euuwm/QTXAMOcyiFCcrx0/S2jGvFlKJ2Iro8rsmYL53dlblp3LkUQVFzEidHhvIPPvcIsxDhl2wkBE+I6YVGzA=="], + + "@rollup/rollup-linux-s390x-gnu": ["@rollup/rollup-linux-s390x-gnu@4.48.1", "", { "os": "linux", "cpu": "s390x" }, "sha512-w8mULUjmPdWLJgmTYJx/W6Qhln1a+yqvgwmGXcQl2vFBkWsKGUBRbtLRuKJUln8Uaimf07zgJNxOhHOvjSQmBQ=="], + + "@rollup/rollup-linux-x64-gnu": ["@rollup/rollup-linux-x64-gnu@4.48.1", "", { "os": "linux", "cpu": "x64" }, "sha512-90taWXCWxTbClWuMZD0DKYohY1EovA+W5iytpE89oUPmT5O1HFdf8cuuVIylE6vCbrGdIGv85lVRzTcpTRZ+kA=="], + + "@rollup/rollup-linux-x64-musl": ["@rollup/rollup-linux-x64-musl@4.48.1", "", { "os": "linux", "cpu": "x64" }, "sha512-2Gu29SkFh1FfTRuN1GR1afMuND2GKzlORQUP3mNMJbqdndOg7gNsa81JnORctazHRokiDzQ5+MLE5XYmZW5VWg=="], + + "@rollup/rollup-win32-arm64-msvc": ["@rollup/rollup-win32-arm64-msvc@4.48.1", "", { "os": "win32", "cpu": "arm64" }, "sha512-6kQFR1WuAO50bxkIlAVeIYsz3RUx+xymwhTo9j94dJ+kmHe9ly7muH23sdfWduD0BA8pD9/yhonUvAjxGh34jQ=="], + + "@rollup/rollup-win32-ia32-msvc": ["@rollup/rollup-win32-ia32-msvc@4.48.1", "", { "os": "win32", "cpu": "ia32" }, "sha512-RUyZZ/mga88lMI3RlXFs4WQ7n3VyU07sPXmMG7/C1NOi8qisUg57Y7LRarqoGoAiopmGmChUhSwfpvQ3H5iGSQ=="], + + "@rollup/rollup-win32-x64-msvc": ["@rollup/rollup-win32-x64-msvc@4.48.1", "", { "os": "win32", "cpu": "x64" }, "sha512-8a/caCUN4vkTChxkaIJcMtwIVcBhi4X2PQRoT+yCK3qRYaZ7cURrmJFL5Ux9H9RaMIXj9RuihckdmkBX3zZsgg=="], + + "@standard-schema/utils": ["@standard-schema/utils@0.3.0", "", {}, "sha512-e7Mew686owMaPJVNNLs55PUvgz371nKgwsc4vxE49zsODpJEnxgxRo2y/OKrqueavXgZNMDVj3DdHFlaSAeU8g=="], + + "@svgdotjs/svg.draggable.js": ["@svgdotjs/svg.draggable.js@3.0.6", "", { "peerDependencies": { "@svgdotjs/svg.js": "^3.2.4" } }, "sha512-7iJFm9lL3C40HQcqzEfezK2l+dW2CpoVY3b77KQGqc8GXWa6LhhmX5Ckv7alQfUXBuZbjpICZ+Dvq1czlGx7gA=="], + + "@svgdotjs/svg.filter.js": ["@svgdotjs/svg.filter.js@3.0.9", "", { "dependencies": { "@svgdotjs/svg.js": "^3.2.4" } }, "sha512-/69XMRCDoam2HgC4ldHIaDgeQf1ViHIsa0Ld4uWgiXtZ+E24DWHe/9Ib6kbNiZ7WRIdlVokUDR1Fg0kjIpkfbw=="], + + "@svgdotjs/svg.js": ["@svgdotjs/svg.js@3.2.4", "", {}, "sha512-BjJ/7vWNowlX3Z8O4ywT58DqbNRyYlkk6Yz/D13aB7hGmfQTvGX4Tkgtm/ApYlu9M7lCQi15xUEidqMUmdMYwg=="], + + "@svgdotjs/svg.panzoom.js": ["@svgdotjs/svg.panzoom.js@2.1.2", "", { "dependencies": { "@svgdotjs/svg.js": "^3.0.16" } }, "sha512-0Nzo2TRlTebW3pzfAPtHx8Ye7Y3kuMEkK7hwVJi0SgQUB/vstjg7fvCJxB++EqsuDEetP0/SC+4CpLMVm6Lh2g=="], + + "@svgdotjs/svg.resize.js": ["@svgdotjs/svg.resize.js@2.0.5", "", { "peerDependencies": { "@svgdotjs/svg.js": "^3.2.4", "@svgdotjs/svg.select.js": "^4.0.1" } }, "sha512-4heRW4B1QrJeENfi7326lUPYBCevj78FJs8kfeDxn5st0IYPIRXoTtOSYvTzFWgaWWXd3YCDE6ao4fmv91RthA=="], + + "@svgdotjs/svg.select.js": ["@svgdotjs/svg.select.js@4.0.3", "", { "peerDependencies": { "@svgdotjs/svg.js": "^3.2.4" } }, "sha512-qkMgso1sd2hXKd1FZ1weO7ANq12sNmQJeGDjs46QwDVsxSRcHmvWKL2NDF7Yimpwf3sl5esOLkPqtV2bQ3v/Jg=="], + + "@swc/helpers": ["@swc/helpers@0.5.17", "", { "dependencies": { "tslib": "^2.8.0" } }, "sha512-5IKx/Y13RsYd+sauPb2x+U/xZikHjolzfuDgTAl/Tdf3Q8rslRvC19NKDLgAJQ6wsqADk10ntlv08nPFw/gO/A=="], + + "@tanstack/react-table": ["@tanstack/react-table@8.21.3", "", { "dependencies": { "@tanstack/table-core": "8.21.3" }, "peerDependencies": { "react": ">=16.8", "react-dom": ">=16.8" } }, "sha512-5nNMTSETP4ykGegmVkhjcS8tTLW6Vl4axfEGQN3v0zdHYbK4UfoqfPChclTrJ4EoK9QynqAu9oUf8VEmrpZ5Ww=="], + + "@tanstack/table-core": ["@tanstack/table-core@8.21.3", "", {}, "sha512-ldZXEhOBb8Is7xLs01fR3YEc3DERiz5silj8tnGkFZytt1abEvl/GhUmCE0PMLaMPTa3Jk4HbKmRlHmu+gCftg=="], + + "@types/babel__core": ["@types/babel__core@7.20.5", "", { "dependencies": { "@babel/parser": "^7.20.7", "@babel/types": "^7.20.7", "@types/babel__generator": "*", "@types/babel__template": "*", "@types/babel__traverse": "*" } }, "sha512-qoQprZvz5wQFJwMDqeseRXWv3rqMvhgpbXFfVyWhbx9X47POIA6i/+dXefEmZKoAgOaTdaIgNSMqMIU61yRyzA=="], + + "@types/babel__generator": ["@types/babel__generator@7.27.0", "", { "dependencies": { "@babel/types": "^7.0.0" } }, "sha512-ufFd2Xi92OAVPYsy+P4n7/U7e68fex0+Ee8gSG9KX7eo084CWiQ4sdxktvdl0bOPupXtVJPY19zk6EwWqUQ8lg=="], + + "@types/babel__template": ["@types/babel__template@7.4.4", "", { "dependencies": { "@babel/parser": "^7.1.0", "@babel/types": "^7.0.0" } }, "sha512-h/NUaSyG5EyxBIp8YRxo4RMe2/qQgvyowRwVMzhYhBCONbW8PUsg4lkFMrhgZhUe5z3L3MiLDuvyJ/CaPa2A8A=="], + + "@types/babel__traverse": ["@types/babel__traverse@7.28.0", "", { "dependencies": { "@babel/types": "^7.28.2" } }, "sha512-8PvcXf70gTDZBgt9ptxJ8elBeBjcLOAcOtoO/mPJjtji1+CdGbHgm77om1GrsPxsiE+uXIpNSK64UYaIwQXd4Q=="], + + "@types/estree": ["@types/estree@1.0.8", "", {}, "sha512-dWHzHa2WqEXI/O1E9OjrocMTKJl2mSrEolh1Iomrv6U+JuNwaHXsXx9bLu5gG7BUWFIN0skIQJQ/L1rIex4X6w=="], + + "@types/geojson": ["@types/geojson@7946.0.16", "", {}, "sha512-6C8nqWur3j98U6+lXDfTUWIfgvZU+EumvpHKcYjujKH7woYyLj2sUmff0tRhrqM7BohUw7Pz3ZB1jj2gW9Fvmg=="], + + "@types/json-schema": ["@types/json-schema@7.0.15", "", {}, "sha512-5+fP8P8MFNC+AyZCDxrB2pkZFPGzqQWUzpSeuuVLvm8VMcorNYavBqoFcxK8bQz4Qsbn4oUEEem4wDLfcysGHA=="], + + "@types/leaflet": ["@types/leaflet@1.9.20", "", { "dependencies": { "@types/geojson": "*" } }, "sha512-rooalPMlk61LCaLOvBF2VIf9M47HgMQqi5xQ9QRi7c8PkdIe0WrIi5IxXUXQjAdL0c+vcQ01mYWbthzmp9GHWw=="], + + "@types/lodash": ["@types/lodash@4.17.20", "", {}, "sha512-H3MHACvFUEiujabxhaI/ImO6gUrd8oOurg7LQtS7mbwIXA/cUqWrvBsaeJ23aZEPk1TAYkurjfMbSELfoCXlGA=="], + + "@types/node": ["@types/node@24.3.0", "", { "dependencies": { "undici-types": "~7.10.0" } }, "sha512-aPTXCrfwnDLj4VvXrm+UUCQjNEvJgNA8s5F1cvwQU+3KNltTOkBm1j30uNLyqqPNe7gE3KFzImYoZEfLhp4Yow=="], + + "@types/parse-json": ["@types/parse-json@4.0.2", "", {}, "sha512-dISoDXWWQwUquiKsyZ4Ng+HX2KsPL7LyHKHQwgGFEA3IaKac4Obd+h2a/a6waisAoepJlBcx9paWqjA8/HVjCw=="], + + "@types/prop-types": ["@types/prop-types@15.7.15", "", {}, "sha512-F6bEyamV9jKGAFBEmlQnesRPGOQqS2+Uwi0Em15xenOxHaf2hv6L8YCVn3rPdPJOiJfPiCnLIRyvwVaqMY3MIw=="], + + "@types/react": ["@types/react@19.1.11", "", { "dependencies": { "csstype": "^3.0.2" } }, "sha512-lr3jdBw/BGj49Eps7EvqlUaoeA0xpj3pc0RoJkHpYaCHkVK7i28dKyImLQb3JVlqs3aYSXf7qYuWOW/fgZnTXQ=="], + + "@types/react-dom": ["@types/react-dom@19.1.7", "", { "peerDependencies": { "@types/react": "^19.0.0" } }, "sha512-i5ZzwYpqjmrKenzkoLM2Ibzt6mAsM7pxB6BCIouEVVmgiqaMj1TjaK7hnA36hbW5aZv20kx7Lw6hWzPWg0Rurw=="], + + "@types/react-transition-group": ["@types/react-transition-group@4.4.12", "", { "peerDependencies": { "@types/react": "*" } }, "sha512-8TV6R3h2j7a91c+1DXdJi3Syo69zzIZbz7Lg5tORM5LEJG7X/E6a1V3drRyBRZq7/utz7A+c4OgYLiLcYGHG6w=="], + + "@types/sortablejs": ["@types/sortablejs@1.15.8", "", {}, "sha512-b79830lW+RZfwaztgs1aVPgbasJ8e7AXtZYHTELNXZPsERt4ymJdjV4OccDbHQAvHrCcFpbF78jkm0R6h/pZVg=="], + + "@types/use-sync-external-store": ["@types/use-sync-external-store@0.0.6", "", {}, "sha512-zFDAD+tlpf2r4asuHEj0XH6pY6i0g5NeAHPn+15wk3BV6JA69eERFXC1gyGThDkVa1zCyKr5jox1+2LbV/AMLg=="], + + "@types/warning": ["@types/warning@3.0.3", "", {}, "sha512-D1XC7WK8K+zZEveUPY+cf4+kgauk8N4eHr/XIHXGlGYkHLud6hK9lYfZk1ry1TNh798cZUCgb6MqGEG8DkJt6Q=="], + + "@typescript-eslint/eslint-plugin": ["@typescript-eslint/eslint-plugin@8.40.0", "", { "dependencies": { "@eslint-community/regexpp": "^4.10.0", "@typescript-eslint/scope-manager": "8.40.0", "@typescript-eslint/type-utils": "8.40.0", "@typescript-eslint/utils": "8.40.0", "@typescript-eslint/visitor-keys": "8.40.0", "graphemer": "^1.4.0", "ignore": "^7.0.0", "natural-compare": "^1.4.0", "ts-api-utils": "^2.1.0" }, "peerDependencies": { "@typescript-eslint/parser": "^8.40.0", "eslint": "^8.57.0 || ^9.0.0", "typescript": ">=4.8.4 <6.0.0" } }, "sha512-w/EboPlBwnmOBtRbiOvzjD+wdiZdgFeo17lkltrtn7X37vagKKWJABvyfsJXTlHe6XBzugmYgd4A4nW+k8Mixw=="], + + "@typescript-eslint/parser": ["@typescript-eslint/parser@8.40.0", "", { "dependencies": { "@typescript-eslint/scope-manager": "8.40.0", "@typescript-eslint/types": "8.40.0", "@typescript-eslint/typescript-estree": "8.40.0", "@typescript-eslint/visitor-keys": "8.40.0", "debug": "^4.3.4" }, "peerDependencies": { "eslint": "^8.57.0 || ^9.0.0", "typescript": ">=4.8.4 <6.0.0" } }, "sha512-jCNyAuXx8dr5KJMkecGmZ8KI61KBUhkCob+SD+C+I5+Y1FWI2Y3QmY4/cxMCC5WAsZqoEtEETVhUiUMIGCf6Bw=="], + + "@typescript-eslint/project-service": ["@typescript-eslint/project-service@8.40.0", "", { "dependencies": { "@typescript-eslint/tsconfig-utils": "^8.40.0", "@typescript-eslint/types": "^8.40.0", "debug": "^4.3.4" }, "peerDependencies": { "typescript": ">=4.8.4 <6.0.0" } }, "sha512-/A89vz7Wf5DEXsGVvcGdYKbVM9F7DyFXj52lNYUDS1L9yJfqjW/fIp5PgMuEJL/KeqVTe2QSbXAGUZljDUpArw=="], + + "@typescript-eslint/scope-manager": ["@typescript-eslint/scope-manager@8.40.0", "", { "dependencies": { "@typescript-eslint/types": "8.40.0", "@typescript-eslint/visitor-keys": "8.40.0" } }, "sha512-y9ObStCcdCiZKzwqsE8CcpyuVMwRouJbbSrNuThDpv16dFAj429IkM6LNb1dZ2m7hK5fHyzNcErZf7CEeKXR4w=="], + + "@typescript-eslint/tsconfig-utils": ["@typescript-eslint/tsconfig-utils@8.40.0", "", { "peerDependencies": { "typescript": ">=4.8.4 <6.0.0" } }, "sha512-jtMytmUaG9d/9kqSl/W3E3xaWESo4hFDxAIHGVW/WKKtQhesnRIJSAJO6XckluuJ6KDB5woD1EiqknriCtAmcw=="], + + "@typescript-eslint/type-utils": ["@typescript-eslint/type-utils@8.40.0", "", { "dependencies": { "@typescript-eslint/types": "8.40.0", "@typescript-eslint/typescript-estree": "8.40.0", "@typescript-eslint/utils": "8.40.0", "debug": "^4.3.4", "ts-api-utils": "^2.1.0" }, "peerDependencies": { "eslint": "^8.57.0 || ^9.0.0", "typescript": ">=4.8.4 <6.0.0" } }, "sha512-eE60cK4KzAc6ZrzlJnflXdrMqOBaugeukWICO2rB0KNvwdIMaEaYiywwHMzA1qFpTxrLhN9Lp4E/00EgWcD3Ow=="], + + "@typescript-eslint/types": ["@typescript-eslint/types@8.40.0", "", {}, "sha512-ETdbFlgbAmXHyFPwqUIYrfc12ArvpBhEVgGAxVYSwli26dn8Ko+lIo4Su9vI9ykTZdJn+vJprs/0eZU0YMAEQg=="], + + "@typescript-eslint/typescript-estree": ["@typescript-eslint/typescript-estree@8.40.0", "", { "dependencies": { "@typescript-eslint/project-service": "8.40.0", "@typescript-eslint/tsconfig-utils": "8.40.0", "@typescript-eslint/types": "8.40.0", "@typescript-eslint/visitor-keys": "8.40.0", "debug": "^4.3.4", "fast-glob": "^3.3.2", "is-glob": "^4.0.3", "minimatch": "^9.0.4", "semver": "^7.6.0", "ts-api-utils": "^2.1.0" }, "peerDependencies": { "typescript": ">=4.8.4 <6.0.0" } }, "sha512-k1z9+GJReVVOkc1WfVKs1vBrR5MIKKbdAjDTPvIK3L8De6KbFfPFt6BKpdkdk7rZS2GtC/m6yI5MYX+UsuvVYQ=="], + + "@typescript-eslint/utils": ["@typescript-eslint/utils@8.40.0", "", { "dependencies": { "@eslint-community/eslint-utils": "^4.7.0", "@typescript-eslint/scope-manager": "8.40.0", "@typescript-eslint/types": "8.40.0", "@typescript-eslint/typescript-estree": "8.40.0" }, "peerDependencies": { "eslint": "^8.57.0 || ^9.0.0", "typescript": ">=4.8.4 <6.0.0" } }, "sha512-Cgzi2MXSZyAUOY+BFwGs17s7ad/7L+gKt6Y8rAVVWS+7o6wrjeFN4nVfTpbE25MNcxyJ+iYUXflbs2xR9h4UBg=="], + + "@typescript-eslint/visitor-keys": ["@typescript-eslint/visitor-keys@8.40.0", "", { "dependencies": { "@typescript-eslint/types": "8.40.0", "eslint-visitor-keys": "^4.2.1" } }, "sha512-8CZ47QwalyRjsypfwnbI3hKy5gJDPmrkLjkgMxhi0+DZZ2QNx2naS6/hWoVYUHU7LU2zleF68V9miaVZvhFfTA=="], + + "@vitejs/plugin-react": ["@vitejs/plugin-react@5.0.1", "", { "dependencies": { "@babel/core": "^7.28.3", "@babel/plugin-transform-react-jsx-self": "^7.27.1", "@babel/plugin-transform-react-jsx-source": "^7.27.1", "@rolldown/pluginutils": "1.0.0-beta.32", "@types/babel__core": "^7.20.5", "react-refresh": "^0.17.0" }, "peerDependencies": { "vite": "^4.2.0 || ^5.0.0 || ^6.0.0 || ^7.0.0" } }, "sha512-DE4UNaBXwtVoDJ0ccBdLVjFTWL70NRuWNCxEieTI3lrq9ORB9aOCQEKstwDXBl87NvFdbqh/p7eINGyj0BthJA=="], + + "@yr/monotone-cubic-spline": ["@yr/monotone-cubic-spline@1.0.3", "", {}, "sha512-FQXkOta0XBSUPHndIKON2Y9JeQz5ZeMqLYZVVK93FliNBFm7LNMIZmY6FrMEB9XPcDbE2bekMbZD6kzDkxwYjA=="], + + "acorn": ["acorn@8.15.0", "", { "bin": { "acorn": "bin/acorn" } }, "sha512-NZyJarBfL7nWwIq+FDL6Zp/yHEhePMNnnJ0y3qfieCrmNvYct8uvtiV41UvlSe6apAfk0fY1FbWx+NwfmpvtTg=="], + + "acorn-jsx": ["acorn-jsx@5.3.2", "", { "peerDependencies": { "acorn": "^6.0.0 || ^7.0.0 || ^8.0.0" } }, "sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ=="], + + "ajv": ["ajv@6.12.6", "", { "dependencies": { "fast-deep-equal": "^3.1.1", "fast-json-stable-stringify": "^2.0.0", "json-schema-traverse": "^0.4.1", "uri-js": "^4.2.2" } }, "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g=="], + + "ansi-styles": ["ansi-styles@4.3.0", "", { "dependencies": { "color-convert": "^2.0.1" } }, "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg=="], + + "anymatch": ["anymatch@3.1.3", "", { "dependencies": { "normalize-path": "^3.0.0", "picomatch": "^2.0.4" } }, "sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw=="], + + "apexcharts": ["apexcharts@4.7.0", "", { "dependencies": { "@svgdotjs/svg.draggable.js": "^3.0.4", "@svgdotjs/svg.filter.js": "^3.0.8", "@svgdotjs/svg.js": "^3.2.4", "@svgdotjs/svg.resize.js": "^2.0.2", "@svgdotjs/svg.select.js": "^4.0.1", "@yr/monotone-cubic-spline": "^1.0.3" } }, "sha512-iZSrrBGvVlL+nt2B1NpqfDuBZ9jX61X9I2+XV0hlYXHtTwhwLTHDKGXjNXAgFBDLuvSYCB/rq2nPWVPRv2DrGA=="], + + "apextree": ["apextree@1.4.2", "", { "dependencies": { "@dagrejs/dagre": "^1.1.4", "@svgdotjs/svg.js": "^3.2.0", "@svgdotjs/svg.panzoom.js": "^2.1.2" } }, "sha512-svRWJG8wHXTNivLXsOgXvlZnsuKQM69jwlO439cd0U4zohvYGxnKpdXrye4C30dm46x0FNibSjkHmmxeDj5Akg=="], + + "argparse": ["argparse@2.0.1", "", {}, "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q=="], + + "attr-accept": ["attr-accept@2.2.5", "", {}, "sha512-0bDNnY/u6pPwHDMoF0FieU354oBi0a8rD9FcsLwzcGWbc8KS8KPIi7y+s13OlVY+gMWc/9xEMUgNE6Qm8ZllYQ=="], + + "babel-plugin-macros": ["babel-plugin-macros@3.1.0", "", { "dependencies": { "@babel/runtime": "^7.12.5", "cosmiconfig": "^7.0.0", "resolve": "^1.19.0" } }, "sha512-Cg7TFGpIr01vOQNODXOOaGz2NpCU5gl8x1qJFbb6hbZxR7XrcE2vtbAsTAbJ7/xwJtUuJEw8K8Zr/AE0LHlesg=="], + + "balanced-match": ["balanced-match@1.0.2", "", {}, "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw=="], + + "base64-js": ["base64-js@1.3.1", "", {}, "sha512-mLQ4i2QO1ytvGWFWmcngKO//JXAQueZvwEKtjgQFM4jIK0kU+ytMfplL8j+n5mspOfjHwoAg+9yhb7BwAHm36g=="], + + "binary-extensions": ["binary-extensions@2.3.0", "", {}, "sha512-Ceh+7ox5qe7LJuLHoY0feh3pHuUDHAcRUeyL2VYghZwfpkNIy/+8Ocg0a3UuSoYzavmylwuLWQOf3hl0jjMMIw=="], + + "bl": ["bl@4.1.0", "", { "dependencies": { "buffer": "^5.5.0", "inherits": "^2.0.4", "readable-stream": "^3.4.0" } }, "sha512-1W07cM9gS6DcLperZfFSj+bWLtaPGSOHWhPiGzXmvVJbRLdG82sH/Kn8EtW1VqWVA54AKf2h5k5BbnIbwF3h6w=="], + + "bootstrap": ["bootstrap@5.3.7", "", { "peerDependencies": { "@popperjs/core": "^2.11.8" } }, "sha512-7KgiD8UHjfcPBHEpDNg+zGz8L3LqR3GVwqZiBRFX04a1BCArZOz1r2kjly2HQ0WokqTO0v1nF+QAt8dsW4lKlw=="], + + "brace-expansion": ["brace-expansion@1.1.12", "", { "dependencies": { "balanced-match": "^1.0.0", "concat-map": "0.0.1" } }, "sha512-9T9UjW3r0UW5c1Q7GTwllptXwhvYmEzFhzMfZ9H7FQWt+uZePjZPjBP/W1ZEyZ1twGWom5/56TF4lPcqjnDHcg=="], + + "braces": ["braces@3.0.3", "", { "dependencies": { "fill-range": "^7.1.1" } }, "sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA=="], + + "brotli": ["brotli@1.3.3", "", { "dependencies": { "base64-js": "^1.1.2" } }, "sha512-oTKjJdShmDuGW94SyyaoQvAjf30dZaHnjJ8uAF+u2/vGJkJbJPJAT1gDiOJP5v1Zb6f9KEyW/1HpuaWIXtGHPg=="], + + "browserslist": ["browserslist@4.25.3", "", { "dependencies": { "caniuse-lite": "^1.0.30001735", "electron-to-chromium": "^1.5.204", "node-releases": "^2.0.19", "update-browserslist-db": "^1.1.3" }, "bin": { "browserslist": "cli.js" } }, "sha512-cDGv1kkDI4/0e5yON9yM5G/0A5u8sf5TnmdX5C9qHzI9PPu++sQ9zjm1k9NiOrf3riY4OkK0zSGqfvJyJsgCBQ=="], + + "buffer": ["buffer@5.7.1", "", { "dependencies": { "base64-js": "^1.3.1", "ieee754": "^1.1.13" } }, "sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ=="], + + "call-bind": ["call-bind@1.0.8", "", { "dependencies": { "call-bind-apply-helpers": "^1.0.0", "es-define-property": "^1.0.0", "get-intrinsic": "^1.2.4", "set-function-length": "^1.2.2" } }, "sha512-oKlSFMcMwpUg2ednkhQ454wfWiU/ul3CkJe/PEHcTKuiX6RpbehUiFMXu13HalGZxfUwCQzZG747YXBn1im9ww=="], + + "call-bind-apply-helpers": ["call-bind-apply-helpers@1.0.2", "", { "dependencies": { "es-errors": "^1.3.0", "function-bind": "^1.1.2" } }, "sha512-Sp1ablJ0ivDkSzjcaJdxEunN5/XvksFJ2sMBFfq6x0ryhQV/2b/KwFe21cMpmHtPOSij8K99/wSfoEuTObmuMQ=="], + + "call-bound": ["call-bound@1.0.4", "", { "dependencies": { "call-bind-apply-helpers": "^1.0.2", "get-intrinsic": "^1.3.0" } }, "sha512-+ys997U96po4Kx/ABpBCqhA9EuxJaQWDQg7295H4hBphv3IZg0boBKuwYpt4YXp6MZ5AmZQnU/tyMTlRpaSejg=="], + + "callsites": ["callsites@3.1.0", "", {}, "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ=="], + + "caniuse-lite": ["caniuse-lite@1.0.30001737", "", {}, "sha512-BiloLiXtQNrY5UyF0+1nSJLXUENuhka2pzy2Fx5pGxqavdrxSCW4U6Pn/PoG3Efspi2frRbHpBV2XsrPE6EDlw=="], + + "canvas": ["canvas@3.2.0", "", { "dependencies": { "node-addon-api": "^7.0.0", "prebuild-install": "^7.1.3" } }, "sha512-jk0GxrLtUEmW/TmFsk2WghvgHe8B0pxGilqCL21y8lHkPUGa6FTsnCNtHPOzT8O3y+N+m3espawV80bbBlgfTA=="], + + "chalk": ["chalk@4.1.2", "", { "dependencies": { "ansi-styles": "^4.1.0", "supports-color": "^7.1.0" } }, "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA=="], + + "chart.js": ["chart.js@4.5.0", "", { "dependencies": { "@kurkle/color": "^0.3.0" } }, "sha512-aYeC/jDgSEx8SHWZvANYMioYMZ2KX02W6f6uVfyteuCGcadDLcYVHdfdygsTQkQ4TKn5lghoojAsPj5pu0SnvQ=="], + + "chokidar": ["chokidar@3.6.0", "", { "dependencies": { "anymatch": "~3.1.2", "braces": "~3.0.2", "glob-parent": "~5.1.2", "is-binary-path": "~2.1.0", "is-glob": "~4.0.1", "normalize-path": "~3.0.0", "readdirp": "~3.6.0" }, "optionalDependencies": { "fsevents": "~2.3.2" } }, "sha512-7VT13fmjotKpGipCW9JEQAusEPE+Ei8nl6/g4FBAmIm0GOOLMua9NDDo/DWp0ZAxCr3cPq5ZpBqmPAQgDda2Pw=="], + + "chownr": ["chownr@1.1.4", "", {}, "sha512-jJ0bqzaylmJtVnNgzTeSOs8DPavpbYgEr/b0YL8/2GO3xJEhInFmhKMUnEJQjZumK7KXGFhUy89PrsJWlakBVg=="], + + "classnames": ["classnames@2.5.1", "", {}, "sha512-saHYOzhIQs6wy2sVxTM6bUDsQO4F50V9RQ22qBpEdCW+I+/Wmke2HOl6lS6dTpdxVhb88/I6+Hs+438c3lfUow=="], + + "clone": ["clone@1.0.4", "", {}, "sha512-JQHZ2QMW6l3aH/j6xCqQThY/9OH4D/9ls34cgkUBiEeocRTU04tHfKPBsUK1PqZCUQM7GiA0IIXJSuXHI64Kbg=="], + + "clsx": ["clsx@2.1.1", "", {}, "sha512-eYm0QWBtUrBWZWG0d386OGAw16Z995PiOVo2B7bjWSbHedGl5e0ZWaq65kOGgUSNesEIDkB9ISbTg/JK9dhCZA=="], + + "color-convert": ["color-convert@2.0.1", "", { "dependencies": { "color-name": "~1.1.4" } }, "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ=="], + + "color-name": ["color-name@1.1.4", "", {}, "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA=="], + + "compute-scroll-into-view": ["compute-scroll-into-view@3.1.1", "", {}, "sha512-VRhuHOLoKYOy4UbilLbUzbYg93XLjv2PncJC50EuTWPA3gaja1UjBsUP/D/9/juV3vQFr6XBEzn9KCAHdUvOHw=="], + + "concat-map": ["concat-map@0.0.1", "", {}, "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg=="], + + "convert-source-map": ["convert-source-map@2.0.0", "", {}, "sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg=="], + + "cookie": ["cookie@1.0.2", "", {}, "sha512-9Kr/j4O16ISv8zBBhJoi4bXOYNTkFLOqSL3UDB0njXxCXNezjeyVrJyGOWtgfs/q2km1gwBcfH8q1yEGoMYunA=="], + + "core-util-is": ["core-util-is@1.0.3", "", {}, "sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ=="], + + "cosmiconfig": ["cosmiconfig@7.1.0", "", { "dependencies": { "@types/parse-json": "^4.0.0", "import-fresh": "^3.2.1", "parse-json": "^5.0.0", "path-type": "^4.0.0", "yaml": "^1.10.0" } }, "sha512-AdmX6xUzdNASswsFtmwSt7Vj8po9IuqXm0UXz7QKPuEUmPB4XyjGfaAr2PSuELMwkRMVH1EpIkX5bTZGRB3eCA=="], + + "countup.js": ["countup.js@2.9.0", "", {}, "sha512-llqrvyXztRFPp6+i8jx25phHWcVWhrHO4Nlt0uAOSKHB8778zzQswa4MU3qKBvkXfJKftRYFJuVHez67lyKdHg=="], + + "cross-spawn": ["cross-spawn@7.0.6", "", { "dependencies": { "path-key": "^3.1.0", "shebang-command": "^2.0.0", "which": "^2.0.1" } }, "sha512-uV2QOWP2nWzsy2aMp8aRibhi9dlzF5Hgh5SHaB9OiTGEyDTiJJyx0uy51QXdyWbtAHNua4XJzUKca3OzKUd3vA=="], + + "crypto-js": ["crypto-js@4.2.0", "", {}, "sha512-KALDyEYgpY+Rlob/iriUtjV6d5Eq+Y191A5g4UqLAi8CyGP9N1+FdVbkc1SxKc2r4YAYqG8JzO2KGL+AizD70Q=="], + + "css-box-model": ["css-box-model@1.2.1", "", { "dependencies": { "tiny-invariant": "^1.0.6" } }, "sha512-a7Vr4Q/kd/aw96bnJG332W9V9LkJO69JRcaCYDUqjp6/z0w6VcZjgAcTbgFxEPfBgdnAwlh3iwu+hLopa+flJw=="], + + "csstype": ["csstype@3.1.3", "", {}, "sha512-M1uQkMl8rQK/szD0LNhtqxIPLpimGm8sOBwU7lLnCpSbTyY3yeU1Vc7l4KT5zT4s/yOxHH5O7tIuuLOCnLADRw=="], + + "datatables.net": ["datatables.net@2.3.3", "", { "dependencies": { "jquery": ">=1.7" } }, "sha512-SWL3za6nheY6gdoiLgCc++tYmxbwrmv2bjrEiII9rXBWXXSbOZct6pjR3FueMVRM5jmt7pQcXiGovfuFDnutQg=="], + + "datatables.net-bs5": ["datatables.net-bs5@2.3.3", "", { "dependencies": { "datatables.net": "2.3.3", "jquery": ">=1.7" } }, "sha512-IPtC57k3KyZaLzIYTHies23Cm2zqaKfD6lkxy/aOAUUAtsg35l53VqNY9y84AEySYG3YLghMHVBvl2ckUhvm0A=="], + + "datatables.net-buttons": ["datatables.net-buttons@3.2.4", "", { "dependencies": { "datatables.net": "^2", "jquery": ">=1.7" } }, "sha512-anA39/R0kpHA2DOwqEHy/ZMXD5vf4tWmyNO0BnO0kJG7AFNvGTUCWBnBifXYg3G64U6JYpYY+MuTFKIB1/ZMTQ=="], + + "datatables.net-buttons-bs5": ["datatables.net-buttons-bs5@3.2.4", "", { "dependencies": { "datatables.net-bs5": "^2", "datatables.net-buttons": "3.2.4", "jquery": ">=1.7" } }, "sha512-yX8Ia32P1D9L02XWjisA6a9fFp0LgmzpIcvf/4ty+QG5/qj1tOOqWgsXsxxIY2Uj918WmLJS6VaJabRAMoAqHA=="], + + "datatables.net-fixedheader": ["datatables.net-fixedheader@4.0.3", "", { "dependencies": { "datatables.net": "^2", "jquery": ">=1.7" } }, "sha512-Mzx6MT7/+aaLQ3fRlOaFPJQFMOYorsSx2PvD/Hh3DAv6O/Oq8UPQsJ84I16feAqkPqoDdtP/eaXuUKH+NYDfVQ=="], + + "datatables.net-fixedheader-bs5": ["datatables.net-fixedheader-bs5@4.0.3", "", { "dependencies": { "datatables.net-bs5": "^2", "datatables.net-fixedheader": "4.0.3", "jquery": ">=1.7" } }, "sha512-FaYQe2RakMcBEDpicmJy47lFoxVucPI0hg8EvsfGsDdkpIEcvpOdnxfCOJNyexyLg9zkfBnPgxLitEKAYyUdrw=="], + + "datatables.net-react": ["datatables.net-react@1.0.1", "", {}, "sha512-RbLaS87ss3hZjLKfymUpj9UJ7KkQQ57oG2lbcqPVki67x3emtyaDHY8NOCYAXPU/BHYYRNR2u6y7fqffYOV+GA=="], + + "datatables.net-responsive": ["datatables.net-responsive@3.0.6", "", { "dependencies": { "datatables.net": "^2", "jquery": ">=1.7" } }, "sha512-GHVgU7k7/ST7F/z1/0ieaJiNghrO1mgH8PbikAaL9MH1pw+GMcCuL5sFaFzIyMRzZz7tnrmVnjrkNX+W01VzhA=="], + + "datatables.net-responsive-bs5": ["datatables.net-responsive-bs5@3.0.6", "", { "dependencies": { "datatables.net-bs5": "^2", "datatables.net-responsive": "3.0.6", "jquery": ">=1.7" } }, "sha512-FQNYSisTfShgcur5mBTFgpaqmtlM9fDCDAMtkqU5YyZldvR+vlMW0rJ60hSKHN9B+aAA3tIjDZuR1U3+VvO6ag=="], + + "datatables.net-select": ["datatables.net-select@3.1.0", "", { "dependencies": { "datatables.net": "^2", "jquery": ">=1.7" } }, "sha512-DqXX6kYsDCjMtfiFsAVerYRI3HoGl3LOouJTkXRbp5E9EnWUHbDnmLPnPBirqqTD0j7GzJbi6/cIXNin8Wh2Nw=="], + + "datatables.net-select-bs5": ["datatables.net-select-bs5@3.1.0", "", { "dependencies": { "datatables.net-bs5": "^2", "datatables.net-select": "3.1.0", "jquery": ">=1.7" } }, "sha512-kZLQqOaDT6qDzOn5PuptSAAkFva3JmIfoJiYdDqBMK62n9L59eJDOYYyCd42QJSUdF3DbpMtbpQzhS5Rl5lm6g=="], + + "date-fns": ["date-fns@4.1.0", "", {}, "sha512-Ukq0owbQXxa/U3EGtsdVBkR1w7KOQ5gIBqdH2hkvknzZPYvBxb/aa6E8L7tmjFtkwZBu3UXBbjIgPo/Ez4xaNg=="], + + "date-fns-jalali": ["date-fns-jalali@4.1.0-0", "", {}, "sha512-hTIP/z+t+qKwBDcmmsnmjWTduxCg+5KfdqWQvb2X/8C9+knYY6epN/pfxdDuyVlSVeFz0sM5eEfwIUQ70U4ckg=="], + + "dayjs": ["dayjs@1.11.13", "", {}, "sha512-oaMBel6gjolK862uaPQOVTA7q3TZhuSvuMQAAglQDOWYO9A91IrAOUJEyKVlqJlHE0vq5p5UXxzdPfMH/x6xNg=="], + + "debug": ["debug@4.4.1", "", { "dependencies": { "ms": "^2.1.3" } }, "sha512-KcKCqiftBJcZr++7ykoDIEwSa3XWowTfNPo92BYxjXiyYEVrUQh2aLyhxBCwww+heortUFxEJYcRzosstTEBYQ=="], + + "decompress-response": ["decompress-response@6.0.0", "", { "dependencies": { "mimic-response": "^3.1.0" } }, "sha512-aW35yZM6Bb/4oJlZncMH2LCoZtJXTRxES17vE3hoRiowU2kWHaJKFkSBDnDR+cm9J+9QhXmREyIfv0pji9ejCQ=="], + + "deep-equal": ["deep-equal@1.1.2", "", { "dependencies": { "is-arguments": "^1.1.1", "is-date-object": "^1.0.5", "is-regex": "^1.1.4", "object-is": "^1.1.5", "object-keys": "^1.1.1", "regexp.prototype.flags": "^1.5.1" } }, "sha512-5tdhKF6DbU7iIzrIOa1AOUt39ZRm13cmL1cGEh//aqR8x9+tNfbywRf0n5FD/18OKMdo7DNEtrX2t22ZAkI+eg=="], + + "deep-extend": ["deep-extend@0.6.0", "", {}, "sha512-LOHxIOaPYdHlJRtCQfDIVZtfw/ufM8+rVj649RIHzcm/vGwQRXFt6OPqIFWsm2XEMrNIEtWR64sY1LEKD2vAOA=="], + + "deep-is": ["deep-is@0.1.4", "", {}, "sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ=="], + + "define-data-property": ["define-data-property@1.1.4", "", { "dependencies": { "es-define-property": "^1.0.0", "es-errors": "^1.3.0", "gopd": "^1.0.1" } }, "sha512-rBMvIzlpA8v6E+SJZoo++HAYqsLrkg7MSfIinMPFhmkorw7X+dOXVJQs+QT69zGkzMyfDnIMN2Wid1+NbL3T+A=="], + + "define-properties": ["define-properties@1.2.1", "", { "dependencies": { "define-data-property": "^1.0.1", "has-property-descriptors": "^1.0.0", "object-keys": "^1.1.1" } }, "sha512-8QmQKqEASLd5nx0U1B1okLElbUuuttJ/AnYmRXbbbGDWh6uS208EjD4Xqq/I9wK7u0v6O08XhTWnt5XtEbR6Dg=="], + + "dequal": ["dequal@2.0.3", "", {}, "sha512-0je+qPKHEMohvfRTCEo3CrPG6cAzAYgmzKyxRiYSSDkS6eGJdyVJm7WaYA5ECaAD9wLB2T4EEeymA5aFVcYXCA=="], + + "detect-libc": ["detect-libc@2.0.4", "", {}, "sha512-3UDv+G9CsCKO1WKMGw9fwq/SWJYbI0c5Y7LU1AXYoDdbhE2AHQ6N6Nb34sG8Fj7T5APy8qXDCKuuIHd1BR0tVA=="], + + "dfa": ["dfa@1.2.0", "", {}, "sha512-ED3jP8saaweFTjeGX8HQPjeC1YYyZs98jGNZx6IiBvxW7JG5v492kamAQB3m2wop07CvU/RQmzcKr6bgcC5D/Q=="], + + "dnd-core": ["dnd-core@14.0.1", "", { "dependencies": { "@react-dnd/asap": "^4.0.0", "@react-dnd/invariant": "^2.0.0", "redux": "^4.1.1" } }, "sha512-+PVS2VPTgKFPYWo3vAFEA8WPbTf7/xo43TifH9G8S1KqnrQu0o77A3unrF5yOugy4mIz7K5wAVFHUcha7wsz6A=="], + + "dom-helpers": ["dom-helpers@5.2.1", "", { "dependencies": { "@babel/runtime": "^7.8.7", "csstype": "^3.0.2" } }, "sha512-nRCa7CK3VTrM2NmGkIy4cbK7IZlgBE/PYMn55rrXefr5xXDP0LdtfPnblFDoVdcAfslJ7or6iqAUnx0CCGIWQA=="], + + "dunder-proto": ["dunder-proto@1.0.1", "", { "dependencies": { "call-bind-apply-helpers": "^1.0.1", "es-errors": "^1.3.0", "gopd": "^1.2.0" } }, "sha512-KIN/nDJBQRcXw0MLVhZE9iQHmG68qAVIBg9CqmUYjmQIhgij9U5MFvrqkUL5FbtyyzZuOeOt0zdeRe4UY7ct+A=="], + + "electron-to-chromium": ["electron-to-chromium@1.5.208", "", {}, "sha512-ozZyibehoe7tOhNaf16lKmljVf+3npZcJIEbJRVftVsmAg5TeA1mGS9dVCZzOwr2xT7xK15V0p7+GZqSPgkuPg=="], + + "end-of-stream": ["end-of-stream@1.4.5", "", { "dependencies": { "once": "^1.4.0" } }, "sha512-ooEGc6HP26xXq/N+GCGOT0JKCLDGrq2bQUZrQ7gyrJiZANJ/8YDTxTpQBXGMn+WbIQXNVpyWymm7KYVICQnyOg=="], + + "error-ex": ["error-ex@1.3.2", "", { "dependencies": { "is-arrayish": "^0.2.1" } }, "sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g=="], + + "es-define-property": ["es-define-property@1.0.1", "", {}, "sha512-e3nRfgfUZ4rNGL232gUgX06QNyyez04KdjFrF+LTRoOXmrOgFKDg4BCdsjW8EnT69eqdYGmRpJwiPVYNrCaW3g=="], + + "es-errors": ["es-errors@1.3.0", "", {}, "sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw=="], + + "es-object-atoms": ["es-object-atoms@1.1.1", "", { "dependencies": { "es-errors": "^1.3.0" } }, "sha512-FGgH2h8zKNim9ljj7dankFPcICIK9Cp5bm+c2gQSYePhpaG5+esrLODihIorn+Pe6FGJzWhXQotPv73jTaldXA=="], + + "esbuild": ["esbuild@0.25.9", "", { "optionalDependencies": { "@esbuild/aix-ppc64": "0.25.9", "@esbuild/android-arm": "0.25.9", "@esbuild/android-arm64": "0.25.9", "@esbuild/android-x64": "0.25.9", "@esbuild/darwin-arm64": "0.25.9", "@esbuild/darwin-x64": "0.25.9", "@esbuild/freebsd-arm64": "0.25.9", "@esbuild/freebsd-x64": "0.25.9", "@esbuild/linux-arm": "0.25.9", "@esbuild/linux-arm64": "0.25.9", "@esbuild/linux-ia32": "0.25.9", "@esbuild/linux-loong64": "0.25.9", "@esbuild/linux-mips64el": "0.25.9", "@esbuild/linux-ppc64": "0.25.9", "@esbuild/linux-riscv64": "0.25.9", "@esbuild/linux-s390x": "0.25.9", "@esbuild/linux-x64": "0.25.9", "@esbuild/netbsd-arm64": "0.25.9", "@esbuild/netbsd-x64": "0.25.9", "@esbuild/openbsd-arm64": "0.25.9", "@esbuild/openbsd-x64": "0.25.9", "@esbuild/openharmony-arm64": "0.25.9", "@esbuild/sunos-x64": "0.25.9", "@esbuild/win32-arm64": "0.25.9", "@esbuild/win32-ia32": "0.25.9", "@esbuild/win32-x64": "0.25.9" }, "bin": { "esbuild": "bin/esbuild" } }, "sha512-CRbODhYyQx3qp7ZEwzxOk4JBqmD/seJrzPa/cGjY1VtIn5E09Oi9/dB4JwctnfZ8Q8iT7rioVv5k/FNT/uf54g=="], + + "escalade": ["escalade@3.2.0", "", {}, "sha512-WUj2qlxaQtO4g6Pq5c29GTcWGDyd8itL8zTlipgECz3JesAiiOKotd8JU6otB3PACgG6xkJUyVhboMS+bje/jA=="], + + "escape-string-regexp": ["escape-string-regexp@4.0.0", "", {}, "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA=="], + + "eslint": ["eslint@9.34.0", "", { "dependencies": { "@eslint-community/eslint-utils": "^4.2.0", "@eslint-community/regexpp": "^4.12.1", "@eslint/config-array": "^0.21.0", "@eslint/config-helpers": "^0.3.1", "@eslint/core": "^0.15.2", "@eslint/eslintrc": "^3.3.1", "@eslint/js": "9.34.0", "@eslint/plugin-kit": "^0.3.5", "@humanfs/node": "^0.16.6", "@humanwhocodes/module-importer": "^1.0.1", "@humanwhocodes/retry": "^0.4.2", "@types/estree": "^1.0.6", "@types/json-schema": "^7.0.15", "ajv": "^6.12.4", "chalk": "^4.0.0", "cross-spawn": "^7.0.6", "debug": "^4.3.2", "escape-string-regexp": "^4.0.0", "eslint-scope": "^8.4.0", "eslint-visitor-keys": "^4.2.1", "espree": "^10.4.0", "esquery": "^1.5.0", "esutils": "^2.0.2", "fast-deep-equal": "^3.1.3", "file-entry-cache": "^8.0.0", "find-up": "^5.0.0", "glob-parent": "^6.0.2", "ignore": "^5.2.0", "imurmurhash": "^0.1.4", "is-glob": "^4.0.0", "json-stable-stringify-without-jsonify": "^1.0.1", "lodash.merge": "^4.6.2", "minimatch": "^3.1.2", "natural-compare": "^1.4.0", "optionator": "^0.9.3" }, "peerDependencies": { "jiti": "*" }, "optionalPeers": ["jiti"], "bin": { "eslint": "bin/eslint.js" } }, "sha512-RNCHRX5EwdrESy3Jc9o8ie8Bog+PeYvvSR8sDGoZxNFTvZ4dlxUB3WzQ3bQMztFrSRODGrLLj8g6OFuGY/aiQg=="], + + "eslint-plugin-react-hooks": ["eslint-plugin-react-hooks@5.2.0", "", { "peerDependencies": { "eslint": "^3.0.0 || ^4.0.0 || ^5.0.0 || ^6.0.0 || ^7.0.0 || ^8.0.0-0 || ^9.0.0" } }, "sha512-+f15FfK64YQwZdJNELETdn5ibXEUQmW1DZL6KXhNnc2heoy/sg9VJJeT7n8TlMWouzWqSWavFkIhHyIbIAEapg=="], + + "eslint-plugin-react-refresh": ["eslint-plugin-react-refresh@0.4.20", "", { "peerDependencies": { "eslint": ">=8.40" } }, "sha512-XpbHQ2q5gUF8BGOX4dHe+71qoirYMhApEPZ7sfhF/dNnOF1UXnCMGZf79SFTBO7Bz5YEIT4TMieSlJBWhP9WBA=="], + + "eslint-scope": ["eslint-scope@8.4.0", "", { "dependencies": { "esrecurse": "^4.3.0", "estraverse": "^5.2.0" } }, "sha512-sNXOfKCn74rt8RICKMvJS7XKV/Xk9kA7DyJr8mJik3S7Cwgy3qlkkmyS2uQB3jiJg6VNdZd/pDBJu0nvG2NlTg=="], + + "eslint-visitor-keys": ["eslint-visitor-keys@4.2.1", "", {}, "sha512-Uhdk5sfqcee/9H/rCOJikYz67o0a2Tw2hGRPOG2Y1R2dg7brRe1uG0yaNQDHu+TO/uQPF/5eCapvYSmHUjt7JQ=="], + + "espree": ["espree@10.4.0", "", { "dependencies": { "acorn": "^8.15.0", "acorn-jsx": "^5.3.2", "eslint-visitor-keys": "^4.2.1" } }, "sha512-j6PAQ2uUr79PZhBjP5C5fhl8e39FmRnOjsD5lGnWrFU8i2G776tBK7+nP8KuQUTTyAZUwfQqXAgrVH5MbH9CYQ=="], + + "esquery": ["esquery@1.6.0", "", { "dependencies": { "estraverse": "^5.1.0" } }, "sha512-ca9pw9fomFcKPvFLXhBKUK90ZvGibiGOvRJNbjljY7s7uq/5YO4BOzcYtJqExdx99rF6aAcnRxHmcUHcz6sQsg=="], + + "esrecurse": ["esrecurse@4.3.0", "", { "dependencies": { "estraverse": "^5.2.0" } }, "sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag=="], + + "estraverse": ["estraverse@5.3.0", "", {}, "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA=="], + + "esutils": ["esutils@2.0.3", "", {}, "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g=="], + + "eventemitter3": ["eventemitter3@5.0.1", "", {}, "sha512-GWkBvjiSZK87ELrYOSESUYeVIc9mvLLf/nXalMOS5dYrgZq9o5OVkbZAVM06CVxYsCwH9BDZFPlQTlPA1j4ahA=="], + + "expand-template": ["expand-template@2.0.3", "", {}, "sha512-XYfuKMvj4O35f/pOXLObndIRvyQ+/+6AhODh+OKWj9S9498pHHn/IMszH+gt0fBCRWMNfk1ZSp5x3AifmnI2vg=="], + + "fast-deep-equal": ["fast-deep-equal@3.1.3", "", {}, "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q=="], + + "fast-diff": ["fast-diff@1.3.0", "", {}, "sha512-VxPP4NqbUjj6MaAOafWeUn2cXWLcCtljklUtZf0Ind4XQ+QPtmA0b18zZy0jIQx+ExRVCR/ZQpBmik5lXshNsw=="], + + "fast-glob": ["fast-glob@3.3.3", "", { "dependencies": { "@nodelib/fs.stat": "^2.0.2", "@nodelib/fs.walk": "^1.2.3", "glob-parent": "^5.1.2", "merge2": "^1.3.0", "micromatch": "^4.0.8" } }, "sha512-7MptL8U0cqcFdzIzwOTHoilX9x5BrNqye7Z/LuC7kCMRio1EMSyqRK3BEAUD7sXRq4iT4AzTVuZdhgQ2TCvYLg=="], + + "fast-json-stable-stringify": ["fast-json-stable-stringify@2.1.0", "", {}, "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw=="], + + "fast-levenshtein": ["fast-levenshtein@2.0.6", "", {}, "sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw=="], + + "fastq": ["fastq@1.19.1", "", { "dependencies": { "reusify": "^1.0.4" } }, "sha512-GwLTyxkCXjXbxqIhTsMI2Nui8huMPtnxg7krajPJAjnEG/iiOS7i+zCtWGZR9G0NBKbXKh6X9m9UIsYX/N6vvQ=="], + + "fdir": ["fdir@6.5.0", "", { "peerDependencies": { "picomatch": "^3 || ^4" }, "optionalPeers": ["picomatch"] }, "sha512-tIbYtZbucOs0BRGqPJkshJUYdL+SDH7dVM8gjy+ERp3WAUjLEFJE+02kanyHtwjWOnwrKYBiwAmM0p4kLJAnXg=="], + + "file-entry-cache": ["file-entry-cache@8.0.0", "", { "dependencies": { "flat-cache": "^4.0.0" } }, "sha512-XXTUwCvisa5oacNGRP9SfNtYBNAMi+RPwBFmblZEF7N7swHYQS6/Zfk7SRwx4D5j3CH211YNRco1DEMNVfZCnQ=="], + + "file-selector": ["file-selector@2.1.2", "", { "dependencies": { "tslib": "^2.7.0" } }, "sha512-QgXo+mXTe8ljeqUFaX3QVHc5osSItJ/Km+xpocx0aSqWGMSCf6qYs/VnzZgS864Pjn5iceMRFigeAV7AfTlaig=="], + + "filepond": ["filepond@4.32.8", "", {}, "sha512-svcz5lh4YKrV92zogqpOKzVEOXbD/zT7RAHso5Lqp0GujP+kxF2PSl9Tb6AdYVzfMRtoPsExcphJPpBLoo8eYg=="], + + "filepond-plugin-image-exif-orientation": ["filepond-plugin-image-exif-orientation@1.0.11", "", { "peerDependencies": { "filepond": ">=3.x <5.x" } }, "sha512-hLBc12Fk6Zkj3L8mSAn+elugHOqT5rLUbgVXQQIQjMe0FsGjtpoxqeVR6jt4IWHGat2L9sFAgU2TGmd1mqosCg=="], + + "filepond-plugin-image-preview": ["filepond-plugin-image-preview@4.6.12", "", { "peerDependencies": { "filepond": ">=4.x <5.x" } }, "sha512-Y8ETX5QVV0mbPB0586UH8AUmG9tZg8PuN5bdEAIlZVJFTct5ebViJ7+Am94/VhTPjLqZjBf1zmDq5JU6XRsZKw=="], + + "fill-range": ["fill-range@7.1.1", "", { "dependencies": { "to-regex-range": "^5.0.1" } }, "sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg=="], + + "find-root": ["find-root@1.1.0", "", {}, "sha512-NKfW6bec6GfKc0SGx1e07QZY9PE99u0Bft/0rzSD5k3sO/vwkVUpDUKVm5Gpp5Ue3YfShPFTX2070tDs5kB9Ng=="], + + "find-up": ["find-up@5.0.0", "", { "dependencies": { "locate-path": "^6.0.0", "path-exists": "^4.0.0" } }, "sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng=="], + + "flat-cache": ["flat-cache@4.0.1", "", { "dependencies": { "flatted": "^3.2.9", "keyv": "^4.5.4" } }, "sha512-f7ccFPK3SXFHpx15UIGyRJ/FJQctuKZ0zVuN3frBo4HnK3cay9VEW0R6yPYFHC0AgqhukPzKjq22t5DmAyqGyw=="], + + "flatpickr": ["flatpickr@4.6.13", "", {}, "sha512-97PMG/aywoYpB4IvbvUJi0RQi8vearvU0oov1WW3k0WZPBMrTQVqekSX5CjSG/M4Q3i6A/0FKXC7RyAoAUUSPw=="], + + "flatted": ["flatted@3.3.3", "", {}, "sha512-GX+ysw4PBCz0PzosHDepZGANEuFCMLrnRTiEy9McGjmkCQYwRq4A/X786G/fjM/+OjsWSU1ZrY5qyARZmO/uwg=="], + + "fs-constants": ["fs-constants@1.0.0", "", {}, "sha512-y6OAwoSIf7FyjMIv94u+b5rdheZEjzR63GTyZJm5qh4Bi+2YgwLCcI/fPFZkL5PSixOt6ZNKm+w+Hfp/Bciwow=="], + + "fsevents": ["fsevents@2.3.3", "", { "os": "darwin" }, "sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw=="], + + "function-bind": ["function-bind@1.1.2", "", {}, "sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA=="], + + "functions-have-names": ["functions-have-names@1.2.3", "", {}, "sha512-xckBUXyTIqT97tq2x2AMb+g163b5JFysYk0x4qxNFwbfQkmNZoiRHb6sPzI9/QV33WeuvVYBUIiD4NzNIyqaRQ=="], + + "gensync": ["gensync@1.0.0-beta.2", "", {}, "sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg=="], + + "get-intrinsic": ["get-intrinsic@1.3.0", "", { "dependencies": { "call-bind-apply-helpers": "^1.0.2", "es-define-property": "^1.0.1", "es-errors": "^1.3.0", "es-object-atoms": "^1.1.1", "function-bind": "^1.1.2", "get-proto": "^1.0.1", "gopd": "^1.2.0", "has-symbols": "^1.1.0", "hasown": "^2.0.2", "math-intrinsics": "^1.1.0" } }, "sha512-9fSjSaos/fRIVIp+xSJlE6lfwhES7LNtKaCBIamHsjr2na1BiABJPo0mOjjz8GJDURarmCPGqaiVg5mfjb98CQ=="], + + "get-proto": ["get-proto@1.0.1", "", { "dependencies": { "dunder-proto": "^1.0.1", "es-object-atoms": "^1.0.0" } }, "sha512-sTSfBjoXBp89JvIKIefqw7U2CCebsc74kiY6awiGogKtoSGbgjYE/G/+l9sF3MWFPNc9IcoOC4ODfKHfxFmp0g=="], + + "github-from-package": ["github-from-package@0.0.0", "", {}, "sha512-SyHy3T1v2NUXn29OsWdxmK6RwHD+vkj3v8en8AOBZ1wBQ/hCAQ5bAQTD02kW4W9tUp/3Qh6J8r9EvntiyCmOOw=="], + + "glob-parent": ["glob-parent@6.0.2", "", { "dependencies": { "is-glob": "^4.0.3" } }, "sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A=="], + + "globals": ["globals@16.3.0", "", {}, "sha512-bqWEnJ1Nt3neqx2q5SFfGS8r/ahumIakg3HcwtNlrVlwXIeNumWn/c7Pn/wKzGhf6SaW6H6uWXLqC30STCMchQ=="], + + "gopd": ["gopd@1.2.0", "", {}, "sha512-ZUKRh6/kUFoAiTAtTYPZJ3hw9wNxx+BIBOijnlG9PnrJsCcSjs1wyyD6vJpaYtgnzDrKYRSqf3OO6Rfa93xsRg=="], + + "graphemer": ["graphemer@1.4.0", "", {}, "sha512-EtKwoO6kxCL9WO5xipiHTZlSzBm7WLT627TqC/uVRd0HKmq8NXyebnNYxDoBi7wt8eTWrUrKXCOVaFq9x1kgag=="], + + "has-flag": ["has-flag@4.0.0", "", {}, "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ=="], + + "has-property-descriptors": ["has-property-descriptors@1.0.2", "", { "dependencies": { "es-define-property": "^1.0.0" } }, "sha512-55JNKuIW+vq4Ke1BjOTjM2YctQIvCT7GFzHwmfZPGo5wnrgkid0YQtnAleFSqumZm4az3n2BS+erby5ipJdgrg=="], + + "has-symbols": ["has-symbols@1.1.0", "", {}, "sha512-1cDNdwJ2Jaohmb3sg4OmKaMBwuC48sYni5HUw2DvsC8LjGTLK9h+eb1X6RyuOHe4hT0ULCW68iomhjUoKUqlPQ=="], + + "has-tostringtag": ["has-tostringtag@1.0.2", "", { "dependencies": { "has-symbols": "^1.0.3" } }, "sha512-NqADB8VjPFLM2V0VvHUewwwsw0ZWBaIdgo+ieHtK3hasLz4qeCRjYcqfB6AQrBggRKppKF8L52/VqdVsO47Dlw=="], + + "hasown": ["hasown@2.0.2", "", { "dependencies": { "function-bind": "^1.1.2" } }, "sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ=="], + + "hoist-non-react-statics": ["hoist-non-react-statics@3.3.2", "", { "dependencies": { "react-is": "^16.7.0" } }, "sha512-/gGivxi8JPKWNm/W0jSmzcMPpfpPLc3dY/6GxhX2hQ9iGj3aDfklV4ET7NjKpSinLpJ5vafa9iiGIEZg10SfBw=="], + + "iconv-lite": ["iconv-lite@0.6.3", "", { "dependencies": { "safer-buffer": ">= 2.1.2 < 3.0.0" } }, "sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw=="], + + "ieee754": ["ieee754@1.2.1", "", {}, "sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA=="], + + "ignore": ["ignore@5.3.2", "", {}, "sha512-hsBTNUqQTDwkWtcdYI2i06Y/nUBEsNEDJKjWdigLvegy8kDuJAS8uRlpkkcQpyEXL0Z/pjDy5HBmMjRCJ2gq+g=="], + + "immediate": ["immediate@3.0.6", "", {}, "sha512-XXOFtyqDjNDAQxVfYxuF7g9Il/IbWmmlQg2MYKOH8ExIT1qg6xc4zyS3HaEEATgs1btfzxq15ciUiY7gjSXRGQ=="], + + "immutable": ["immutable@4.3.7", "", {}, "sha512-1hqclzwYwjRDFLjcFxOM5AYkkG0rpFPpr1RLPMEuGczoS7YA8gLhy8SWXYRAA/XwfEHpfo3cw5JGioS32fnMRw=="], + + "import-fresh": ["import-fresh@3.3.1", "", { "dependencies": { "parent-module": "^1.0.0", "resolve-from": "^4.0.0" } }, "sha512-TR3KfrTZTYLPB6jUjfx6MF9WcWrHL9su5TObK4ZkYgBdWKPOFoSoQIdEuTuR82pmtxH2spWG9h6etwfr1pLBqQ=="], + + "imurmurhash": ["imurmurhash@0.1.4", "", {}, "sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA=="], + + "inherits": ["inherits@2.0.4", "", {}, "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ=="], + + "ini": ["ini@1.3.8", "", {}, "sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew=="], + + "invariant": ["invariant@2.2.4", "", { "dependencies": { "loose-envify": "^1.0.0" } }, "sha512-phJfQVBuaJM5raOpJjSfkiD6BpbCE4Ns//LaXl6wGYtUBY83nWS6Rf9tXm2e8VaK60JEjYldbPif/A2B1C2gNA=="], + + "is-arguments": ["is-arguments@1.2.0", "", { "dependencies": { "call-bound": "^1.0.2", "has-tostringtag": "^1.0.2" } }, "sha512-7bVbi0huj/wrIAOzb8U1aszg9kdi3KN/CyU19CTI7tAoZYEZoL9yCDXpbXN+uPsuWnP02cyug1gleqq+TU+YCA=="], + + "is-arrayish": ["is-arrayish@0.2.1", "", {}, "sha512-zz06S8t0ozoDXMG+ube26zeCTNXcKIPJZJi8hBrF4idCLms4CG9QtK7qBl1boi5ODzFpjswb5JPmHCbMpjaYzg=="], + + "is-binary-path": ["is-binary-path@2.1.0", "", { "dependencies": { "binary-extensions": "^2.0.0" } }, "sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw=="], + + "is-core-module": ["is-core-module@2.16.1", "", { "dependencies": { "hasown": "^2.0.2" } }, "sha512-UfoeMA6fIJ8wTYFEUjelnaGI67v6+N7qXJEvQuIGa99l4xsCruSYOVSQ0uPANn4dAzm8lkYPaKLrrijLq7x23w=="], + + "is-date-object": ["is-date-object@1.1.0", "", { "dependencies": { "call-bound": "^1.0.2", "has-tostringtag": "^1.0.2" } }, "sha512-PwwhEakHVKTdRNVOw+/Gyh0+MzlCl4R6qKvkhuvLtPMggI1WAHt9sOwZxQLSGpUaDnrdyDsomoRgNnCfKNSXXg=="], + + "is-extglob": ["is-extglob@2.1.1", "", {}, "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ=="], + + "is-glob": ["is-glob@4.0.3", "", { "dependencies": { "is-extglob": "^2.1.1" } }, "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg=="], + + "is-mobile": ["is-mobile@5.0.0", "", {}, "sha512-Tz/yndySvLAEXh+Uk8liFCxOwVH6YutuR74utvOcu7I9Di+DwM0mtdPVZNaVvvBUM2OXxne/NhOs1zAO7riusQ=="], + + "is-number": ["is-number@7.0.0", "", {}, "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng=="], + + "is-regex": ["is-regex@1.2.1", "", { "dependencies": { "call-bound": "^1.0.2", "gopd": "^1.2.0", "has-tostringtag": "^1.0.2", "hasown": "^2.0.2" } }, "sha512-MjYsKHO5O7mCsmRGxWcLWheFqN9DJ/2TmngvjKXihe6efViPqc274+Fx/4fYj/r03+ESvBdTXK0V6tA3rgez1g=="], + + "isarray": ["isarray@1.0.0", "", {}, "sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ=="], + + "isexe": ["isexe@2.0.0", "", {}, "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw=="], + + "jpeg-exif": ["jpeg-exif@1.1.4", "", {}, "sha512-a+bKEcCjtuW5WTdgeXFzswSrdqi0jk4XlEtZlx5A94wCoBpFjfFTbo/Tra5SpNCl/YFZPvcV1dJc+TAYeg6ROQ=="], + + "jquery": ["jquery@3.7.1", "", {}, "sha512-m4avr8yL8kmFN8psrbFFFmB/If14iN5o9nw/NgnnM+kybDJpRsAynV2BsfpTYrTRysYUdADVD7CkUUizgkpLfg=="], + + "js-tokens": ["js-tokens@4.0.0", "", {}, "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ=="], + + "js-yaml": ["js-yaml@4.1.0", "", { "dependencies": { "argparse": "^2.0.1" }, "bin": { "js-yaml": "bin/js-yaml.js" } }, "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA=="], + + "jsesc": ["jsesc@3.1.0", "", { "bin": { "jsesc": "bin/jsesc" } }, "sha512-/sM3dO2FOzXjKQhJuo0Q173wf2KOo8t4I8vHy6lF9poUp7bKT0/NHE8fPX23PwfhnykfqnC2xRxOnVw5XuGIaA=="], + + "json-buffer": ["json-buffer@3.0.1", "", {}, "sha512-4bV5BfR2mqfQTJm+V5tPPdf+ZpuhiIvTuAB5g8kcrXOZpTT/QwwVRWBywX1ozr6lEuPdbHxwaJlm9G6mI2sfSQ=="], + + "json-parse-even-better-errors": ["json-parse-even-better-errors@2.3.1", "", {}, "sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w=="], + + "json-schema-traverse": ["json-schema-traverse@0.4.1", "", {}, "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg=="], + + "json-stable-stringify-without-jsonify": ["json-stable-stringify-without-jsonify@1.0.1", "", {}, "sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw=="], + + "json5": ["json5@2.2.3", "", { "bin": { "json5": "lib/cli.js" } }, "sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg=="], + + "jsvectormap": ["jsvectormap@1.3.3", "", {}, "sha512-cx0TgSxlFGzoX//4lW5ahP1rGUUiyiYc1p1eGPoF1vGVfEHF3M0+bgith4Fl8s3J1UPYvXpcpOWR9r0He8TpBg=="], + + "jszip": ["jszip@3.10.1", "", { "dependencies": { "lie": "~3.3.0", "pako": "~1.0.2", "readable-stream": "~2.3.6", "setimmediate": "^1.0.5" } }, "sha512-xXDvecyTpGLrqFrvkrUSoxxfJI5AH7U8zxxtVclpsUtMCq4JQ290LY8AW5c7Ggnr/Y/oK+bQMbqK2qmtk3pN4g=="], + + "keyv": ["keyv@4.5.4", "", { "dependencies": { "json-buffer": "3.0.1" } }, "sha512-oxVHkHR/EJf2CNXnWxRLW6mg7JyCCUcG0DtEGmL2ctUo1PNTin1PUil+r/+4r5MpVgC/fn1kjsx7mjSujKqIpw=="], + + "ladda": ["ladda@2.0.3", "", { "dependencies": { "spin.js": "^4.1.1" } }, "sha512-b/m5BP2M2s37GkwEMBJV6mnvLsFUUo1pdn13n6x18bPEFFf+zEl5TmeeqYXmUjgkEEugICe+dTvmciteJ+CGcQ=="], + + "leaflet": ["leaflet@1.9.4", "", {}, "sha512-nxS1ynzJOmOlHp+iL3FyWqK89GtNL8U8rvlMOsQdTTssxZwCXh8N2NB3GDQOL+YR3XnWyZAxwQixURb+FA74PA=="], + + "levn": ["levn@0.4.1", "", { "dependencies": { "prelude-ls": "^1.2.1", "type-check": "~0.4.0" } }, "sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ=="], + + "lie": ["lie@3.3.0", "", { "dependencies": { "immediate": "~3.0.5" } }, "sha512-UaiMJzeWRlEujzAuw5LokY1L5ecNQYZKfmyZ9L7wDHb/p5etKaxXhohBcrw0EYby+G/NA52vRSN4N39dxHAIwQ=="], + + "lines-and-columns": ["lines-and-columns@1.2.4", "", {}, "sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg=="], + + "locate-path": ["locate-path@6.0.0", "", { "dependencies": { "p-locate": "^5.0.0" } }, "sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw=="], + + "lodash": ["lodash@4.17.21", "", {}, "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg=="], + + "lodash-es": ["lodash-es@4.17.21", "", {}, "sha512-mKnC+QJ9pWVzv+C4/U3rRsHapFfHvQFoFB92e52xeyGMcX6/OlIl78je1u8vePzYZSkkogMPJ2yjxxsb89cxyw=="], + + "lodash.clonedeep": ["lodash.clonedeep@4.5.0", "", {}, "sha512-H5ZhCF25riFd9uB5UCkVKo61m3S/xZk1x4wA6yp/L3RFP6Z/eHH1ymQcGLo7J3GMPfm0V/7m1tryHuGVxpqEBQ=="], + + "lodash.debounce": ["lodash.debounce@4.0.8", "", {}, "sha512-FT1yDzDYEoYWhnSGnpE/4Kj1fLZkDFyqRb7fNt6FdYOSxlUWAtp42Eh6Wb0rGIv/m9Bgo7x4GhQbm5Ys4SG5ow=="], + + "lodash.isequal": ["lodash.isequal@4.5.0", "", {}, "sha512-pDo3lu8Jhfjqls6GkMgpahsF9kCyayhgykjyLMNFTKWrpVdAQtYyB4muAMWozBB4ig/dtWAmsMxLEI8wuz+DYQ=="], + + "lodash.merge": ["lodash.merge@4.6.2", "", {}, "sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ=="], + + "loose-envify": ["loose-envify@1.4.0", "", { "dependencies": { "js-tokens": "^3.0.0 || ^4.0.0" }, "bin": { "loose-envify": "cli.js" } }, "sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q=="], + + "lru-cache": ["lru-cache@5.1.1", "", { "dependencies": { "yallist": "^3.0.2" } }, "sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w=="], + + "make-cancellable-promise": ["make-cancellable-promise@1.3.2", "", {}, "sha512-GCXh3bq/WuMbS+Ky4JBPW1hYTOU+znU+Q5m9Pu+pI8EoUqIHk9+tviOKC6/qhHh8C4/As3tzJ69IF32kdz85ww=="], + + "make-event-props": ["make-event-props@1.6.2", "", {}, "sha512-iDwf7mA03WPiR8QxvcVHmVWEPfMY1RZXerDVNCRYW7dUr2ppH3J58Rwb39/WG39yTZdRSxr3x+2v22tvI0VEvA=="], + + "masonic": ["masonic@4.1.0", "", { "dependencies": { "@essentials/memoize-one": "^1.1.0", "@essentials/one-key-map": "^1.2.0", "@essentials/request-timeout": "^1.3.0", "@react-hook/event": "^1.2.6", "@react-hook/latest": "^1.0.3", "@react-hook/passive-layout-effect": "^1.2.1", "@react-hook/throttle": "^2.2.0", "@react-hook/window-scroll": "^1.3.0", "@react-hook/window-size": "^3.1.1", "raf-schd": "^4.0.3", "trie-memoize": "^1.2.0" }, "peerDependencies": { "react": ">=16.8" } }, "sha512-3RNbAG5qLve7qNtGp1UM/u7vI39jO73ZFHDBAg3xl8AVh7A6Ikx7I7mBeC0NY0h1r1jJn2Wqeol1QMa09MQbyQ=="], + + "math-intrinsics": ["math-intrinsics@1.1.0", "", {}, "sha512-/IXtbwEk5HTPyEwyKX6hGkYXxM9nbj64B+ilVJnC/R6B0pH5G4V3b0pVbL7DBj4tkhBAppbQUlf6F6Xl9LHu1g=="], + + "memoize-one": ["memoize-one@6.0.0", "", {}, "sha512-rkpe71W0N0c0Xz6QD0eJETuWAJGnJ9afsl1srmwPrI+yBCkge5EycXXbYRyvL29zZVUWQCY7InPRCv3GDXuZNw=="], + + "merge-refs": ["merge-refs@1.3.0", "", { "peerDependencies": { "@types/react": "^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0" }, "optionalPeers": ["@types/react"] }, "sha512-nqXPXbso+1dcKDpPCXvwZyJILz+vSLqGGOnDrYHQYE+B8n9JTCekVLC65AfCpR4ggVyA/45Y0iR9LDyS2iI+zA=="], + + "merge2": ["merge2@1.4.1", "", {}, "sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg=="], + + "micromatch": ["micromatch@4.0.8", "", { "dependencies": { "braces": "^3.0.3", "picomatch": "^2.3.1" } }, "sha512-PXwfBhYu0hBCPw8Dn0E+WDYb7af3dSLVWKi3HGv84IdF4TyFoC0ysxFd0Goxw7nSv4T/PzEJQxsYsEiFCKo2BA=="], + + "mimic-response": ["mimic-response@3.1.0", "", {}, "sha512-z0yWI+4FDrrweS8Zmt4Ej5HdJmky15+L2e6Wgn3+iK5fWzb6T3fhNFq2+MeTRb064c6Wr4N/wv0DzQTjNzHNGQ=="], + + "minimatch": ["minimatch@3.1.2", "", { "dependencies": { "brace-expansion": "^1.1.7" } }, "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw=="], + + "minimist": ["minimist@1.2.8", "", {}, "sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA=="], + + "mkdirp-classic": ["mkdirp-classic@0.5.3", "", {}, "sha512-gKLcREMhtuZRwRAfqP3RFW+TK4JqApVBtOIftVgjuABpAtpxhPGaDcfvbhNvD0B8iD1oUr/txX35NjcaY6Ns/A=="], + + "moment": ["moment@2.30.1", "", {}, "sha512-uEmtNhbDOrWPFS+hdjFCBfy9f2YoyzRpwcl+DqpC6taX21FzsTLQVbMV/W7PzNSX6x/bhC1zA3c2UQ5NzH6how=="], + + "ms": ["ms@2.1.3", "", {}, "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA=="], + + "nanoid": ["nanoid@3.3.11", "", { "bin": { "nanoid": "bin/nanoid.cjs" } }, "sha512-N8SpfPUnUp1bK+PMYW8qSWdl9U+wwNWI4QKxOYDy9JAro3WMX7p2OeVRF9v+347pnakNevPmiHhNmZ2HbFA76w=="], + + "napi-build-utils": ["napi-build-utils@2.0.0", "", {}, "sha512-GEbrYkbfF7MoNaoh2iGG84Mnf/WZfB0GdGEsM8wz7Expx/LlWf5U8t9nvJKXSp3qr5IsEbK04cBGhol/KwOsWA=="], + + "natural-compare": ["natural-compare@1.4.0", "", {}, "sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw=="], + + "node-abi": ["node-abi@3.75.0", "", { "dependencies": { "semver": "^7.3.5" } }, "sha512-OhYaY5sDsIka7H7AtijtI9jwGYLyl29eQn/W623DiN/MIv5sUqc4g7BIDThX+gb7di9f6xK02nkp8sdfFWZLTg=="], + + "node-addon-api": ["node-addon-api@7.1.1", "", {}, "sha512-5m3bsyrjFWE1xf7nz7YXdN4udnVtXK6/Yfgn5qnahL6bCkf2yKt4k3nuTKAtT4r3IG8JNR2ncsIMdZuAzJjHQQ=="], + + "node-releases": ["node-releases@2.0.19", "", {}, "sha512-xxOWJsBKtzAq7DY0J+DTzuz58K8e7sJbdgwkbMWQe8UYB6ekmsQ45q0M/tJDsGaZmbC+l7n57UV8Hl5tHxO9uw=="], + + "normalize-path": ["normalize-path@3.0.0", "", {}, "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA=="], + + "object-assign": ["object-assign@4.1.1", "", {}, "sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg=="], + + "object-is": ["object-is@1.1.6", "", { "dependencies": { "call-bind": "^1.0.7", "define-properties": "^1.2.1" } }, "sha512-F8cZ+KfGlSGi09lJT7/Nd6KJZ9ygtvYC0/UYYLI9nmQKLMnydpB9yvbv9K1uSkEu7FU9vYPmVwLg328tX+ot3Q=="], + + "object-keys": ["object-keys@1.1.1", "", {}, "sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA=="], + + "once": ["once@1.4.0", "", { "dependencies": { "wrappy": "1" } }, "sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w=="], + + "optionator": ["optionator@0.9.4", "", { "dependencies": { "deep-is": "^0.1.3", "fast-levenshtein": "^2.0.6", "levn": "^0.4.1", "prelude-ls": "^1.2.1", "type-check": "^0.4.0", "word-wrap": "^1.2.5" } }, "sha512-6IpQ7mKUxRcZNLIObR0hz7lxsapSSIYNZJwXPGeF0mTVqGKFIXj1DQcMoT22S3ROcLyY/rz0PWaWZ9ayWmad9g=="], + + "p-limit": ["p-limit@3.1.0", "", { "dependencies": { "yocto-queue": "^0.1.0" } }, "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ=="], + + "p-locate": ["p-locate@5.0.0", "", { "dependencies": { "p-limit": "^3.0.2" } }, "sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw=="], + + "pako": ["pako@1.0.11", "", {}, "sha512-4hLB8Py4zZce5s4yd9XzopqwVv/yGNhV1Bl8NTmCq1763HeK2+EwVTv+leGeL13Dnh2wfbqowVPXCIO0z4taYw=="], + + "parchment": ["parchment@3.0.0", "", {}, "sha512-HUrJFQ/StvgmXRcQ1ftY6VEZUq3jA2t9ncFN4F84J/vN0/FPpQF+8FKXb3l6fLces6q0uOHj6NJn+2xvZnxO6A=="], + + "parent-module": ["parent-module@1.0.1", "", { "dependencies": { "callsites": "^3.0.0" } }, "sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g=="], + + "parse-json": ["parse-json@5.2.0", "", { "dependencies": { "@babel/code-frame": "^7.0.0", "error-ex": "^1.3.1", "json-parse-even-better-errors": "^2.3.0", "lines-and-columns": "^1.1.6" } }, "sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg=="], + + "path-exists": ["path-exists@4.0.0", "", {}, "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w=="], + + "path-key": ["path-key@3.1.1", "", {}, "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q=="], + + "path-parse": ["path-parse@1.0.7", "", {}, "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw=="], + + "path-type": ["path-type@4.0.0", "", {}, "sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw=="], + + "path2d": ["path2d@0.2.2", "", {}, "sha512-+vnG6S4dYcYxZd+CZxzXCNKdELYZSKfohrk98yajCo1PtRoDgCTrrwOvK1GT0UoAdVszagDVllQc0U1vaX4NUQ=="], + + "pdfjs-dist": ["pdfjs-dist@4.8.69", "", { "optionalDependencies": { "canvas": "^3.0.0-rc2", "path2d": "^0.2.1" } }, "sha512-IHZsA4T7YElCKNNXtiLgqScw4zPd3pG9do8UrznC757gMd7UPeHSL2qwNNMJo4r79fl8oj1Xx+1nh2YkzdMpLQ=="], + + "pdfmake": ["pdfmake@0.2.20", "", { "dependencies": { "@foliojs-fork/linebreak": "^1.1.2", "@foliojs-fork/pdfkit": "^0.15.3", "iconv-lite": "^0.6.3", "xmldoc": "^2.0.1" } }, "sha512-bGbxbGFP5p8PWNT3Phsu1ZcRLnRfF6jmnuKTkgmt6i5PZzSdX6JaB+NeTz9q+aocfW8SE9GUjL3o/5GroBqGcQ=="], + + "picocolors": ["picocolors@1.1.1", "", {}, "sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA=="], + + "picomatch": ["picomatch@4.0.3", "", {}, "sha512-5gTmgEY/sqK6gFXLIsQNH19lWb4ebPDLA4SdLP7dsWkIXHWlG66oPuVvXSGFPppYZz8ZDZq0dYYrbHfBCVUb1Q=="], + + "png-js": ["png-js@1.0.0", "", {}, "sha512-k+YsbhpA9e+EFfKjTCH3VW6aoKlyNYI6NYdTfDL4CIvFnvsuO84ttonmZE7rc+v23SLTH8XX+5w/Ak9v0xGY4g=="], + + "postcss": ["postcss@8.5.6", "", { "dependencies": { "nanoid": "^3.3.11", "picocolors": "^1.1.1", "source-map-js": "^1.2.1" } }, "sha512-3Ybi1tAuwAP9s0r1UQ2J4n5Y0G05bJkpUIO0/bI9MhwmD70S5aTWbXGBwxHrelT+XM1k6dM0pk+SwNkpTRN7Pg=="], + + "preact": ["preact@10.12.1", "", {}, "sha512-l8386ixSsBdbreOAkqtrwqHwdvR35ID8c3rKPa8lCWuO86dBi32QWHV4vfsZK1utLLFMvw+Z5Ad4XLkZzchscg=="], + + "prebuild-install": ["prebuild-install@7.1.3", "", { "dependencies": { "detect-libc": "^2.0.0", "expand-template": "^2.0.3", "github-from-package": "0.0.0", "minimist": "^1.2.3", "mkdirp-classic": "^0.5.3", "napi-build-utils": "^2.0.0", "node-abi": "^3.3.0", "pump": "^3.0.0", "rc": "^1.2.7", "simple-get": "^4.0.0", "tar-fs": "^2.0.0", "tunnel-agent": "^0.6.0" }, "bin": { "prebuild-install": "bin.js" } }, "sha512-8Mf2cbV7x1cXPUILADGI3wuhfqWvtiLA1iclTDbFRZkgRQS0NqsPZphna9V+HyTEadheuPmjaJMsbzKQFOzLug=="], + + "prelude-ls": ["prelude-ls@1.2.1", "", {}, "sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g=="], + + "process-nextick-args": ["process-nextick-args@2.0.1", "", {}, "sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag=="], + + "prop-types": ["prop-types@15.8.1", "", { "dependencies": { "loose-envify": "^1.4.0", "object-assign": "^4.1.1", "react-is": "^16.13.1" } }, "sha512-oj87CgZICdulUohogVAR7AjlC0327U4el4L6eAvOqCeudMDVU0NThNaV+b9Df4dXgSP1gXMTnPdhfe/2qDH5cg=="], + + "prop-types-extra": ["prop-types-extra@1.1.1", "", { "dependencies": { "react-is": "^16.3.2", "warning": "^4.0.0" }, "peerDependencies": { "react": ">=0.14.0" } }, "sha512-59+AHNnHYCdiC+vMwY52WmvP5dM3QLeoumYuEyceQDi9aEhtwN9zIQ2ZNo25sMyXnbh32h+P1ezDsUpUH3JAew=="], + + "property-expr": ["property-expr@2.0.6", "", {}, "sha512-SVtmxhRE/CGkn3eZY1T6pC8Nln6Fr/lu1mKSgRud0eC73whjGfoAogbn78LkD8aFL0zz3bAFerKSnOl7NlErBA=="], + + "pump": ["pump@3.0.3", "", { "dependencies": { "end-of-stream": "^1.1.0", "once": "^1.3.1" } }, "sha512-todwxLMY7/heScKmntwQG8CXVkWUOdYxIvY2s0VWAAMh/nd8SoYiRaKjlr7+iCs984f2P8zvrfWcDDYVb73NfA=="], + + "punycode": ["punycode@2.3.1", "", {}, "sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg=="], + + "queue-microtask": ["queue-microtask@1.2.3", "", {}, "sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A=="], + + "quill": ["quill@2.0.3", "", { "dependencies": { "eventemitter3": "^5.0.1", "lodash-es": "^4.17.21", "parchment": "^3.0.0", "quill-delta": "^5.1.0" } }, "sha512-xEYQBqfYx/sfb33VJiKnSJp8ehloavImQ2A6564GAbqG55PGw1dAWUn1MUbQB62t0azawUS2CZZhWCjO8gRvTw=="], + + "quill-delta": ["quill-delta@5.1.0", "", { "dependencies": { "fast-diff": "^1.3.0", "lodash.clonedeep": "^4.5.0", "lodash.isequal": "^4.5.0" } }, "sha512-X74oCeRI4/p0ucjb5Ma8adTXd9Scumz367kkMK5V/IatcX6A0vlgLgKbzXWy5nZmCGeNJm2oQX0d2Eqj+ZIlCA=="], + + "raf-schd": ["raf-schd@4.0.3", "", {}, "sha512-tQkJl2GRWh83ui2DiPTJz9wEiMN20syf+5oKfB03yYP7ioZcJwsIK8FjrtLwH1m7C7e+Tt2yYBlrOpdT+dyeIQ=="], + + "rc": ["rc@1.2.8", "", { "dependencies": { "deep-extend": "^0.6.0", "ini": "~1.3.0", "minimist": "^1.2.0", "strip-json-comments": "~2.0.1" }, "bin": { "rc": "./cli.js" } }, "sha512-y3bGgqKj3QBdxLbLkomlohkvsA8gdAiUQlSBJnBhfn+BPxg4bc62d8TcBW15wavDfgexCgccckhcZvywyQYPOw=="], + + "rc-util": ["rc-util@5.44.4", "", { "dependencies": { "@babel/runtime": "^7.18.3", "react-is": "^18.2.0" }, "peerDependencies": { "react": ">=16.9.0", "react-dom": ">=16.9.0" } }, "sha512-resueRJzmHG9Q6rI/DfK6Kdv9/Lfls05vzMs1Sk3M2P+3cJa+MakaZyWY8IPfehVuhPJFKrIY1IK4GqbiaiY5w=="], + + "react": ["react@19.1.1", "", {}, "sha512-w8nqGImo45dmMIfljjMwOGtbmC/mk4CMYhWIicdSflH91J9TyCyczcPFXJzrZ/ZXcgGRFeP6BU0BEJTw6tZdfQ=="], + + "react-apexcharts": ["react-apexcharts@1.7.0", "", { "dependencies": { "prop-types": "^15.8.1" }, "peerDependencies": { "apexcharts": ">=4.0.0", "react": ">=0.13" } }, "sha512-03oScKJyNLRf0Oe+ihJxFZliBQM9vW3UWwomVn4YVRTN1jsIR58dLWt0v1sb8RwJVHDMbeHiKQueM0KGpn7nOA=="], + + "react-arborist": ["react-arborist@3.4.3", "", { "dependencies": { "react-dnd": "^14.0.3", "react-dnd-html5-backend": "^14.0.3", "react-window": "^1.8.11", "redux": "^5.0.0", "use-sync-external-store": "^1.2.0" }, "peerDependencies": { "react": ">= 16.14", "react-dom": ">= 16.14" } }, "sha512-yFnq1nIQhT2uJY4TZVz2tgAiBb9lxSyvF4vC3S8POCK8xLzjGIxVv3/4dmYquQJ7AHxaZZArRGHiHKsEewKdTQ=="], + + "react-bootstrap": ["react-bootstrap@2.10.10", "", { "dependencies": { "@babel/runtime": "^7.24.7", "@restart/hooks": "^0.4.9", "@restart/ui": "^1.9.4", "@types/prop-types": "^15.7.12", "@types/react-transition-group": "^4.4.6", "classnames": "^2.3.2", "dom-helpers": "^5.2.1", "invariant": "^2.2.4", "prop-types": "^15.8.1", "prop-types-extra": "^1.1.0", "react-transition-group": "^4.4.5", "uncontrollable": "^7.2.1", "warning": "^4.0.3" }, "peerDependencies": { "@types/react": ">=16.14.8", "react": ">=16.14.0", "react-dom": ">=16.14.0" }, "optionalPeers": ["@types/react"] }, "sha512-gMckKUqn8aK/vCnfwoBpBVFUGT9SVQxwsYrp9yDHt0arXMamxALerliKBxr1TPbntirK/HGrUAHYbAeQTa9GHQ=="], + + "react-bootstrap-typeahead": ["react-bootstrap-typeahead@6.4.1", "", { "dependencies": { "@babel/runtime": "^7.14.6", "@floating-ui/react-dom": "^2.1.2", "@restart/hooks": "^0.4.0", "@restart/ui": "^1.9.4", "classnames": "^2.2.0", "fast-deep-equal": "^3.1.1", "invariant": "^2.2.1", "lodash.debounce": "^4.0.8", "prop-types": "^15.5.8", "scroll-into-view-if-needed": "^3.1.0", "warning": "^4.0.1" }, "peerDependencies": { "react": ">=16.8.0", "react-dom": ">=16.8.0" } }, "sha512-Uw3vB4H5WGmnOHdQvqVKkOyzzxZ5NUrsd/HKhGnbta5+bEI99xyghr9Y0tVLcMoQZ9Wxpe4g/LJl75L/FsHq/A=="], + + "react-chartjs-2": ["react-chartjs-2@5.3.0", "", { "peerDependencies": { "chart.js": "^4.1.1", "react": "^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0" } }, "sha512-UfZZFnDsERI3c3CZGxzvNJd02SHjaSJ8kgW1djn65H1KK8rehwTjyrRKOG3VTMG8wtHZ5rgAO5oTHtHi9GCCmw=="], + + "react-colorful": ["react-colorful@5.6.1", "", { "peerDependencies": { "react": ">=16.8.0", "react-dom": ">=16.8.0" } }, "sha512-1exovf0uGTGyq5mXQT0zgQ80uvj2PCwvF8zY1RN9/vbJVSjSo3fsB/4L3ObbF7u70NduSiK4xu4Y6q1MHoUGEw=="], + + "react-countup": ["react-countup@6.5.3", "", { "dependencies": { "countup.js": "^2.8.0" }, "peerDependencies": { "react": ">= 16.3.0" } }, "sha512-udnqVQitxC7QWADSPDOxVWULkLvKUWrDapn5i53HE4DPRVgs+Y5rr4bo25qEl8jSh+0l2cToJgGMx+clxPM3+w=="], + + "react-datepicker": ["react-datepicker@8.7.0", "", { "dependencies": { "@floating-ui/react": "^0.27.15", "clsx": "^2.1.1", "date-fns": "^4.1.0" }, "peerDependencies": { "react": "^16.9.0 || ^17 || ^18 || ^19 || ^19.0.0-rc", "react-dom": "^16.9.0 || ^17 || ^18 || ^19 || ^19.0.0-rc" } }, "sha512-r5OJbiLWc3YiVNy69Kau07/aVgVGsFVMA6+nlqCV7vyQ8q0FUOnJ+wAI4CgVxHejG3i5djAEiebrF8/Eip4rIw=="], + + "react-day-picker": ["react-day-picker@9.9.0", "", { "dependencies": { "@date-fns/tz": "^1.4.1", "date-fns": "^4.1.0", "date-fns-jalali": "^4.1.0-0" }, "peerDependencies": { "react": ">=16.8.0" } }, "sha512-NtkJbuX6cl/VaGNb3sVVhmMA6LSMnL5G3xNL+61IyoZj0mUZFWTg4hmj7PHjIQ8MXN9dHWhUHFoJWG6y60DKSg=="], + + "react-dnd": ["react-dnd@14.0.5", "", { "dependencies": { "@react-dnd/invariant": "^2.0.0", "@react-dnd/shallowequal": "^2.0.0", "dnd-core": "14.0.1", "fast-deep-equal": "^3.1.3", "hoist-non-react-statics": "^3.3.2" }, "peerDependencies": { "@types/hoist-non-react-statics": ">= 3.3.1", "@types/node": ">= 12", "@types/react": ">= 16", "react": ">= 16.14" }, "optionalPeers": ["@types/hoist-non-react-statics", "@types/node", "@types/react"] }, "sha512-9i1jSgbyVw0ELlEVt/NkCUkxy1hmhJOkePoCH713u75vzHGyXhPDm28oLfc2NMSBjZRM1Y+wRjHXJT3sPrTy+A=="], + + "react-dnd-html5-backend": ["react-dnd-html5-backend@14.1.0", "", { "dependencies": { "dnd-core": "14.0.1" } }, "sha512-6ONeqEC3XKVf4eVmMTe0oPds+c5B9Foyj8p/ZKLb7kL2qh9COYxiBHv3szd6gztqi/efkmriywLUVlPotqoJyw=="], + + "react-dom": ["react-dom@19.1.1", "", { "dependencies": { "scheduler": "^0.26.0" }, "peerDependencies": { "react": "^19.1.1" } }, "sha512-Dlq/5LAZgF0Gaz6yiqZCf6VCcZs1ghAJyrsu84Q/GT0gV+mCxbfmKNoGRKBYMJ8IEdGPqu49YWXD02GCknEDkw=="], + + "react-dropzone": ["react-dropzone@14.3.8", "", { "dependencies": { "attr-accept": "^2.2.4", "file-selector": "^2.1.0", "prop-types": "^15.8.1" }, "peerDependencies": { "react": ">= 16.8 || 18.0.0" } }, "sha512-sBgODnq+lcA4P296DY4wacOZz3JFpD99fp+hb//iBO2HHnyeZU3FwWyXJ6salNpqQdsZrgMrotuko/BdJMV8Ug=="], + + "react-filepond": ["react-filepond@7.1.3", "", { "peerDependencies": { "filepond": ">=3.7.x < 5.x", "react": "16 - 19", "react-dom": "16 - 19" } }, "sha512-uQOCZt+YXnBfYn6OxK6vsgSoUROkBu/ZahcfIJnK94c1ZeSAS84L/XKDADq/8Adx/Lz88VtVWvUpTXnNpmjHFQ=="], + + "react-flatpickr": ["react-flatpickr@4.0.11", "", { "dependencies": { "flatpickr": "^4.6.13" }, "peerDependencies": { "react": ">= 16 <= 19" } }, "sha512-S0TAu8eUeJgN8lZ0Efi41WGPM/tPPUvrveXQ8CAUO60+7TTrF5Ehyv8fvPVagKCqJahY7hXYERM7XfH2hSAWdg=="], + + "react-hook-form": ["react-hook-form@7.62.0", "", { "peerDependencies": { "react": "^16.8.0 || ^17 || ^18 || ^19" } }, "sha512-7KWFejc98xqG/F4bAxpL41NB3o1nnvQO1RWZT3TqRZYL8RryQETGfEdVnJN2fy1crCiBLLjkRBVK05j24FxJGA=="], + + "react-icons": ["react-icons@5.5.0", "", { "peerDependencies": { "react": "*" } }, "sha512-MEFcXdkP3dLo8uumGI5xN3lDFNsRtrjbOEKDLD7yv76v4wpnEq2Lt2qeHaQOr34I/wPN3s3+N08WkQ+CW37Xiw=="], + + "react-is": ["react-is@18.3.1", "", {}, "sha512-/LLMVyas0ljjAtoYiPqYiL8VWXzUUdThrmU5+n20DZv+a+ClRoevUzw5JxU+Ieh5/c87ytoTBV9G1FiKfNJdmg=="], + + "react-leaflet": ["react-leaflet@5.0.0", "", { "dependencies": { "@react-leaflet/core": "^3.0.0" }, "peerDependencies": { "leaflet": "^1.9.0", "react": "^19.0.0", "react-dom": "^19.0.0" } }, "sha512-CWbTpr5vcHw5bt9i4zSlPEVQdTVcML390TjeDG0cK59z1ylexpqC6M1PJFjV8jD7CF+ACBFsLIDs6DRMoLEofw=="], + + "react-lifecycles-compat": ["react-lifecycles-compat@3.0.4", "", {}, "sha512-fBASbA6LnOU9dOU2eW7aQ8xmYBSXUIWr+UmF9b1efZBazGNO+rcXT/icdKnYm2pTwcRylVUYwW7H1PHfLekVzA=="], + + "react-number-format": ["react-number-format@5.4.4", "", { "peerDependencies": { "react": "^0.14 || ^15.0.0 || ^16.0.0 || ^17.0.0 || ^18.0.0 || ^19.0.0", "react-dom": "^0.14 || ^15.0.0 || ^16.0.0 || ^17.0.0 || ^18.0.0 || ^19.0.0" } }, "sha512-wOmoNZoOpvMminhifQYiYSTCLUDOiUbBunrMrMjA+dV52sY+vck1S4UhR6PkgnoCquvvMSeJjErXZ4qSaWCliA=="], + + "react-password-checklist": ["react-password-checklist@1.8.1", "", { "peerDependencies": { "react": ">16.0.0-alpha || >17.0.0-alpha || >18.0.0-alpha" } }, "sha512-QHIU/OejxoH4/cIfYLHaHLb+yYc8mtL0Vr4HTmULxQg3ZNdI9Ni/yYf7pwLBgsUh4sseKCV/GzzYHWpHqejTGw=="], + + "react-pdf": ["react-pdf@9.2.1", "", { "dependencies": { "clsx": "^2.0.0", "dequal": "^2.0.3", "make-cancellable-promise": "^1.3.1", "make-event-props": "^1.6.0", "merge-refs": "^1.3.0", "pdfjs-dist": "4.8.69", "tiny-invariant": "^1.0.0", "warning": "^4.0.0" }, "peerDependencies": { "@types/react": "^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0", "react": "^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0", "react-dom": "^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0" }, "optionalPeers": ["@types/react"] }, "sha512-AJt0lAIkItWEZRA5d/mO+Om4nPCuTiQ0saA+qItO967DTjmGjnhmF+Bi2tL286mOTfBlF5CyLzJ35KTMaDoH+A=="], + + "react-quill-new": ["react-quill-new@3.6.0", "", { "dependencies": { "lodash-es": "^4.17.21", "quill": "~2.0.2" }, "peerDependencies": { "quill-delta": "^5.1.0", "react": "^16 || ^17 || ^18 || ^19", "react-dom": "^16 || ^17 || ^18 || ^19" } }, "sha512-weU6YfB2+7Cujw5Hjgmi0aN/qJd3B6ADWrxgUJMp2MO3tEvKX5kfB0sg3P0UdOVfU0z8icsKFzlnEIpeW1mLhw=="], + + "react-range": ["react-range@1.10.0", "", { "peerDependencies": { "react": "*", "react-dom": "*" } }, "sha512-kDo0LiBUHIQIP8menx0UoxTnHr7UXBYpIYl/DR9jCaO1o29VwvCLpkP/qOTNQz5hkJadPg1uEM07XJcJ1XGoKw=="], + + "react-redux": ["react-redux@9.2.0", "", { "dependencies": { "@types/use-sync-external-store": "^0.0.6", "use-sync-external-store": "^1.4.0" }, "peerDependencies": { "@types/react": "^18.2.25 || ^19", "react": "^18.0 || ^19", "redux": "^5.0.0" }, "optionalPeers": ["@types/react", "redux"] }, "sha512-ROY9fvHhwOD9ySfrF0wmvu//bKCQ6AeZZq1nJNtbDC+kk5DuSuNX/n6YWYF/SYy7bSba4D4FSz8DJeKY/S/r+g=="], + + "react-refresh": ["react-refresh@0.17.0", "", {}, "sha512-z6F7K9bV85EfseRCp2bzrpyQ0Gkw1uLoCel9XBVWPg/TjRj94SkJzUTGfOa4bs7iJvBWtQG0Wq7wnI0syw3EBQ=="], + + "react-router": ["react-router@7.8.2", "", { "dependencies": { "cookie": "^1.0.1", "set-cookie-parser": "^2.6.0" }, "peerDependencies": { "react": ">=18", "react-dom": ">=18" }, "optionalPeers": ["react-dom"] }, "sha512-7M2fR1JbIZ/jFWqelpvSZx+7vd7UlBTfdZqf6OSdF9g6+sfdqJDAWcak6ervbHph200ePlu+7G8LdoiC3ReyAQ=="], + + "react-select": ["react-select@5.10.2", "", { "dependencies": { "@babel/runtime": "^7.12.0", "@emotion/cache": "^11.4.0", "@emotion/react": "^11.8.1", "@floating-ui/dom": "^1.0.1", "@types/react-transition-group": "^4.4.0", "memoize-one": "^6.0.0", "prop-types": "^15.6.0", "react-transition-group": "^4.3.0", "use-isomorphic-layout-effect": "^1.2.0" }, "peerDependencies": { "react": "^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0", "react-dom": "^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0" } }, "sha512-Z33nHdEFWq9tfnfVXaiM12rbJmk+QjFEztWLtmXqQhz6Al4UZZ9xc0wiatmGtUOCCnHN0WizL3tCMYRENX4rVQ=="], + + "react-sortablejs": ["react-sortablejs@6.1.4", "", { "dependencies": { "classnames": "2.3.1", "tiny-invariant": "1.2.0" }, "peerDependencies": { "@types/sortablejs": "1", "react": ">=16.9.0", "react-dom": ">=16.9.0", "sortablejs": "1" } }, "sha512-fc7cBosfhnbh53Mbm6a45W+F735jwZ1UFIYSrIqcO/gRIFoDyZeMtgKlpV4DdyQfbCzdh5LoALLTDRxhMpTyXQ=="], + + "react-transition-group": ["react-transition-group@4.4.5", "", { "dependencies": { "@babel/runtime": "^7.5.5", "dom-helpers": "^5.0.1", "loose-envify": "^1.4.0", "prop-types": "^15.6.2" }, "peerDependencies": { "react": ">=16.6.0", "react-dom": ">=16.6.0" } }, "sha512-pZcd1MCJoiKiBR2NRxeCRg13uCXbydPnmB4EOeRrY7480qNWO8IIgQG6zlDkm6uRMsURXPuKq0GWtiM59a5Q6g=="], + + "react-use-wizard": ["react-use-wizard@2.3.0", "", { "peerDependencies": { "react": ">=16.8.0", "react-dom": ">=16.8.0" } }, "sha512-z06pQNZ18FvoK+ZDW50hOf0uOySo0Hhd7H4y0MLyk/tBCwpUKGBeULosORBVhipUaWihNLpLJxwH5f+85Qt5XA=="], + + "react-window": ["react-window@1.8.11", "", { "dependencies": { "@babel/runtime": "^7.0.0", "memoize-one": ">=3.1.1 <6" }, "peerDependencies": { "react": "^15.0.0 || ^16.0.0 || ^17.0.0 || ^18.0.0 || ^19.0.0", "react-dom": "^15.0.0 || ^16.0.0 || ^17.0.0 || ^18.0.0 || ^19.0.0" } }, "sha512-+SRbUVT2scadgFSWx+R1P754xHPEqvcfSfVX10QYg6POOz+WNgkN48pS+BtZNIMGiL1HYrSEiCkwsMS15QogEQ=="], + + "readable-stream": ["readable-stream@2.3.8", "", { "dependencies": { "core-util-is": "~1.0.0", "inherits": "~2.0.3", "isarray": "~1.0.0", "process-nextick-args": "~2.0.0", "safe-buffer": "~5.1.1", "string_decoder": "~1.1.1", "util-deprecate": "~1.0.1" } }, "sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA=="], + + "readdirp": ["readdirp@3.6.0", "", { "dependencies": { "picomatch": "^2.2.1" } }, "sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA=="], + + "redux": ["redux@5.0.1", "", {}, "sha512-M9/ELqF6fy8FwmkpnF0S3YKOqMyoWJ4+CS5Efg2ct3oY9daQvd/Pc71FpGZsVsbl3Cpb+IIcjBDUnnyBdQbq4w=="], + + "regexp.prototype.flags": ["regexp.prototype.flags@1.5.4", "", { "dependencies": { "call-bind": "^1.0.8", "define-properties": "^1.2.1", "es-errors": "^1.3.0", "get-proto": "^1.0.1", "gopd": "^1.2.0", "set-function-name": "^2.0.2" } }, "sha512-dYqgNSZbDwkaJ2ceRd9ojCGjBq+mOm9LmtXnAnEGyHhN/5R7iDW2TRw3h+o/jCFxus3P2LfWIIiwowAjANm7IA=="], + + "resolve": ["resolve@1.22.10", "", { "dependencies": { "is-core-module": "^2.16.0", "path-parse": "^1.0.7", "supports-preserve-symlinks-flag": "^1.0.0" }, "bin": { "resolve": "bin/resolve" } }, "sha512-NPRy+/ncIMeDlTAsuqwKIiferiawhefFJtkNSW0qZJEqMEb+qBt/77B/jGeeek+F0uOeN05CDa6HXbbIgtVX4w=="], + + "resolve-from": ["resolve-from@4.0.0", "", {}, "sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g=="], + + "reusify": ["reusify@1.1.0", "", {}, "sha512-g6QUff04oZpHs0eG5p83rFLhHeV00ug/Yf9nZM6fLeUrPguBTkTQOdpAWWspMh55TZfVQDPaN3NQJfbVRAxdIw=="], + + "rollup": ["rollup@4.48.1", "", { "dependencies": { "@types/estree": "1.0.8" }, "optionalDependencies": { "@rollup/rollup-android-arm-eabi": "4.48.1", "@rollup/rollup-android-arm64": "4.48.1", "@rollup/rollup-darwin-arm64": "4.48.1", "@rollup/rollup-darwin-x64": "4.48.1", "@rollup/rollup-freebsd-arm64": "4.48.1", "@rollup/rollup-freebsd-x64": "4.48.1", "@rollup/rollup-linux-arm-gnueabihf": "4.48.1", "@rollup/rollup-linux-arm-musleabihf": "4.48.1", "@rollup/rollup-linux-arm64-gnu": "4.48.1", "@rollup/rollup-linux-arm64-musl": "4.48.1", "@rollup/rollup-linux-loongarch64-gnu": "4.48.1", "@rollup/rollup-linux-ppc64-gnu": "4.48.1", "@rollup/rollup-linux-riscv64-gnu": "4.48.1", "@rollup/rollup-linux-riscv64-musl": "4.48.1", "@rollup/rollup-linux-s390x-gnu": "4.48.1", "@rollup/rollup-linux-x64-gnu": "4.48.1", "@rollup/rollup-linux-x64-musl": "4.48.1", "@rollup/rollup-win32-arm64-msvc": "4.48.1", "@rollup/rollup-win32-ia32-msvc": "4.48.1", "@rollup/rollup-win32-x64-msvc": "4.48.1", "fsevents": "~2.3.2" }, "bin": { "rollup": "dist/bin/rollup" } }, "sha512-jVG20NvbhTYDkGAty2/Yh7HK6/q3DGSRH4o8ALKGArmMuaauM9kLfoMZ+WliPwA5+JHr2lTn3g557FxBV87ifg=="], + + "run-parallel": ["run-parallel@1.2.0", "", { "dependencies": { "queue-microtask": "^1.2.2" } }, "sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA=="], + + "safe-buffer": ["safe-buffer@5.1.2", "", {}, "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g=="], + + "safer-buffer": ["safer-buffer@2.1.2", "", {}, "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg=="], + + "sass": ["sass@1.77.6", "", { "dependencies": { "chokidar": ">=3.0.0 <4.0.0", "immutable": "^4.0.0", "source-map-js": ">=0.6.2 <2.0.0" }, "bin": { "sass": "sass.js" } }, "sha512-ByXE1oLD79GVq9Ht1PeHWCPMPB8XHpBuz1r85oByKHjZY6qV6rWnQovQzXJXuQ/XyE1Oj3iPk3lo28uzaRA2/Q=="], + + "sax": ["sax@1.4.1", "", {}, "sha512-+aWOz7yVScEGoKNd4PA10LZ8sk0A/z5+nXQG5giUO5rprX9jgYsTdov9qCchZiPIZezbZH+jRut8nPodFAX4Jg=="], + + "scheduler": ["scheduler@0.26.0", "", {}, "sha512-NlHwttCI/l5gCPR3D1nNXtWABUmBwvZpEQiD4IXSbIDq8BzLIK/7Ir5gTFSGZDUu37K5cMNp0hFtzO38sC7gWA=="], + + "scroll-into-view-if-needed": ["scroll-into-view-if-needed@3.1.0", "", { "dependencies": { "compute-scroll-into-view": "^3.0.2" } }, "sha512-49oNpRjWRvnU8NyGVmUaYG4jtTkNonFZI86MmGRDqBphEK2EXT9gdEUoQPZhuBM8yWHxCWbobltqYO5M4XrUvQ=="], + + "semver": ["semver@6.3.1", "", { "bin": { "semver": "bin/semver.js" } }, "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA=="], + + "set-cookie-parser": ["set-cookie-parser@2.7.1", "", {}, "sha512-IOc8uWeOZgnb3ptbCURJWNjWUPcO3ZnTTdzsurqERrP6nPyv+paC55vJM0LpOlT2ne+Ix+9+CRG1MNLlyZ4GjQ=="], + + "set-function-length": ["set-function-length@1.2.2", "", { "dependencies": { "define-data-property": "^1.1.4", "es-errors": "^1.3.0", "function-bind": "^1.1.2", "get-intrinsic": "^1.2.4", "gopd": "^1.0.1", "has-property-descriptors": "^1.0.2" } }, "sha512-pgRc4hJ4/sNjWCSS9AmnS40x3bNMDTknHgL5UaMBTMyJnU90EgWh1Rz+MC9eFu4BuN/UwZjKQuY/1v3rM7HMfg=="], + + "set-function-name": ["set-function-name@2.0.2", "", { "dependencies": { "define-data-property": "^1.1.4", "es-errors": "^1.3.0", "functions-have-names": "^1.2.3", "has-property-descriptors": "^1.0.2" } }, "sha512-7PGFlmtwsEADb0WYyvCMa1t+yke6daIG4Wirafur5kcf+MhUnPms1UeR0CKQdTZD81yESwMHbtn+TR+dMviakQ=="], + + "setimmediate": ["setimmediate@1.0.5", "", {}, "sha512-MATJdZp8sLqDl/68LfQmbP8zKPLQNV6BIZoIgrscFDQ+RsvK/BxeDQOgyxKKoh0y/8h3BqVFnCqQ/gd+reiIXA=="], + + "shebang-command": ["shebang-command@2.0.0", "", { "dependencies": { "shebang-regex": "^3.0.0" } }, "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA=="], + + "shebang-regex": ["shebang-regex@3.0.0", "", {}, "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A=="], + + "simple-concat": ["simple-concat@1.0.1", "", {}, "sha512-cSFtAPtRhljv69IK0hTVZQ+OfE9nePi/rtJmw5UjHeVyVroEqJXP1sFztKUy1qU+xvz3u/sfYJLa947b7nAN2Q=="], + + "simple-get": ["simple-get@4.0.1", "", { "dependencies": { "decompress-response": "^6.0.0", "once": "^1.3.1", "simple-concat": "^1.0.0" } }, "sha512-brv7p5WgH0jmQJr1ZDDfKDOSeWWg+OVypG99A/5vYGPqJ6pxiaHLy8nxtFjBA7oMa01ebA9gfh1uMCFqOuXxvA=="], + + "simplebar-core": ["simplebar-core@1.3.2", "", { "dependencies": { "lodash": "^4.17.21", "lodash-es": "^4.17.21" } }, "sha512-qKgTTuTqapjsFGkNhCjyPhysnbZGpQqNmjk0nOYjFN5ordC/Wjvg+RbYCyMSnW60l/Z0ZS82GbNltly6PMUH1w=="], + + "simplebar-react": ["simplebar-react@3.3.0", "", { "dependencies": { "simplebar-core": "^1.3.0" }, "peerDependencies": { "react": ">=16.8.0" } }, "sha512-sxzy+xRuU41He4tT4QLGYutchtOuye/xxVeq7xhyOiwMiHNK1ZpvbOTyy+7P0i7gfpXLGTJ8Bep8+4Mhdgtz/g=="], + + "sortablejs": ["sortablejs@1.15.6", "", {}, "sha512-aNfiuwMEpfBM/CN6LY0ibyhxPfPbyFeBTYJKCvzkJ2GkUpazIt3H+QIPAMHwqQ7tMKaHz1Qj+rJJCqljnf4p3A=="], + + "source-map": ["source-map@0.5.7", "", {}, "sha512-LbrmJOMUSdEVxIKvdcJzQC+nQhe8FUZQTXQy6+I75skNgn3OoQ0DZA8YnFa7gp8tqtL3KPf1kmo0R5DoApeSGQ=="], + + "source-map-js": ["source-map-js@1.2.1", "", {}, "sha512-UXWMKhLOwVKb728IUtQPXxfYU+usdybtUrK/8uGE8CQMvrhOpwvzDBwj0QhSL7MQc7vIsISBG8VQ8+IDQxpfQA=="], + + "spin.js": ["spin.js@4.1.2", "", {}, "sha512-ua/yEpxEwyEUWs57tMQYdik/KJ12sQRyMXjSlK/Ai927aEUDVY3FXUi4ml4VvlLCTQNIjC6tHyjSLBrJzFAqMA=="], + + "string_decoder": ["string_decoder@1.1.1", "", { "dependencies": { "safe-buffer": "~5.1.0" } }, "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg=="], + + "strip-json-comments": ["strip-json-comments@3.1.1", "", {}, "sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig=="], + + "stylis": ["stylis@4.2.0", "", {}, "sha512-Orov6g6BB1sDfYgzWfTHDOxamtX1bE/zo104Dh9e6fqJ3PooipYyfJ0pUmrZO2wAvO8YbEyeFrkV91XTsGMSrw=="], + + "supports-color": ["supports-color@7.2.0", "", { "dependencies": { "has-flag": "^4.0.0" } }, "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw=="], + + "supports-preserve-symlinks-flag": ["supports-preserve-symlinks-flag@1.0.0", "", {}, "sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w=="], + + "sweetalert2": ["sweetalert2@11.22.4", "", {}, "sha512-JwcRODfozxiKmspFp+xctZ2izAmLAKbRPcoLMEW7LdugN/YmNrX1LT7hdBW87qsgupEO1ukBBuB17KzKFKW0tg=="], + + "sweetalert2-react-content": ["sweetalert2-react-content@5.1.0", "", { "peerDependencies": { "react": "^18.0.0 || ^19.0.0", "react-dom": "^18.0.0 || ^19.0.0", "sweetalert2": "^11.0.0" } }, "sha512-SBh41SdyHDY9NzwrIG6LACbClCMxIlEFP86tGVr/B4zGD4H2gGXB8o7UAJRc/RtBd/iQL9hIvuCAkrk0AgKEMA=="], + + "tabbable": ["tabbable@6.2.0", "", {}, "sha512-Cat63mxsVJlzYvN51JmVXIgNoUokrIaT2zLclCXjRd8boZ0004U4KCs/sToJ75C6sdlByWxpYnb5Boif1VSFew=="], + + "tar-fs": ["tar-fs@2.1.3", "", { "dependencies": { "chownr": "^1.1.1", "mkdirp-classic": "^0.5.2", "pump": "^3.0.0", "tar-stream": "^2.1.4" } }, "sha512-090nwYJDmlhwFwEW3QQl+vaNnxsO2yVsd45eTKRBzSzu+hlb1w2K9inVq5b0ngXuLVqQ4ApvsUHHnu/zQNkWAg=="], + + "tar-stream": ["tar-stream@2.2.0", "", { "dependencies": { "bl": "^4.0.3", "end-of-stream": "^1.4.1", "fs-constants": "^1.0.0", "inherits": "^2.0.3", "readable-stream": "^3.1.1" } }, "sha512-ujeqbceABgwMZxEJnk2HDY2DlnUZ+9oEcb1KzTVfYHio0UE6dG71n60d8D2I4qNvleWrrXpmjpt7vZeF1LnMZQ=="], + + "tiny-case": ["tiny-case@1.0.3", "", {}, "sha512-Eet/eeMhkO6TX8mnUteS9zgPbUMQa4I6Kkp5ORiBD5476/m+PIRiumP5tmh5ioJpH7k51Kehawy2UDfsnxxY8Q=="], + + "tiny-inflate": ["tiny-inflate@1.0.3", "", {}, "sha512-pkY1fj1cKHb2seWDy0B16HeWyczlJA9/WW3u3c4z/NiWDsO3DOU5D7nhTLE9CF0yXv/QZFY7sEJmj24dK+Rrqw=="], + + "tiny-invariant": ["tiny-invariant@1.3.3", "", {}, "sha512-+FbBPE1o9QAYvviau/qC5SE3caw21q3xkvWKBtja5vgqOWIHHJ3ioaq1VPfn/Szqctz2bU/oYeKd9/z5BL+PVg=="], + + "tinyglobby": ["tinyglobby@0.2.14", "", { "dependencies": { "fdir": "^6.4.4", "picomatch": "^4.0.2" } }, "sha512-tX5e7OM1HnYr2+a2C/4V0htOcSQcoSTH9KgJnVvNm5zm/cyEWKJ7j7YutsH9CxMdtOkkLFy2AHrMci9IM8IPZQ=="], + + "to-regex-range": ["to-regex-range@5.0.1", "", { "dependencies": { "is-number": "^7.0.0" } }, "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ=="], + + "toposort": ["toposort@2.0.2", "", {}, "sha512-0a5EOkAUp8D4moMi2W8ZF8jcga7BgZd91O/yabJCFY8az+XSzeGyTKs0Aoo897iV1Nj6guFq8orWDS96z91oGg=="], + + "trie-memoize": ["trie-memoize@1.2.0", "", {}, "sha512-hEDLVEP1FCgaRtt0oZDJdz2lK9uK7WlB7ASswt9U9cqruSNueVigtRGxI97hevKlViqhAcRgNgzuY/m8FCCMcg=="], + + "ts-api-utils": ["ts-api-utils@2.1.0", "", { "peerDependencies": { "typescript": ">=4.8.4" } }, "sha512-CUgTZL1irw8u29bzrOD/nH85jqyc74D6SshFgujOIA7osm2Rz7dYH77agkx7H4FBNxDq7Cjf+IjaX/8zwFW+ZQ=="], + + "tslib": ["tslib@2.8.1", "", {}, "sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w=="], + + "tunnel-agent": ["tunnel-agent@0.6.0", "", { "dependencies": { "safe-buffer": "^5.0.1" } }, "sha512-McnNiV1l8RYeY8tBgEpuodCC1mLUdbSN+CYBL7kJsJNInOP8UjDDEwdk6Mw60vdLLrr5NHKZhMAOSrR2NZuQ+w=="], + + "type-check": ["type-check@0.4.0", "", { "dependencies": { "prelude-ls": "^1.2.1" } }, "sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew=="], + + "type-fest": ["type-fest@2.19.0", "", {}, "sha512-RAH822pAdBgcNMAfWnCBU3CFZcfZ/i1eZjwFU/dsLKumyuuP3niueg2UAukXYF0E2AAoc82ZSSf9J0WQBinzHA=="], + + "typescript": ["typescript@5.8.3", "", { "bin": { "tsc": "bin/tsc", "tsserver": "bin/tsserver" } }, "sha512-p1diW6TqL9L07nNxvRMM7hMMw4c5XOo/1ibL4aAIGmSAt9slTE1Xgw5KWuof2uTOvCg9BY7ZRi+GaF+7sfgPeQ=="], + + "typescript-eslint": ["typescript-eslint@8.40.0", "", { "dependencies": { "@typescript-eslint/eslint-plugin": "8.40.0", "@typescript-eslint/parser": "8.40.0", "@typescript-eslint/typescript-estree": "8.40.0", "@typescript-eslint/utils": "8.40.0" }, "peerDependencies": { "eslint": "^8.57.0 || ^9.0.0", "typescript": ">=4.8.4 <6.0.0" } }, "sha512-Xvd2l+ZmFDPEt4oj1QEXzA4A2uUK6opvKu3eGN9aGjB8au02lIVcLyi375w94hHyejTOmzIU77L8ol2sRg9n7Q=="], + + "uncontrollable": ["uncontrollable@7.2.1", "", { "dependencies": { "@babel/runtime": "^7.6.3", "@types/react": ">=16.9.11", "invariant": "^2.2.4", "react-lifecycles-compat": "^3.0.4" }, "peerDependencies": { "react": ">=15.0.0" } }, "sha512-svtcfoTADIB0nT9nltgjujTi7BzVmwjZClOmskKu/E8FW9BXzg9os8OLr4f8Dlnk0rYWJIWr4wv9eKUXiQvQwQ=="], + + "undici-types": ["undici-types@7.10.0", "", {}, "sha512-t5Fy/nfn+14LuOc2KNYg75vZqClpAiqscVvMygNnlsHBFpSXdJaYtXMcdNLpl/Qvc3P2cB3s6lOV51nqsFq4ag=="], + + "unicode-properties": ["unicode-properties@1.4.1", "", { "dependencies": { "base64-js": "^1.3.0", "unicode-trie": "^2.0.0" } }, "sha512-CLjCCLQ6UuMxWnbIylkisbRj31qxHPAurvena/0iwSVbQ2G1VY5/HjV0IRabOEbDHlzZlRdCrD4NhB0JtU40Pg=="], + + "unicode-trie": ["unicode-trie@2.0.0", "", { "dependencies": { "pako": "^0.2.5", "tiny-inflate": "^1.0.0" } }, "sha512-x7bc76x0bm4prf1VLg79uhAzKw8DVboClSN5VxJuQ+LKDOVEW9CdH+VY7SP+vX7xCYQqzzgQpFqz15zeLvAtZQ=="], + + "update-browserslist-db": ["update-browserslist-db@1.1.3", "", { "dependencies": { "escalade": "^3.2.0", "picocolors": "^1.1.1" }, "peerDependencies": { "browserslist": ">= 4.21.0" }, "bin": { "update-browserslist-db": "cli.js" } }, "sha512-UxhIZQ+QInVdunkDAaiazvvT/+fXL5Osr0JZlJulepYu6Jd7qJtDZjlur0emRlT71EN3ScPoE7gvsuIKKNavKw=="], + + "uri-js": ["uri-js@4.4.1", "", { "dependencies": { "punycode": "^2.1.0" } }, "sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg=="], + + "use-isomorphic-layout-effect": ["use-isomorphic-layout-effect@1.2.1", "", { "peerDependencies": { "react": "^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0" } }, "sha512-tpZZ+EX0gaghDAiFR37hj5MgY6ZN55kLiPkJsKxBMZ6GZdOSPJXiOzPM984oPYZ5AnehYx5WQp1+ME8I/P/pRA=="], + + "use-sync-external-store": ["use-sync-external-store@1.5.0", "", { "peerDependencies": { "react": "^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0" } }, "sha512-Rb46I4cGGVBmjamjphe8L/UnvJD+uPPtTkNvX5mZgqdbavhI4EbgIWJiIHXJ8bc/i9EQGPRh4DwEURJ552Do0A=="], + + "usehooks-ts": ["usehooks-ts@3.1.1", "", { "dependencies": { "lodash.debounce": "^4.0.8" }, "peerDependencies": { "react": "^16.8.0 || ^17 || ^18 || ^19 || ^19.0.0-rc" } }, "sha512-I4diPp9Cq6ieSUH2wu+fDAVQO43xwtulo+fKEidHUwZPnYImbtkTjzIJYcDcJqxgmX31GVqNFURodvcgHcW0pA=="], + + "util-deprecate": ["util-deprecate@1.0.2", "", {}, "sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw=="], + + "vite": ["vite@7.1.3", "", { "dependencies": { "esbuild": "^0.25.0", "fdir": "^6.5.0", "picomatch": "^4.0.3", "postcss": "^8.5.6", "rollup": "^4.43.0", "tinyglobby": "^0.2.14" }, "optionalDependencies": { "fsevents": "~2.3.3" }, "peerDependencies": { "@types/node": "^20.19.0 || >=22.12.0", "jiti": ">=1.21.0", "less": "^4.0.0", "lightningcss": "^1.21.0", "sass": "^1.70.0", "sass-embedded": "^1.70.0", "stylus": ">=0.54.8", "sugarss": "^5.0.0", "terser": "^5.16.0", "tsx": "^4.8.1", "yaml": "^2.4.2" }, "optionalPeers": ["@types/node", "jiti", "less", "lightningcss", "sass", "sass-embedded", "stylus", "sugarss", "terser", "tsx", "yaml"], "bin": { "vite": "bin/vite.js" } }, "sha512-OOUi5zjkDxYrKhTV3V7iKsoS37VUM7v40+HuwEmcrsf11Cdx9y3DIr2Px6liIcZFwt3XSRpQvFpL3WVy7ApkGw=="], + + "warning": ["warning@4.0.3", "", { "dependencies": { "loose-envify": "^1.0.0" } }, "sha512-rpJyN222KWIvHJ/F53XSZv0Zl/accqHR8et1kpaMTD/fLCRxtV8iX8czMzY7sVZupTI3zcUTg8eycS2kNF9l6w=="], + + "which": ["which@2.0.2", "", { "dependencies": { "isexe": "^2.0.0" }, "bin": { "node-which": "./bin/node-which" } }, "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA=="], + + "word-wrap": ["word-wrap@1.2.5", "", {}, "sha512-BN22B5eaMMI9UMtjrGd5g5eCYPpCPDUy0FJXbYsaT5zYxjFOckS53SQDE3pWkVoWpHXVb3BrYcEN4Twa55B5cA=="], + + "wrappy": ["wrappy@1.0.2", "", {}, "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ=="], + + "xmldoc": ["xmldoc@2.0.2", "", { "dependencies": { "sax": "^1.2.4" } }, "sha512-UiRwoSStEXS3R+YE8OqYv3jebza8cBBAI2y8g3B15XFkn3SbEOyyLnmPHjLBPZANrPJKEzxxB7A3XwcLikQVlQ=="], + + "yallist": ["yallist@3.1.1", "", {}, "sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g=="], + + "yaml": ["yaml@1.10.2", "", {}, "sha512-r3vXyErRCYJ7wg28yvBY5VSoAF8ZvlcW9/BwUzEtUsjvX/DKs24dIkuwjtuprwJJHsbyUbLApepYTR1BN4uHrg=="], + + "yocto-queue": ["yocto-queue@0.1.0", "", {}, "sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q=="], + + "yup": ["yup@1.7.0", "", { "dependencies": { "property-expr": "^2.0.5", "tiny-case": "^1.0.3", "toposort": "^2.0.2", "type-fest": "^2.19.0" } }, "sha512-VJce62dBd+JQvoc+fCVq+KZfPHr+hXaxCcVgotfwWvlR0Ja3ffYKaJBT8rptPOSKOGJDCUnW2C2JWpud7aRP6Q=="], + + "zod": ["zod@3.25.76", "", {}, "sha512-gzUt/qt81nXsFGKIFcC3YnfEAx5NkunCfnDlvuBSSFS02bcXu4Lmea0AFIUwbLWxWPx3d9p8S5QoaujKcNQxcQ=="], + + "@emotion/babel-plugin/convert-source-map": ["convert-source-map@1.9.0", "", {}, "sha512-ASFBup0Mz1uyiIjANan1jzLQami9z1PoYSZCiiYW2FczPbenXc45FZdBZLzOT+r6+iciuEModtmCti+hjaAk0A=="], + + "@eslint-community/eslint-utils/eslint-visitor-keys": ["eslint-visitor-keys@3.4.3", "", {}, "sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag=="], + + "@eslint/eslintrc/globals": ["globals@14.0.0", "", {}, "sha512-oahGvuMGQlPw/ivIYBjVSrWAfWLBeku5tpPE2fOPLi+WHffIWbuh2tCjhyQhTBPMf5E9jDEH4FOmTYgYwbKwtQ=="], + + "@humanfs/node/@humanwhocodes/retry": ["@humanwhocodes/retry@0.3.1", "", {}, "sha512-JBxkERygn7Bv/GbN5Rv8Ul6LVknS+5Bp6RgDC/O8gEBU/yeH5Ui5C/OlWrTb6qct7LjjfT6Re2NxB0ln0yYybA=="], + + "@restart/ui/@restart/hooks": ["@restart/hooks@0.5.1", "", { "dependencies": { "dequal": "^2.0.3" }, "peerDependencies": { "react": ">=16.8.0" } }, "sha512-EMoH04NHS1pbn07iLTjIjgttuqb7qu4+/EyhAx27MHpoENcB2ZdSsLTNxmKD+WEPnZigo62Qc8zjGnNxoSE/5Q=="], + + "@restart/ui/uncontrollable": ["uncontrollable@8.0.4", "", { "peerDependencies": { "react": ">=16.14.0" } }, "sha512-ulRWYWHvscPFc0QQXvyJjY6LIXU56f0h8pQFvhxiKk5V1fcI8gp9Ht9leVAhrVjzqMw0BgjspBINx9r6oyJUvQ=="], + + "@typescript-eslint/eslint-plugin/ignore": ["ignore@7.0.5", "", {}, "sha512-Hs59xBNfUIunMFgWAbGX5cq6893IbWg4KnrjbYwX3tx0ztorVgTDA6B2sxf8ejHJ4wz8BqGUMYlnzNBer5NvGg=="], + + "@typescript-eslint/typescript-estree/minimatch": ["minimatch@9.0.5", "", { "dependencies": { "brace-expansion": "^2.0.1" } }, "sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow=="], + + "@typescript-eslint/typescript-estree/semver": ["semver@7.7.2", "", { "bin": { "semver": "bin/semver.js" } }, "sha512-RF0Fw+rO5AMf9MAyaRXI4AV0Ulj5lMHqVxxdSgiVbixSCXoEmmX/jk0CuJw4+3SqroYO9VoUh+HcuJivvtJemA=="], + + "anymatch/picomatch": ["picomatch@2.3.1", "", {}, "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA=="], + + "bl/readable-stream": ["readable-stream@3.6.2", "", { "dependencies": { "inherits": "^2.0.3", "string_decoder": "^1.1.1", "util-deprecate": "^1.0.1" } }, "sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA=="], + + "chokidar/glob-parent": ["glob-parent@5.1.2", "", { "dependencies": { "is-glob": "^4.0.1" } }, "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow=="], + + "dnd-core/redux": ["redux@4.2.1", "", { "dependencies": { "@babel/runtime": "^7.9.2" } }, "sha512-LAUYz4lc+Do8/g7aeRa8JkyDErK6ekstQaqWQrNRW//MY1TvCEpMtpTWvlQ+FPbWCx+Xixu/6SHt5N0HR+SB4w=="], + + "fast-glob/glob-parent": ["glob-parent@5.1.2", "", { "dependencies": { "is-glob": "^4.0.1" } }, "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow=="], + + "hoist-non-react-statics/react-is": ["react-is@16.13.1", "", {}, "sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ=="], + + "micromatch/picomatch": ["picomatch@2.3.1", "", {}, "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA=="], + + "node-abi/semver": ["semver@7.7.2", "", { "bin": { "semver": "bin/semver.js" } }, "sha512-RF0Fw+rO5AMf9MAyaRXI4AV0Ulj5lMHqVxxdSgiVbixSCXoEmmX/jk0CuJw4+3SqroYO9VoUh+HcuJivvtJemA=="], + + "prop-types/react-is": ["react-is@16.13.1", "", {}, "sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ=="], + + "prop-types-extra/react-is": ["react-is@16.13.1", "", {}, "sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ=="], + + "rc/strip-json-comments": ["strip-json-comments@2.0.1", "", {}, "sha512-4gB8na07fecVVkOI6Rs4e7T6NOTki5EmL7TUduTs6bu3EdnSycntVJ4re8kgZA+wx9IueI2Y11bfbgwtzuE0KQ=="], + + "react-sortablejs/classnames": ["classnames@2.3.1", "", {}, "sha512-OlQdbZ7gLfGarSqxesMesDa5uz7KFbID8Kpq/SxIoNGDqY8lSYs0D+hhtBXhcdB3rcbXArFr7vlHheLk1voeNA=="], + + "react-sortablejs/tiny-invariant": ["tiny-invariant@1.2.0", "", {}, "sha512-1Uhn/aqw5C6RI4KejVeTg6mIS7IqxnLJ8Mv2tV5rTc0qWobay7pDUz6Wi392Cnc8ak1H0F2cjoRzb2/AW4+Fvg=="], + + "react-window/memoize-one": ["memoize-one@5.2.1", "", {}, "sha512-zYiwtZUcYyXKo/np96AGZAckk+FWWsUdJ3cHGGmld7+AhvcWmQyGCYUh1hc4Q/pkOhb65dQR/pqCyK0cOaHz4Q=="], + + "readdirp/picomatch": ["picomatch@2.3.1", "", {}, "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA=="], + + "tar-stream/readable-stream": ["readable-stream@3.6.2", "", { "dependencies": { "inherits": "^2.0.3", "string_decoder": "^1.1.1", "util-deprecate": "^1.0.1" } }, "sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA=="], + + "unicode-trie/pako": ["pako@0.2.9", "", {}, "sha512-NUcwaKxUxWrZLpDG+z/xZaCgQITkA/Dv4V/T6bw7VON6l1Xz/VnrBqrYjZQ12TamKHzITTfOEIYUj48y2KXImA=="], + + "@typescript-eslint/typescript-estree/minimatch/brace-expansion": ["brace-expansion@2.0.2", "", { "dependencies": { "balanced-match": "^1.0.0" } }, "sha512-Jt0vHyM+jmUBqojB7E1NIYadt0vI0Qxjxd2TErW94wDz+E2LAm5vKMXXwg6ZZBTHPuUlDgQHKXvjGBdfcF1ZDQ=="], + } +} diff --git a/eslint.config.js b/eslint.config.js new file mode 100644 index 0000000..7c634ab --- /dev/null +++ b/eslint.config.js @@ -0,0 +1,35 @@ +import js from '@eslint/js' +import globals from 'globals' +import reactHooks from 'eslint-plugin-react-hooks' +import reactRefresh from 'eslint-plugin-react-refresh' +import tseslint from 'typescript-eslint' +import { globalIgnores } from 'eslint/config' + +export default tseslint.config([ + globalIgnores(['dist']), + { + files: ['**/*.{ts,tsx}'], + extends: [ + js.configs.recommended, + tseslint.configs.recommended, + reactHooks.configs['recommended-latest'], + reactRefresh.configs.vite, + ], + languageOptions: { + ecmaVersion: 2020, + globals: globals.browser, + }, + plugins: { + 'react-hooks': reactHooks, + 'react-refresh': reactRefresh, + }, + rules: { + ...reactHooks.configs.recommended.rules, + '@typescript-eslint/no-explicit-any': 'off', + '@typescript-eslint/no-unused-vars': 'off', + 'react/no-unescaped-entities': 'off', + 'react-hooks/exhaustive-deps': 'off', + 'react-refresh/only-export-components': 'off', + }, + }, +]) diff --git a/index.html b/index.html new file mode 100644 index 0000000..6389105 --- /dev/null +++ b/index.html @@ -0,0 +1,13 @@ + + + + + + + Rapport + + +
+ + + diff --git a/package-lock.json b/package-lock.json new file mode 100644 index 0000000..f142ce3 --- /dev/null +++ b/package-lock.json @@ -0,0 +1,7259 @@ +{ + "name": "rapport-web", + "version": "0.0.0", + "lockfileVersion": 3, + "requires": true, + "packages": { + "": { + "name": "rapport-web", + "version": "0.0.0", + "dependencies": { + "@dnd-kit/core": "^6.3.1", + "@dnd-kit/modifiers": "^9.0.0", + "@dnd-kit/sortable": "^10.0.0", + "@fullcalendar/core": "^6.1.17", + "@fullcalendar/daygrid": "^6.1.17", + "@fullcalendar/interaction": "^6.1.17", + "@fullcalendar/list": "^6.1.17", + "@fullcalendar/react": "^6.1.17", + "@fullcalendar/timegrid": "^6.1.17", + "@hello-pangea/dnd": "^18.0.1", + "@hookform/resolvers": "^5.1.1", + "@rc-component/tour": "^2.1.6", + "@tanstack/react-table": "^8.21.3", + "apexcharts": "^4.7.0", + "apextree": "^1.3.0", + "axios": "^1.11.0", + "bootstrap": "^5.3.7", + "chart.js": "^4.5.0", + "clsx": "^2.1.1", + "datatables.net-bs5": "^2.3.1", + "datatables.net-buttons": "^3.2.3", + "datatables.net-buttons-bs5": "^3.2.3", + "datatables.net-fixedheader": "^4.0.2", + "datatables.net-fixedheader-bs5": "^4.0.2", + "datatables.net-react": "^1.0.1", + "datatables.net-responsive": "^3.0.4", + "datatables.net-responsive-bs5": "^3.0.4", + "datatables.net-select": "^3.0.1", + "datatables.net-select-bs5": "^3.0.1", + "date-fns": "^4.1.0", + "dayjs": "^1.11.13", + "filepond": "^4.32.8", + "filepond-plugin-image-exif-orientation": "^1.0.11", + "filepond-plugin-image-preview": "^4.6.12", + "flatpickr": "^4.6.13", + "html2canvas": "^1.4.1", + "jquery": "^3.7.1", + "jsvectormap": "1.3.3", + "jszip": "^3.10.1", + "ladda": "^2.0.3", + "leaflet": "^1.9.4", + "lodash": "^4.17.21", + "masonic": "^4.1.0", + "moment": "^2.30.1", + "pdfmake": "^0.2.20", + "quill": "^2.0.3", + "rc-util": "^5.44.4", + "react": "^19.1.1", + "react-apexcharts": "^1.7.0", + "react-arborist": "^3.4.3", + "react-bootstrap": "^2.10.10", + "react-bootstrap-typeahead": "^6.4.1", + "react-chartjs-2": "^5.3.0", + "react-colorful": "^5.6.1", + "react-countup": "^6.5.3", + "react-datepicker": "^8.4.0", + "react-day-picker": "^9.7.0", + "react-dom": "^19.1.1", + "react-dropzone": "^14.3.8", + "react-filepond": "^7.1.3", + "react-flatpickr": "^4.0.10", + "react-hook-form": "^7.57.0", + "react-icons": "^5.5.0", + "react-leaflet": "^5.0.0-rc.2", + "react-number-format": "^5.4.4", + "react-password-checklist": "^1.8.1", + "react-pdf": "^9.2.1", + "react-quill-new": "^3.4.6", + "react-range": "^1.10.0", + "react-router": "^7.8.2", + "react-select": "^5.10.1", + "react-sortablejs": "^6.1.4", + "react-use-wizard": "^2.3.0", + "simplebar-react": "3.3.0", + "sortablejs": "^1.15.6", + "sweetalert2": "^11.22.0", + "sweetalert2-react-content": "^5.1.0", + "usehooks-ts": "^3.1.1", + "yup": "^1.6.1", + "zod": "^3.25.63" + }, + "devDependencies": { + "@eslint/js": "^9.33.0", + "@types/leaflet": "^1.9.18", + "@types/lodash": "^4.17.17", + "@types/node": "^24.3.0", + "@types/react": "^19.1.10", + "@types/react-dom": "^19.1.7", + "@types/sortablejs": "^1.15.8", + "@vitejs/plugin-react": "^5.0.0", + "eslint": "^9.33.0", + "eslint-plugin-react-hooks": "^5.2.0", + "eslint-plugin-react-refresh": "^0.4.20", + "globals": "^16.3.0", + "sass": "1.77.6", + "typescript": "~5.8.3", + "typescript-eslint": "^8.39.1", + "vite": "^7.1.2" + } + }, + "node_modules/@ampproject/remapping": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/@ampproject/remapping/-/remapping-2.3.0.tgz", + "integrity": "sha512-30iZtAPgz+LTIYoeivqYo853f02jBYSd5uGnGpkFV0M3xOt9aN73erkgYAmZU43x4VfqcnLxW9Kpg3R5LC4YYw==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "@jridgewell/gen-mapping": "^0.3.5", + "@jridgewell/trace-mapping": "^0.3.24" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@babel/code-frame": { + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.27.1.tgz", + "integrity": "sha512-cjQ7ZlQ0Mv3b47hABuTevyTuYN4i+loJKGeV9flcCgIK37cCXRh+L1bd3iBHlynerhQ7BhCkn2BPbQUL+rGqFg==", + "license": "MIT", + "dependencies": { + "@babel/helper-validator-identifier": "^7.27.1", + "js-tokens": "^4.0.0", + "picocolors": "^1.1.1" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/compat-data": { + "version": "7.28.0", + "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.28.0.tgz", + "integrity": "sha512-60X7qkglvrap8mn1lh2ebxXdZYtUcpd7gsmy9kLaBJ4i/WdY8PqTSdxyA8qraikqKQK5C1KRBKXqznrVapyNaw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/core": { + "version": "7.28.3", + "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.28.3.tgz", + "integrity": "sha512-yDBHV9kQNcr2/sUr9jghVyz9C3Y5G2zUM2H2lo+9mKv4sFgbA8s8Z9t8D1jiTkGoO/NoIfKMyKWr4s6CN23ZwQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@ampproject/remapping": "^2.2.0", + "@babel/code-frame": "^7.27.1", + "@babel/generator": "^7.28.3", + "@babel/helper-compilation-targets": "^7.27.2", + "@babel/helper-module-transforms": "^7.28.3", + "@babel/helpers": "^7.28.3", + "@babel/parser": "^7.28.3", + "@babel/template": "^7.27.2", + "@babel/traverse": "^7.28.3", + "@babel/types": "^7.28.2", + "convert-source-map": "^2.0.0", + "debug": "^4.1.0", + "gensync": "^1.0.0-beta.2", + "json5": "^2.2.3", + "semver": "^6.3.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/babel" + } + }, + "node_modules/@babel/generator": { + "version": "7.28.3", + "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.28.3.tgz", + "integrity": "sha512-3lSpxGgvnmZznmBkCRnVREPUFJv2wrv9iAoFDvADJc0ypmdOxdUtcLeBgBJ6zE0PMeTKnxeQzyk0xTBq4Ep7zw==", + "license": "MIT", + "dependencies": { + "@babel/parser": "^7.28.3", + "@babel/types": "^7.28.2", + "@jridgewell/gen-mapping": "^0.3.12", + "@jridgewell/trace-mapping": "^0.3.28", + "jsesc": "^3.0.2" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-compilation-targets": { + "version": "7.27.2", + "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.27.2.tgz", + "integrity": "sha512-2+1thGUUWWjLTYTHZWK1n8Yga0ijBz1XAhUXcKy81rd5g6yh7hGqMp45v7cadSbEHc9G3OTv45SyneRN3ps4DQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/compat-data": "^7.27.2", + "@babel/helper-validator-option": "^7.27.1", + "browserslist": "^4.24.0", + "lru-cache": "^5.1.1", + "semver": "^6.3.1" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-globals": { + "version": "7.28.0", + "resolved": "https://registry.npmjs.org/@babel/helper-globals/-/helper-globals-7.28.0.tgz", + "integrity": "sha512-+W6cISkXFa1jXsDEdYA8HeevQT/FULhxzR99pxphltZcVaugps53THCeiWA8SguxxpSp3gKPiuYfSWopkLQ4hw==", + "license": "MIT", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-module-imports": { + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.27.1.tgz", + "integrity": "sha512-0gSFWUPNXNopqtIPQvlD5WgXYI5GY2kP2cCvoT8kczjbfcfuIljTbcWrulD1CIPIX2gt1wghbDy08yE1p+/r3w==", + "license": "MIT", + "dependencies": { + "@babel/traverse": "^7.27.1", + "@babel/types": "^7.27.1" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-module-transforms": { + "version": "7.28.3", + "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.28.3.tgz", + "integrity": "sha512-gytXUbs8k2sXS9PnQptz5o0QnpLL51SwASIORY6XaBKF88nsOT0Zw9szLqlSGQDP/4TljBAD5y98p2U1fqkdsw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-module-imports": "^7.27.1", + "@babel/helper-validator-identifier": "^7.27.1", + "@babel/traverse": "^7.28.3" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, + "node_modules/@babel/helper-plugin-utils": { + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.27.1.tgz", + "integrity": "sha512-1gn1Up5YXka3YYAHGKpbideQ5Yjf1tDa9qYcgysz+cNCXukyLl6DjPXhD3VRwSb8c0J9tA4b2+rHEZtc6R0tlw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-string-parser": { + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.27.1.tgz", + "integrity": "sha512-qMlSxKbpRlAridDExk92nSobyDdpPijUq2DW6oDnUqd0iOGxmQjyqhMIihI9+zv4LPyZdRje2cavWPbCbWm3eA==", + "license": "MIT", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-validator-identifier": { + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.27.1.tgz", + "integrity": "sha512-D2hP9eA+Sqx1kBZgzxZh0y1trbuU+JoDkiEwqhQ36nodYqJwyEIhPSdMNd7lOm/4io72luTPWH20Yda0xOuUow==", + "license": "MIT", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-validator-option": { + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.27.1.tgz", + "integrity": "sha512-YvjJow9FxbhFFKDSuFnVCe2WxXk1zWc22fFePVNEaWJEu8IrZVlda6N0uHwzZrUM1il7NC9Mlp4MaJYbYd9JSg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helpers": { + "version": "7.28.3", + "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.28.3.tgz", + "integrity": "sha512-PTNtvUQihsAsDHMOP5pfobP8C6CM4JWXmP8DrEIt46c3r2bf87Ua1zoqevsMo9g+tWDwgWrFP5EIxuBx5RudAw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/template": "^7.27.2", + "@babel/types": "^7.28.2" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/parser": { + "version": "7.28.3", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.28.3.tgz", + "integrity": "sha512-7+Ey1mAgYqFAx2h0RuoxcQT5+MlG3GTV0TQrgr7/ZliKsm/MNDxVVutlWaziMq7wJNAz8MTqz55XLpWvva6StA==", + "license": "MIT", + "dependencies": { + "@babel/types": "^7.28.2" + }, + "bin": { + "parser": "bin/babel-parser.js" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@babel/plugin-transform-react-jsx-self": { + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-jsx-self/-/plugin-transform-react-jsx-self-7.27.1.tgz", + "integrity": "sha512-6UzkCs+ejGdZ5mFFC/OCUrv028ab2fp1znZmCZjAOBKiBK2jXD1O+BPSfX8X2qjJ75fZBMSnQn3Rq2mrBJK2mw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.27.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-react-jsx-source": { + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-jsx-source/-/plugin-transform-react-jsx-source-7.27.1.tgz", + "integrity": "sha512-zbwoTsBruTeKB9hSq73ha66iFeJHuaFkUbwvqElnygoNbj/jHRsSeokowZFN3CZ64IvEqcmmkVe89OPXc7ldAw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.27.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/runtime": { + "version": "7.28.3", + "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.28.3.tgz", + "integrity": "sha512-9uIQ10o0WGdpP6GDhXcdOJPJuDgFtIDtN/9+ArJQ2NAfAmiuhTQdzkaTGR33v43GYS2UrSA0eX2pPPHoFVvpxA==", + "license": "MIT", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/template": { + "version": "7.27.2", + "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.27.2.tgz", + "integrity": "sha512-LPDZ85aEJyYSd18/DkjNh4/y1ntkE5KwUHWTiqgRxruuZL2F1yuHligVHLvcHY2vMHXttKFpJn6LwfI7cw7ODw==", + "license": "MIT", + "dependencies": { + "@babel/code-frame": "^7.27.1", + "@babel/parser": "^7.27.2", + "@babel/types": "^7.27.1" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/traverse": { + "version": "7.28.3", + "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.28.3.tgz", + "integrity": "sha512-7w4kZYHneL3A6NP2nxzHvT3HCZ7puDZZjFMqDpBPECub79sTtSO5CGXDkKrTQq8ksAwfD/XI2MRFX23njdDaIQ==", + "license": "MIT", + "dependencies": { + "@babel/code-frame": "^7.27.1", + "@babel/generator": "^7.28.3", + "@babel/helper-globals": "^7.28.0", + "@babel/parser": "^7.28.3", + "@babel/template": "^7.27.2", + "@babel/types": "^7.28.2", + "debug": "^4.3.1" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/types": { + "version": "7.28.2", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.28.2.tgz", + "integrity": "sha512-ruv7Ae4J5dUYULmeXw1gmb7rYRz57OWCPM57pHojnLq/3Z1CK2lNSLTCVjxVk1F/TZHwOZZrOWi0ur95BbLxNQ==", + "license": "MIT", + "dependencies": { + "@babel/helper-string-parser": "^7.27.1", + "@babel/helper-validator-identifier": "^7.27.1" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@dagrejs/dagre": { + "version": "1.1.5", + "resolved": "https://registry.npmjs.org/@dagrejs/dagre/-/dagre-1.1.5.tgz", + "integrity": "sha512-Ghgrh08s12DCL5SeiR6AoyE80mQELTWhJBRmXfFoqDiFkR458vPEdgTbbjA0T+9ETNxUblnD0QW55tfdvi5pjQ==", + "license": "MIT", + "dependencies": { + "@dagrejs/graphlib": "2.2.4" + } + }, + "node_modules/@dagrejs/graphlib": { + "version": "2.2.4", + "resolved": "https://registry.npmjs.org/@dagrejs/graphlib/-/graphlib-2.2.4.tgz", + "integrity": "sha512-mepCf/e9+SKYy1d02/UkvSy6+6MoyXhVxP8lLDfA7BPE1X1d4dR0sZznmbM8/XVJ1GPM+Svnx7Xj6ZweByWUkw==", + "license": "MIT", + "engines": { + "node": ">17.0.0" + } + }, + "node_modules/@date-fns/tz": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/@date-fns/tz/-/tz-1.4.1.tgz", + "integrity": "sha512-P5LUNhtbj6YfI3iJjw5EL9eUAG6OitD0W3fWQcpQjDRc/QIsL0tRNuO1PcDvPccWL1fSTXXdE1ds+l95DV/OFA==", + "license": "MIT" + }, + "node_modules/@dnd-kit/accessibility": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/@dnd-kit/accessibility/-/accessibility-3.1.1.tgz", + "integrity": "sha512-2P+YgaXF+gRsIihwwY1gCsQSYnu9Zyj2py8kY5fFvUM1qm2WA2u639R6YNVfU4GWr+ZM5mqEsfHZZLoRONbemw==", + "license": "MIT", + "dependencies": { + "tslib": "^2.0.0" + }, + "peerDependencies": { + "react": ">=16.8.0" + } + }, + "node_modules/@dnd-kit/core": { + "version": "6.3.1", + "resolved": "https://registry.npmjs.org/@dnd-kit/core/-/core-6.3.1.tgz", + "integrity": "sha512-xkGBRQQab4RLwgXxoqETICr6S5JlogafbhNsidmrkVv2YRs5MLwpjoF2qpiGjQt8S9AoxtIV603s0GIUpY5eYQ==", + "license": "MIT", + "dependencies": { + "@dnd-kit/accessibility": "^3.1.1", + "@dnd-kit/utilities": "^3.2.2", + "tslib": "^2.0.0" + }, + "peerDependencies": { + "react": ">=16.8.0", + "react-dom": ">=16.8.0" + } + }, + "node_modules/@dnd-kit/modifiers": { + "version": "9.0.0", + "resolved": "https://registry.npmjs.org/@dnd-kit/modifiers/-/modifiers-9.0.0.tgz", + "integrity": "sha512-ybiLc66qRGuZoC20wdSSG6pDXFikui/dCNGthxv4Ndy8ylErY0N3KVxY2bgo7AWwIbxDmXDg3ylAFmnrjcbVvw==", + "license": "MIT", + "dependencies": { + "@dnd-kit/utilities": "^3.2.2", + "tslib": "^2.0.0" + }, + "peerDependencies": { + "@dnd-kit/core": "^6.3.0", + "react": ">=16.8.0" + } + }, + "node_modules/@dnd-kit/sortable": { + "version": "10.0.0", + "resolved": "https://registry.npmjs.org/@dnd-kit/sortable/-/sortable-10.0.0.tgz", + "integrity": "sha512-+xqhmIIzvAYMGfBYYnbKuNicfSsk4RksY2XdmJhT+HAC01nix6fHCztU68jooFiMUB01Ky3F0FyOvhG/BZrWkg==", + "license": "MIT", + "dependencies": { + "@dnd-kit/utilities": "^3.2.2", + "tslib": "^2.0.0" + }, + "peerDependencies": { + "@dnd-kit/core": "^6.3.0", + "react": ">=16.8.0" + } + }, + "node_modules/@dnd-kit/utilities": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/@dnd-kit/utilities/-/utilities-3.2.2.tgz", + "integrity": "sha512-+MKAJEOfaBe5SmV6t34p80MMKhjvUz0vRrvVJbPT0WElzaOJ/1xs+D+KDv+tD/NE5ujfrChEcshd4fLn0wpiqg==", + "license": "MIT", + "dependencies": { + "tslib": "^2.0.0" + }, + "peerDependencies": { + "react": ">=16.8.0" + } + }, + "node_modules/@emotion/babel-plugin": { + "version": "11.13.5", + "resolved": "https://registry.npmjs.org/@emotion/babel-plugin/-/babel-plugin-11.13.5.tgz", + "integrity": "sha512-pxHCpT2ex+0q+HH91/zsdHkw/lXd468DIN2zvfvLtPKLLMo6gQj7oLObq8PhkrxOZb/gGCq03S3Z7PDhS8pduQ==", + "license": "MIT", + "dependencies": { + "@babel/helper-module-imports": "^7.16.7", + "@babel/runtime": "^7.18.3", + "@emotion/hash": "^0.9.2", + "@emotion/memoize": "^0.9.0", + "@emotion/serialize": "^1.3.3", + "babel-plugin-macros": "^3.1.0", + "convert-source-map": "^1.5.0", + "escape-string-regexp": "^4.0.0", + "find-root": "^1.1.0", + "source-map": "^0.5.7", + "stylis": "4.2.0" + } + }, + "node_modules/@emotion/babel-plugin/node_modules/convert-source-map": { + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.9.0.tgz", + "integrity": "sha512-ASFBup0Mz1uyiIjANan1jzLQami9z1PoYSZCiiYW2FczPbenXc45FZdBZLzOT+r6+iciuEModtmCti+hjaAk0A==", + "license": "MIT" + }, + "node_modules/@emotion/cache": { + "version": "11.14.0", + "resolved": "https://registry.npmjs.org/@emotion/cache/-/cache-11.14.0.tgz", + "integrity": "sha512-L/B1lc/TViYk4DcpGxtAVbx0ZyiKM5ktoIyafGkH6zg/tj+mA+NE//aPYKG0k8kCHSHVJrpLpcAlOBEXQ3SavA==", + "license": "MIT", + "dependencies": { + "@emotion/memoize": "^0.9.0", + "@emotion/sheet": "^1.4.0", + "@emotion/utils": "^1.4.2", + "@emotion/weak-memoize": "^0.4.0", + "stylis": "4.2.0" + } + }, + "node_modules/@emotion/hash": { + "version": "0.9.2", + "resolved": "https://registry.npmjs.org/@emotion/hash/-/hash-0.9.2.tgz", + "integrity": "sha512-MyqliTZGuOm3+5ZRSaaBGP3USLw6+EGykkwZns2EPC5g8jJ4z9OrdZY9apkl3+UP9+sdz76YYkwCKP5gh8iY3g==", + "license": "MIT" + }, + "node_modules/@emotion/memoize": { + "version": "0.9.0", + "resolved": "https://registry.npmjs.org/@emotion/memoize/-/memoize-0.9.0.tgz", + "integrity": "sha512-30FAj7/EoJ5mwVPOWhAyCX+FPfMDrVecJAM+Iw9NRoSl4BBAQeqj4cApHHUXOVvIPgLVDsCFoz/hGD+5QQD1GQ==", + "license": "MIT" + }, + "node_modules/@emotion/react": { + "version": "11.14.0", + "resolved": "https://registry.npmjs.org/@emotion/react/-/react-11.14.0.tgz", + "integrity": "sha512-O000MLDBDdk/EohJPFUqvnp4qnHeYkVP5B0xEG0D/L7cOKP9kefu2DXn8dj74cQfsEzUqh+sr1RzFqiL1o+PpA==", + "license": "MIT", + "dependencies": { + "@babel/runtime": "^7.18.3", + "@emotion/babel-plugin": "^11.13.5", + "@emotion/cache": "^11.14.0", + "@emotion/serialize": "^1.3.3", + "@emotion/use-insertion-effect-with-fallbacks": "^1.2.0", + "@emotion/utils": "^1.4.2", + "@emotion/weak-memoize": "^0.4.0", + "hoist-non-react-statics": "^3.3.1" + }, + "peerDependencies": { + "react": ">=16.8.0" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + } + } + }, + "node_modules/@emotion/serialize": { + "version": "1.3.3", + "resolved": "https://registry.npmjs.org/@emotion/serialize/-/serialize-1.3.3.tgz", + "integrity": "sha512-EISGqt7sSNWHGI76hC7x1CksiXPahbxEOrC5RjmFRJTqLyEK9/9hZvBbiYn70dw4wuwMKiEMCUlR6ZXTSWQqxA==", + "license": "MIT", + "dependencies": { + "@emotion/hash": "^0.9.2", + "@emotion/memoize": "^0.9.0", + "@emotion/unitless": "^0.10.0", + "@emotion/utils": "^1.4.2", + "csstype": "^3.0.2" + } + }, + "node_modules/@emotion/sheet": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/@emotion/sheet/-/sheet-1.4.0.tgz", + "integrity": "sha512-fTBW9/8r2w3dXWYM4HCB1Rdp8NLibOw2+XELH5m5+AkWiL/KqYX6dc0kKYlaYyKjrQ6ds33MCdMPEwgs2z1rqg==", + "license": "MIT" + }, + "node_modules/@emotion/unitless": { + "version": "0.10.0", + "resolved": "https://registry.npmjs.org/@emotion/unitless/-/unitless-0.10.0.tgz", + "integrity": "sha512-dFoMUuQA20zvtVTuxZww6OHoJYgrzfKM1t52mVySDJnMSEa08ruEvdYQbhvyu6soU+NeLVd3yKfTfT0NeV6qGg==", + "license": "MIT" + }, + "node_modules/@emotion/use-insertion-effect-with-fallbacks": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/@emotion/use-insertion-effect-with-fallbacks/-/use-insertion-effect-with-fallbacks-1.2.0.tgz", + "integrity": "sha512-yJMtVdH59sxi/aVJBpk9FQq+OR8ll5GT8oWd57UpeaKEVGab41JWaCFA7FRLoMLloOZF/c/wsPoe+bfGmRKgDg==", + "license": "MIT", + "peerDependencies": { + "react": ">=16.8.0" + } + }, + "node_modules/@emotion/utils": { + "version": "1.4.2", + "resolved": "https://registry.npmjs.org/@emotion/utils/-/utils-1.4.2.tgz", + "integrity": "sha512-3vLclRofFziIa3J2wDh9jjbkUz9qk5Vi3IZ/FSTKViB0k+ef0fPV7dYrUIugbgupYDx7v9ud/SjrtEP8Y4xLoA==", + "license": "MIT" + }, + "node_modules/@emotion/weak-memoize": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/@emotion/weak-memoize/-/weak-memoize-0.4.0.tgz", + "integrity": "sha512-snKqtPW01tN0ui7yu9rGv69aJXr/a/Ywvl11sUjNtEcRc+ng/mQriFL0wLXMef74iHa/EkftbDzU9F8iFbH+zg==", + "license": "MIT" + }, + "node_modules/@esbuild/aix-ppc64": { + "version": "0.25.9", + "resolved": "https://registry.npmjs.org/@esbuild/aix-ppc64/-/aix-ppc64-0.25.9.tgz", + "integrity": "sha512-OaGtL73Jck6pBKjNIe24BnFE6agGl+6KxDtTfHhy1HmhthfKouEcOhqpSL64K4/0WCtbKFLOdzD/44cJ4k9opA==", + "cpu": [ + "ppc64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "aix" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/android-arm": { + "version": "0.25.9", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.25.9.tgz", + "integrity": "sha512-5WNI1DaMtxQ7t7B6xa572XMXpHAaI/9Hnhk8lcxF4zVN4xstUgTlvuGDorBguKEnZO70qwEcLpfifMLoxiPqHQ==", + "cpu": [ + "arm" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/android-arm64": { + "version": "0.25.9", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.25.9.tgz", + "integrity": "sha512-IDrddSmpSv51ftWslJMvl3Q2ZT98fUSL2/rlUXuVqRXHCs5EUF1/f+jbjF5+NG9UffUDMCiTyh8iec7u8RlTLg==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/android-x64": { + "version": "0.25.9", + "resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.25.9.tgz", + "integrity": "sha512-I853iMZ1hWZdNllhVZKm34f4wErd4lMyeV7BLzEExGEIZYsOzqDWDf+y082izYUE8gtJnYHdeDpN/6tUdwvfiw==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/darwin-arm64": { + "version": "0.25.9", + "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.25.9.tgz", + "integrity": "sha512-XIpIDMAjOELi/9PB30vEbVMs3GV1v2zkkPnuyRRURbhqjyzIINwj+nbQATh4H9GxUgH1kFsEyQMxwiLFKUS6Rg==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/darwin-x64": { + "version": "0.25.9", + "resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.25.9.tgz", + "integrity": "sha512-jhHfBzjYTA1IQu8VyrjCX4ApJDnH+ez+IYVEoJHeqJm9VhG9Dh2BYaJritkYK3vMaXrf7Ogr/0MQ8/MeIefsPQ==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/freebsd-arm64": { + "version": "0.25.9", + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.25.9.tgz", + "integrity": "sha512-z93DmbnY6fX9+KdD4Ue/H6sYs+bhFQJNCPZsi4XWJoYblUqT06MQUdBCpcSfuiN72AbqeBFu5LVQTjfXDE2A6Q==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "freebsd" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/freebsd-x64": { + "version": "0.25.9", + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.25.9.tgz", + "integrity": "sha512-mrKX6H/vOyo5v71YfXWJxLVxgy1kyt1MQaD8wZJgJfG4gq4DpQGpgTB74e5yBeQdyMTbgxp0YtNj7NuHN0PoZg==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "freebsd" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-arm": { + "version": "0.25.9", + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.25.9.tgz", + "integrity": "sha512-HBU2Xv78SMgaydBmdor38lg8YDnFKSARg1Q6AT0/y2ezUAKiZvc211RDFHlEZRFNRVhcMamiToo7bDx3VEOYQw==", + "cpu": [ + "arm" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-arm64": { + "version": "0.25.9", + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.25.9.tgz", + "integrity": "sha512-BlB7bIcLT3G26urh5Dmse7fiLmLXnRlopw4s8DalgZ8ef79Jj4aUcYbk90g8iCa2467HX8SAIidbL7gsqXHdRw==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-ia32": { + "version": "0.25.9", + "resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.25.9.tgz", + "integrity": "sha512-e7S3MOJPZGp2QW6AK6+Ly81rC7oOSerQ+P8L0ta4FhVi+/j/v2yZzx5CqqDaWjtPFfYz21Vi1S0auHrap3Ma3A==", + "cpu": [ + "ia32" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-loong64": { + "version": "0.25.9", + "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.25.9.tgz", + "integrity": "sha512-Sbe10Bnn0oUAB2AalYztvGcK+o6YFFA/9829PhOCUS9vkJElXGdphz0A3DbMdP8gmKkqPmPcMJmJOrI3VYB1JQ==", + "cpu": [ + "loong64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-mips64el": { + "version": "0.25.9", + "resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.25.9.tgz", + "integrity": "sha512-YcM5br0mVyZw2jcQeLIkhWtKPeVfAerES5PvOzaDxVtIyZ2NUBZKNLjC5z3/fUlDgT6w89VsxP2qzNipOaaDyA==", + "cpu": [ + "mips64el" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-ppc64": { + "version": "0.25.9", + "resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.25.9.tgz", + "integrity": "sha512-++0HQvasdo20JytyDpFvQtNrEsAgNG2CY1CLMwGXfFTKGBGQT3bOeLSYE2l1fYdvML5KUuwn9Z8L1EWe2tzs1w==", + "cpu": [ + "ppc64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-riscv64": { + "version": "0.25.9", + "resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.25.9.tgz", + "integrity": "sha512-uNIBa279Y3fkjV+2cUjx36xkx7eSjb8IvnL01eXUKXez/CBHNRw5ekCGMPM0BcmqBxBcdgUWuUXmVWwm4CH9kg==", + "cpu": [ + "riscv64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-s390x": { + "version": "0.25.9", + "resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.25.9.tgz", + "integrity": "sha512-Mfiphvp3MjC/lctb+7D287Xw1DGzqJPb/J2aHHcHxflUo+8tmN/6d4k6I2yFR7BVo5/g7x2Monq4+Yew0EHRIA==", + "cpu": [ + "s390x" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-x64": { + "version": "0.25.9", + "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.25.9.tgz", + "integrity": "sha512-iSwByxzRe48YVkmpbgoxVzn76BXjlYFXC7NvLYq+b+kDjyyk30J0JY47DIn8z1MO3K0oSl9fZoRmZPQI4Hklzg==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/netbsd-arm64": { + "version": "0.25.9", + "resolved": "https://registry.npmjs.org/@esbuild/netbsd-arm64/-/netbsd-arm64-0.25.9.tgz", + "integrity": "sha512-9jNJl6FqaUG+COdQMjSCGW4QiMHH88xWbvZ+kRVblZsWrkXlABuGdFJ1E9L7HK+T0Yqd4akKNa/lO0+jDxQD4Q==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "netbsd" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/netbsd-x64": { + "version": "0.25.9", + "resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.25.9.tgz", + "integrity": "sha512-RLLdkflmqRG8KanPGOU7Rpg829ZHu8nFy5Pqdi9U01VYtG9Y0zOG6Vr2z4/S+/3zIyOxiK6cCeYNWOFR9QP87g==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "netbsd" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/openbsd-arm64": { + "version": "0.25.9", + "resolved": "https://registry.npmjs.org/@esbuild/openbsd-arm64/-/openbsd-arm64-0.25.9.tgz", + "integrity": "sha512-YaFBlPGeDasft5IIM+CQAhJAqS3St3nJzDEgsgFixcfZeyGPCd6eJBWzke5piZuZ7CtL656eOSYKk4Ls2C0FRQ==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "openbsd" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/openbsd-x64": { + "version": "0.25.9", + "resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.25.9.tgz", + "integrity": "sha512-1MkgTCuvMGWuqVtAvkpkXFmtL8XhWy+j4jaSO2wxfJtilVCi0ZE37b8uOdMItIHz4I6z1bWWtEX4CJwcKYLcuA==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "openbsd" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/openharmony-arm64": { + "version": "0.25.9", + "resolved": "https://registry.npmjs.org/@esbuild/openharmony-arm64/-/openharmony-arm64-0.25.9.tgz", + "integrity": "sha512-4Xd0xNiMVXKh6Fa7HEJQbrpP3m3DDn43jKxMjxLLRjWnRsfxjORYJlXPO4JNcXtOyfajXorRKY9NkOpTHptErg==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "openharmony" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/sunos-x64": { + "version": "0.25.9", + "resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.25.9.tgz", + "integrity": "sha512-WjH4s6hzo00nNezhp3wFIAfmGZ8U7KtrJNlFMRKxiI9mxEK1scOMAaa9i4crUtu+tBr+0IN6JCuAcSBJZfnphw==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "sunos" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/win32-arm64": { + "version": "0.25.9", + "resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.25.9.tgz", + "integrity": "sha512-mGFrVJHmZiRqmP8xFOc6b84/7xa5y5YvR1x8djzXpJBSv/UsNK6aqec+6JDjConTgvvQefdGhFDAs2DLAds6gQ==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/win32-ia32": { + "version": "0.25.9", + "resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.25.9.tgz", + "integrity": "sha512-b33gLVU2k11nVx1OhX3C8QQP6UHQK4ZtN56oFWvVXvz2VkDoe6fbG8TOgHFxEvqeqohmRnIHe5A1+HADk4OQww==", + "cpu": [ + "ia32" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/win32-x64": { + "version": "0.25.9", + "resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.25.9.tgz", + "integrity": "sha512-PPOl1mi6lpLNQxnGoyAfschAodRFYXJ+9fs6WHXz7CSWKbOqiMZsubC+BQsVKuul+3vKLuwTHsS2c2y9EoKwxQ==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@eslint-community/eslint-utils": { + "version": "4.7.0", + "resolved": "https://registry.npmjs.org/@eslint-community/eslint-utils/-/eslint-utils-4.7.0.tgz", + "integrity": "sha512-dyybb3AcajC7uha6CvhdVRJqaKyn7w2YKqKyAN37NKYgZT36w+iRb0Dymmc5qEJ549c/S31cMMSFd75bteCpCw==", + "dev": true, + "license": "MIT", + "dependencies": { + "eslint-visitor-keys": "^3.4.3" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + }, + "peerDependencies": { + "eslint": "^6.0.0 || ^7.0.0 || >=8.0.0" + } + }, + "node_modules/@eslint-community/eslint-utils/node_modules/eslint-visitor-keys": { + "version": "3.4.3", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.4.3.tgz", + "integrity": "sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag==", + "dev": true, + "license": "Apache-2.0", + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + } + }, + "node_modules/@eslint-community/regexpp": { + "version": "4.12.1", + "resolved": "https://registry.npmjs.org/@eslint-community/regexpp/-/regexpp-4.12.1.tgz", + "integrity": "sha512-CCZCDJuduB9OUkFkY2IgppNZMi2lBQgD2qzwXkEia16cge2pijY/aXi96CJMquDMn3nJdlPV1A5KrJEXwfLNzQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": "^12.0.0 || ^14.0.0 || >=16.0.0" + } + }, + "node_modules/@eslint/config-array": { + "version": "0.21.0", + "resolved": "https://registry.npmjs.org/@eslint/config-array/-/config-array-0.21.0.tgz", + "integrity": "sha512-ENIdc4iLu0d93HeYirvKmrzshzofPw6VkZRKQGe9Nv46ZnWUzcF1xV01dcvEg/1wXUR61OmmlSfyeyO7EvjLxQ==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "@eslint/object-schema": "^2.1.6", + "debug": "^4.3.1", + "minimatch": "^3.1.2" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + } + }, + "node_modules/@eslint/config-helpers": { + "version": "0.3.1", + "resolved": "https://registry.npmjs.org/@eslint/config-helpers/-/config-helpers-0.3.1.tgz", + "integrity": "sha512-xR93k9WhrDYpXHORXpxVL5oHj3Era7wo6k/Wd8/IsQNnZUTzkGS29lyn3nAT05v6ltUuTFVCCYDEGfy2Or/sPA==", + "dev": true, + "license": "Apache-2.0", + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + } + }, + "node_modules/@eslint/core": { + "version": "0.15.2", + "resolved": "https://registry.npmjs.org/@eslint/core/-/core-0.15.2.tgz", + "integrity": "sha512-78Md3/Rrxh83gCxoUc0EiciuOHsIITzLy53m3d9UyiW8y9Dj2D29FeETqyKA+BRK76tnTp6RXWb3pCay8Oyomg==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "@types/json-schema": "^7.0.15" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + } + }, + "node_modules/@eslint/eslintrc": { + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-3.3.1.tgz", + "integrity": "sha512-gtF186CXhIl1p4pJNGZw8Yc6RlshoePRvE0X91oPGb3vZ8pM3qOS9W9NGPat9LziaBV7XrJWGylNQXkGcnM3IQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "ajv": "^6.12.4", + "debug": "^4.3.2", + "espree": "^10.0.1", + "globals": "^14.0.0", + "ignore": "^5.2.0", + "import-fresh": "^3.2.1", + "js-yaml": "^4.1.0", + "minimatch": "^3.1.2", + "strip-json-comments": "^3.1.1" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + } + }, + "node_modules/@eslint/eslintrc/node_modules/globals": { + "version": "14.0.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-14.0.0.tgz", + "integrity": "sha512-oahGvuMGQlPw/ivIYBjVSrWAfWLBeku5tpPE2fOPLi+WHffIWbuh2tCjhyQhTBPMf5E9jDEH4FOmTYgYwbKwtQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/@eslint/js": { + "version": "9.34.0", + "resolved": "https://registry.npmjs.org/@eslint/js/-/js-9.34.0.tgz", + "integrity": "sha512-EoyvqQnBNsV1CWaEJ559rxXL4c8V92gxirbawSmVUOWXlsRxxQXl6LmCpdUblgxgSkDIqKnhzba2SjRTI/A5Rw==", + "dev": true, + "license": "MIT", + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "url": "https://eslint.org/donate" + } + }, + "node_modules/@eslint/object-schema": { + "version": "2.1.6", + "resolved": "https://registry.npmjs.org/@eslint/object-schema/-/object-schema-2.1.6.tgz", + "integrity": "sha512-RBMg5FRL0I0gs51M/guSAj5/e14VQ4tpZnQNWwuDT66P14I43ItmPfIZRhO9fUVIPOAQXU47atlywZ/czoqFPA==", + "dev": true, + "license": "Apache-2.0", + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + } + }, + "node_modules/@eslint/plugin-kit": { + "version": "0.3.5", + "resolved": "https://registry.npmjs.org/@eslint/plugin-kit/-/plugin-kit-0.3.5.tgz", + "integrity": "sha512-Z5kJ+wU3oA7MMIqVR9tyZRtjYPr4OC004Q4Rw7pgOKUOKkJfZ3O24nz3WYfGRpMDNmcOi3TwQOmgm7B7Tpii0w==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "@eslint/core": "^0.15.2", + "levn": "^0.4.1" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + } + }, + "node_modules/@essentials/memoize-one": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@essentials/memoize-one/-/memoize-one-1.1.0.tgz", + "integrity": "sha512-HMkuIkKNe0EWSUpZhlaq9+5Yp47YhrMhxLMnXTRnEyE5N4xKLspAvMGjUFdi794VnEF1EcOZFS8rdROeujrgag==", + "license": "MIT" + }, + "node_modules/@essentials/one-key-map": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/@essentials/one-key-map/-/one-key-map-1.2.0.tgz", + "integrity": "sha512-C2H7zHVcsoipDv4VKY5uUcv5ilsK+uEgEj+WeOdN5oz/Qj1/OZIzCdle90gDzj0xnGQrmZ9qDujwD7AkBb5k9A==", + "license": "MIT" + }, + "node_modules/@essentials/raf": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/@essentials/raf/-/raf-1.2.0.tgz", + "integrity": "sha512-AWJvpprE2o7ATMb7HBYMVUVmPJBCt2wZp2rY7d+rAcNSMvzLbDepy9KFeqqrPZh+s9aIpbw1LgmuAW7kuRFgrQ==", + "license": "MIT" + }, + "node_modules/@essentials/request-timeout": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/@essentials/request-timeout/-/request-timeout-1.3.0.tgz", + "integrity": "sha512-lKZPhKScNFnR1MBnk4+sxshk46fpvdN+Uh1LlKWFO5g1ocuz4EcknNIL7tm/rsCAs/+xMWiBTwbDUvm+pDNlXw==", + "license": "MIT", + "dependencies": { + "@essentials/raf": "^1.2.0" + } + }, + "node_modules/@floating-ui/core": { + "version": "1.7.3", + "resolved": "https://registry.npmjs.org/@floating-ui/core/-/core-1.7.3.tgz", + "integrity": "sha512-sGnvb5dmrJaKEZ+LDIpguvdX3bDlEllmv4/ClQ9awcmCZrlx5jQyyMWFM5kBI+EyNOCDDiKk8il0zeuX3Zlg/w==", + "license": "MIT", + "dependencies": { + "@floating-ui/utils": "^0.2.10" + } + }, + "node_modules/@floating-ui/dom": { + "version": "1.7.4", + "resolved": "https://registry.npmjs.org/@floating-ui/dom/-/dom-1.7.4.tgz", + "integrity": "sha512-OOchDgh4F2CchOX94cRVqhvy7b3AFb+/rQXyswmzmGakRfkMgoWVjfnLWkRirfLEfuD4ysVW16eXzwt3jHIzKA==", + "license": "MIT", + "dependencies": { + "@floating-ui/core": "^1.7.3", + "@floating-ui/utils": "^0.2.10" + } + }, + "node_modules/@floating-ui/react": { + "version": "0.27.16", + "resolved": "https://registry.npmjs.org/@floating-ui/react/-/react-0.27.16.tgz", + "integrity": "sha512-9O8N4SeG2z++TSM8QA/KTeKFBVCNEz/AGS7gWPJf6KFRzmRWixFRnCnkPHRDwSVZW6QPDO6uT0P2SpWNKCc9/g==", + "license": "MIT", + "dependencies": { + "@floating-ui/react-dom": "^2.1.6", + "@floating-ui/utils": "^0.2.10", + "tabbable": "^6.0.0" + }, + "peerDependencies": { + "react": ">=17.0.0", + "react-dom": ">=17.0.0" + } + }, + "node_modules/@floating-ui/react-dom": { + "version": "2.1.6", + "resolved": "https://registry.npmjs.org/@floating-ui/react-dom/-/react-dom-2.1.6.tgz", + "integrity": "sha512-4JX6rEatQEvlmgU80wZyq9RT96HZJa88q8hp0pBd+LrczeDI4o6uA2M+uvxngVHo4Ihr8uibXxH6+70zhAFrVw==", + "license": "MIT", + "dependencies": { + "@floating-ui/dom": "^1.7.4" + }, + "peerDependencies": { + "react": ">=16.8.0", + "react-dom": ">=16.8.0" + } + }, + "node_modules/@floating-ui/utils": { + "version": "0.2.10", + "resolved": "https://registry.npmjs.org/@floating-ui/utils/-/utils-0.2.10.tgz", + "integrity": "sha512-aGTxbpbg8/b5JfU1HXSrbH3wXZuLPJcNEcZQFMxLs3oSzgtVu6nFPkbbGGUvBcUjKV2YyB9Wxxabo+HEH9tcRQ==", + "license": "MIT" + }, + "node_modules/@foliojs-fork/fontkit": { + "version": "1.9.2", + "resolved": "https://registry.npmjs.org/@foliojs-fork/fontkit/-/fontkit-1.9.2.tgz", + "integrity": "sha512-IfB5EiIb+GZk+77TRB86AHroVaqfq8JRFlUbz0WEwsInyCG0epX2tCPOy+UfaWPju30DeVoUAXfzWXmhn753KA==", + "license": "MIT", + "dependencies": { + "@foliojs-fork/restructure": "^2.0.2", + "brotli": "^1.2.0", + "clone": "^1.0.4", + "deep-equal": "^1.0.0", + "dfa": "^1.2.0", + "tiny-inflate": "^1.0.2", + "unicode-properties": "^1.2.2", + "unicode-trie": "^2.0.0" + } + }, + "node_modules/@foliojs-fork/linebreak": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/@foliojs-fork/linebreak/-/linebreak-1.1.2.tgz", + "integrity": "sha512-ZPohpxxbuKNE0l/5iBJnOAfUaMACwvUIKCvqtWGKIMv1lPYoNjYXRfhi9FeeV9McBkBLxsMFWTVVhHJA8cyzvg==", + "license": "MIT", + "dependencies": { + "base64-js": "1.3.1", + "unicode-trie": "^2.0.0" + } + }, + "node_modules/@foliojs-fork/pdfkit": { + "version": "0.15.3", + "resolved": "https://registry.npmjs.org/@foliojs-fork/pdfkit/-/pdfkit-0.15.3.tgz", + "integrity": "sha512-Obc0Wmy3bm7BINFVvPhcl2rnSSK61DQrlHU8aXnAqDk9LCjWdUOPwhgD8Ywz5VtuFjRxmVOM/kQ/XLIBjDvltw==", + "license": "MIT", + "dependencies": { + "@foliojs-fork/fontkit": "^1.9.2", + "@foliojs-fork/linebreak": "^1.1.1", + "crypto-js": "^4.2.0", + "jpeg-exif": "^1.1.4", + "png-js": "^1.0.0" + } + }, + "node_modules/@foliojs-fork/restructure": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/@foliojs-fork/restructure/-/restructure-2.0.2.tgz", + "integrity": "sha512-59SgoZ3EXbkfSX7b63tsou/SDGzwUEK6MuB5sKqgVK1/XE0fxmpsOb9DQI8LXW3KfGnAjImCGhhEb7uPPAUVNA==", + "license": "MIT" + }, + "node_modules/@fullcalendar/core": { + "version": "6.1.19", + "resolved": "https://registry.npmjs.org/@fullcalendar/core/-/core-6.1.19.tgz", + "integrity": "sha512-z0aVlO5e4Wah6p6mouM0UEqtRf1MZZPt4mwzEyU6kusaNL+dlWQgAasF2cK23hwT4cmxkEmr4inULXgpyeExdQ==", + "license": "MIT", + "dependencies": { + "preact": "~10.12.1" + } + }, + "node_modules/@fullcalendar/daygrid": { + "version": "6.1.19", + "resolved": "https://registry.npmjs.org/@fullcalendar/daygrid/-/daygrid-6.1.19.tgz", + "integrity": "sha512-IAAfnMICnVWPjpT4zi87i3FEw0xxSza0avqY/HedKEz+l5MTBYvCDPOWDATpzXoLut3aACsjktIyw9thvIcRYQ==", + "license": "MIT", + "peerDependencies": { + "@fullcalendar/core": "~6.1.19" + } + }, + "node_modules/@fullcalendar/interaction": { + "version": "6.1.19", + "resolved": "https://registry.npmjs.org/@fullcalendar/interaction/-/interaction-6.1.19.tgz", + "integrity": "sha512-GOciy79xe8JMVp+1evAU3ytdwN/7tv35t5i1vFkifiuWcQMLC/JnLg/RA2s4sYmQwoYhTw/p4GLcP0gO5B3X5w==", + "license": "MIT", + "peerDependencies": { + "@fullcalendar/core": "~6.1.19" + } + }, + "node_modules/@fullcalendar/list": { + "version": "6.1.19", + "resolved": "https://registry.npmjs.org/@fullcalendar/list/-/list-6.1.19.tgz", + "integrity": "sha512-knZHpAVF0LbzZpSJSUmLUUzF0XlU/MRGK+Py2s0/mP93bCtno1k2L3XPs/kzh528hSjehwLm89RgKTSfW1P6cA==", + "license": "MIT", + "peerDependencies": { + "@fullcalendar/core": "~6.1.19" + } + }, + "node_modules/@fullcalendar/react": { + "version": "6.1.19", + "resolved": "https://registry.npmjs.org/@fullcalendar/react/-/react-6.1.19.tgz", + "integrity": "sha512-FP78vnyylaL/btZeHig8LQgfHgfwxLaIG6sKbNkzkPkKEACv11UyyBoTSkaavPsHtXvAkcTED1l7TOunAyPEnA==", + "license": "MIT", + "peerDependencies": { + "@fullcalendar/core": "~6.1.19", + "react": "^16.7.0 || ^17 || ^18 || ^19", + "react-dom": "^16.7.0 || ^17 || ^18 || ^19" + } + }, + "node_modules/@fullcalendar/timegrid": { + "version": "6.1.19", + "resolved": "https://registry.npmjs.org/@fullcalendar/timegrid/-/timegrid-6.1.19.tgz", + "integrity": "sha512-OuzpUueyO9wB5OZ8rs7TWIoqvu4v3yEqdDxZ2VcsMldCpYJRiOe7yHWKr4ap5Tb0fs7Rjbserc/b6Nt7ol6BRg==", + "license": "MIT", + "dependencies": { + "@fullcalendar/daygrid": "~6.1.19" + }, + "peerDependencies": { + "@fullcalendar/core": "~6.1.19" + } + }, + "node_modules/@hello-pangea/dnd": { + "version": "18.0.1", + "resolved": "https://registry.npmjs.org/@hello-pangea/dnd/-/dnd-18.0.1.tgz", + "integrity": "sha512-xojVWG8s/TGrKT1fC8K2tIWeejJYTAeJuj36zM//yEm/ZrnZUSFGS15BpO+jGZT1ybWvyXmeDJwPYb4dhWlbZQ==", + "license": "Apache-2.0", + "dependencies": { + "@babel/runtime": "^7.26.7", + "css-box-model": "^1.2.1", + "raf-schd": "^4.0.3", + "react-redux": "^9.2.0", + "redux": "^5.0.1" + }, + "peerDependencies": { + "react": "^18.0.0 || ^19.0.0", + "react-dom": "^18.0.0 || ^19.0.0" + } + }, + "node_modules/@hookform/resolvers": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/@hookform/resolvers/-/resolvers-5.2.1.tgz", + "integrity": "sha512-u0+6X58gkjMcxur1wRWokA7XsiiBJ6aK17aPZxhkoYiK5J+HcTx0Vhu9ovXe6H+dVpO6cjrn2FkJTryXEMlryQ==", + "license": "MIT", + "dependencies": { + "@standard-schema/utils": "^0.3.0" + }, + "peerDependencies": { + "react-hook-form": "^7.55.0" + } + }, + "node_modules/@humanfs/core": { + "version": "0.19.1", + "resolved": "https://registry.npmjs.org/@humanfs/core/-/core-0.19.1.tgz", + "integrity": "sha512-5DyQ4+1JEUzejeK1JGICcideyfUbGixgS9jNgex5nqkW+cY7WZhxBigmieN5Qnw9ZosSNVC9KQKyb+GUaGyKUA==", + "dev": true, + "license": "Apache-2.0", + "engines": { + "node": ">=18.18.0" + } + }, + "node_modules/@humanfs/node": { + "version": "0.16.6", + "resolved": "https://registry.npmjs.org/@humanfs/node/-/node-0.16.6.tgz", + "integrity": "sha512-YuI2ZHQL78Q5HbhDiBA1X4LmYdXCKCMQIfw0pw7piHJwyREFebJUvrQN4cMssyES6x+vfUbx1CIpaQUKYdQZOw==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "@humanfs/core": "^0.19.1", + "@humanwhocodes/retry": "^0.3.0" + }, + "engines": { + "node": ">=18.18.0" + } + }, + "node_modules/@humanfs/node/node_modules/@humanwhocodes/retry": { + "version": "0.3.1", + "resolved": "https://registry.npmjs.org/@humanwhocodes/retry/-/retry-0.3.1.tgz", + "integrity": "sha512-JBxkERygn7Bv/GbN5Rv8Ul6LVknS+5Bp6RgDC/O8gEBU/yeH5Ui5C/OlWrTb6qct7LjjfT6Re2NxB0ln0yYybA==", + "dev": true, + "license": "Apache-2.0", + "engines": { + "node": ">=18.18" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/nzakas" + } + }, + "node_modules/@humanwhocodes/module-importer": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/@humanwhocodes/module-importer/-/module-importer-1.0.1.tgz", + "integrity": "sha512-bxveV4V8v5Yb4ncFTT3rPSgZBOpCkjfK0y4oVVVJwIuDVBRMDXrPyXRL988i5ap9m9bnyEEjWfm5WkBmtffLfA==", + "dev": true, + "license": "Apache-2.0", + "engines": { + "node": ">=12.22" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/nzakas" + } + }, + "node_modules/@humanwhocodes/retry": { + "version": "0.4.3", + "resolved": "https://registry.npmjs.org/@humanwhocodes/retry/-/retry-0.4.3.tgz", + "integrity": "sha512-bV0Tgo9K4hfPCek+aMAn81RppFKv2ySDQeMoSZuvTASywNTnVJCArCZE2FWqpvIatKu7VMRLWlR1EazvVhDyhQ==", + "dev": true, + "license": "Apache-2.0", + "engines": { + "node": ">=18.18" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/nzakas" + } + }, + "node_modules/@jridgewell/gen-mapping": { + "version": "0.3.13", + "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.13.tgz", + "integrity": "sha512-2kkt/7niJ6MgEPxF0bYdQ6etZaA+fQvDcLKckhy1yIQOzaoKjBBjSj63/aLVjYE3qhRt5dvM+uUyfCg6UKCBbA==", + "license": "MIT", + "dependencies": { + "@jridgewell/sourcemap-codec": "^1.5.0", + "@jridgewell/trace-mapping": "^0.3.24" + } + }, + "node_modules/@jridgewell/resolve-uri": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.2.tgz", + "integrity": "sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw==", + "license": "MIT", + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@jridgewell/sourcemap-codec": { + "version": "1.5.5", + "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.5.5.tgz", + "integrity": "sha512-cYQ9310grqxueWbl+WuIUIaiUaDcj7WOq5fVhEljNVgRfOUhY9fy2zTvfoqWsnebh8Sl70VScFbICvJnLKB0Og==", + "license": "MIT" + }, + "node_modules/@jridgewell/trace-mapping": { + "version": "0.3.30", + "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.30.tgz", + "integrity": "sha512-GQ7Nw5G2lTu/BtHTKfXhKHok2WGetd4XYcVKGx00SjAk8GMwgJM3zr6zORiPGuOE+/vkc90KtTosSSvaCjKb2Q==", + "license": "MIT", + "dependencies": { + "@jridgewell/resolve-uri": "^3.1.0", + "@jridgewell/sourcemap-codec": "^1.4.14" + } + }, + "node_modules/@kurkle/color": { + "version": "0.3.4", + "resolved": "https://registry.npmjs.org/@kurkle/color/-/color-0.3.4.tgz", + "integrity": "sha512-M5UknZPHRu3DEDWoipU6sE8PdkZ6Z/S+v4dD+Ke8IaNlpdSQah50lz1KtcFBa2vsdOnwbbnxJwVM4wty6udA5w==", + "license": "MIT" + }, + "node_modules/@nodelib/fs.scandir": { + "version": "2.1.5", + "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz", + "integrity": "sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==", + "dev": true, + "license": "MIT", + "dependencies": { + "@nodelib/fs.stat": "2.0.5", + "run-parallel": "^1.1.9" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/@nodelib/fs.stat": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz", + "integrity": "sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 8" + } + }, + "node_modules/@nodelib/fs.walk": { + "version": "1.2.8", + "resolved": "https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz", + "integrity": "sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@nodelib/fs.scandir": "2.1.5", + "fastq": "^1.6.0" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/@popperjs/core": { + "version": "2.11.8", + "resolved": "https://registry.npmjs.org/@popperjs/core/-/core-2.11.8.tgz", + "integrity": "sha512-P1st0aksCrn9sGZhp8GMYwBnQsbvAWsZAX44oXNNvLHGqAOcoVxmjZiohstwQ7SqKnbR47akdNi+uleWD8+g6A==", + "license": "MIT", + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/popperjs" + } + }, + "node_modules/@rc-component/motion": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/@rc-component/motion/-/motion-1.1.4.tgz", + "integrity": "sha512-rz3+kqQ05xEgIAB9/UKQZKCg5CO/ivGNU78QWYKVfptmbjJKynZO4KXJ7pJD3oMxE9aW94LD/N3eppXWeysTjw==", + "license": "MIT", + "dependencies": { + "@rc-component/util": "^1.2.0", + "classnames": "^2.2.1" + }, + "peerDependencies": { + "react": ">=16.9.0", + "react-dom": ">=16.9.0" + } + }, + "node_modules/@rc-component/portal": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/@rc-component/portal/-/portal-2.0.0.tgz", + "integrity": "sha512-337ADhBfgH02S8OujUl33OT+8zVJ67eyuUq11j/dE71rXKYNihMsggW8R2VfI2aL3SciDp8gAFsmPVoPkxLUGw==", + "license": "MIT", + "dependencies": { + "@rc-component/util": "^1.2.1", + "classnames": "^2.3.2" + }, + "engines": { + "node": ">=12.x" + }, + "peerDependencies": { + "react": ">=18.0.0", + "react-dom": ">=18.0.0" + } + }, + "node_modules/@rc-component/resize-observer": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/@rc-component/resize-observer/-/resize-observer-1.0.0.tgz", + "integrity": "sha512-inR8Ka87OOwtrDJzdVp2VuEVlc5nK20lHolvkwFUnXwV50p+nLhKny1NvNTCKvBmS/pi/rTn/1Hvsw10sRRnXA==", + "license": "MIT", + "dependencies": { + "@rc-component/util": "^1.2.0", + "classnames": "^2.2.1" + }, + "peerDependencies": { + "react": ">=16.9.0", + "react-dom": ">=16.9.0" + } + }, + "node_modules/@rc-component/tour": { + "version": "2.1.6", + "resolved": "https://registry.npmjs.org/@rc-component/tour/-/tour-2.1.6.tgz", + "integrity": "sha512-KsjCSjc+BcPxcHgVjoRWnRk491WORbCO2PnVVezVithAu+XW3wv0w30zSCTT1UdFWksecahsKg/t/1f39GLYxg==", + "license": "MIT", + "dependencies": { + "@rc-component/portal": "^2.0.0", + "@rc-component/trigger": "^3.0.0", + "@rc-component/util": "^1.2.1", + "classnames": "^2.3.2" + }, + "engines": { + "node": ">=8.x" + }, + "peerDependencies": { + "react": ">=16.9.0", + "react-dom": ">=16.9.0" + } + }, + "node_modules/@rc-component/trigger": { + "version": "3.5.2", + "resolved": "https://registry.npmjs.org/@rc-component/trigger/-/trigger-3.5.2.tgz", + "integrity": "sha512-LcJQa6G5RiGIlCz3TxkkwUjNlYpI5IGpcA5O35QzV8u+qzd0WzyyBB6aVPDkq7ZImGrLGU+jCTByM0q80HxPPA==", + "license": "MIT", + "dependencies": { + "@rc-component/motion": "^1.1.4", + "@rc-component/portal": "^2.0.0", + "@rc-component/resize-observer": "^1.0.0", + "@rc-component/util": "^1.2.1", + "classnames": "^2.3.2" + }, + "engines": { + "node": ">=8.x" + }, + "peerDependencies": { + "react": ">=18.0.0", + "react-dom": ">=18.0.0" + } + }, + "node_modules/@rc-component/util": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/@rc-component/util/-/util-1.2.2.tgz", + "integrity": "sha512-p3zQr9Wu8BKncqmuW23olzBoAFsN8PYMS9FaI4JwJLwknH7DvfHAr1fwbfl9aAWw4Jva64ucpenbgG4fznLUSw==", + "license": "MIT", + "dependencies": { + "is-mobile": "^5.0.0", + "react-is": "^18.2.0" + }, + "peerDependencies": { + "react": ">=18.0.0", + "react-dom": ">=18.0.0" + } + }, + "node_modules/@react-aria/ssr": { + "version": "3.9.10", + "resolved": "https://registry.npmjs.org/@react-aria/ssr/-/ssr-3.9.10.tgz", + "integrity": "sha512-hvTm77Pf+pMBhuBm760Li0BVIO38jv1IBws1xFm1NoL26PU+fe+FMW5+VZWyANR6nYL65joaJKZqOdTQMkO9IQ==", + "license": "Apache-2.0", + "dependencies": { + "@swc/helpers": "^0.5.0" + }, + "engines": { + "node": ">= 12" + }, + "peerDependencies": { + "react": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1" + } + }, + "node_modules/@react-dnd/asap": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/@react-dnd/asap/-/asap-4.0.1.tgz", + "integrity": "sha512-kLy0PJDDwvwwTXxqTFNAAllPHD73AycE9ypWeln/IguoGBEbvFcPDbCV03G52bEcC5E+YgupBE0VzHGdC8SIXg==", + "license": "MIT" + }, + "node_modules/@react-dnd/invariant": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/@react-dnd/invariant/-/invariant-2.0.0.tgz", + "integrity": "sha512-xL4RCQBCBDJ+GRwKTFhGUW8GXa4yoDfJrPbLblc3U09ciS+9ZJXJ3Qrcs/x2IODOdIE5kQxvMmE2UKyqUictUw==", + "license": "MIT" + }, + "node_modules/@react-dnd/shallowequal": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/@react-dnd/shallowequal/-/shallowequal-2.0.0.tgz", + "integrity": "sha512-Pc/AFTdwZwEKJxFJvlxrSmGe/di+aAOBn60sremrpLo6VI/6cmiUYNNwlI5KNYttg7uypzA3ILPMPgxB2GYZEg==", + "license": "MIT" + }, + "node_modules/@react-hook/debounce": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/@react-hook/debounce/-/debounce-3.0.0.tgz", + "integrity": "sha512-ir/kPrSfAzY12Gre0sOHkZ2rkEmM4fS5M5zFxCi4BnCeXh2nvx9Ujd+U4IGpKCuPA+EQD0pg1eK2NGLvfWejag==", + "license": "MIT", + "dependencies": { + "@react-hook/latest": "^1.0.2" + }, + "peerDependencies": { + "react": ">=16.8" + } + }, + "node_modules/@react-hook/event": { + "version": "1.2.6", + "resolved": "https://registry.npmjs.org/@react-hook/event/-/event-1.2.6.tgz", + "integrity": "sha512-JUL5IluaOdn5w5Afpe/puPa1rj8X6udMlQ9dt4hvMuKmTrBS1Ya6sb4sVgvfe2eU4yDuOfAhik8xhbcCekbg9Q==", + "license": "MIT", + "peerDependencies": { + "react": ">=16.8" + } + }, + "node_modules/@react-hook/latest": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/@react-hook/latest/-/latest-1.0.3.tgz", + "integrity": "sha512-dy6duzl+JnAZcDbNTfmaP3xHiKtbXYOaz3G51MGVljh548Y8MWzTr+PHLOfvpypEVW9zwvl+VyKjbWKEVbV1Rg==", + "license": "MIT", + "peerDependencies": { + "react": ">=16.8" + } + }, + "node_modules/@react-hook/passive-layout-effect": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/@react-hook/passive-layout-effect/-/passive-layout-effect-1.2.1.tgz", + "integrity": "sha512-IwEphTD75liO8g+6taS+4oqz+nnroocNfWVHWz7j+N+ZO2vYrc6PV1q7GQhuahL0IOR7JccFTsFKQ/mb6iZWAg==", + "license": "MIT", + "peerDependencies": { + "react": ">=16.8" + } + }, + "node_modules/@react-hook/throttle": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/@react-hook/throttle/-/throttle-2.2.0.tgz", + "integrity": "sha512-LJ5eg+yMV8lXtqK3lR+OtOZ2WH/EfWvuiEEu0M3bhR7dZRfTyEJKxH1oK9uyBxiXPtWXiQggWbZirMCXam51tg==", + "license": "MIT", + "dependencies": { + "@react-hook/latest": "^1.0.2" + }, + "peerDependencies": { + "react": ">=16.8" + } + }, + "node_modules/@react-hook/window-scroll": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/@react-hook/window-scroll/-/window-scroll-1.3.0.tgz", + "integrity": "sha512-LdYnCL22pFI+LTs85Fi2OQHSKWkzIuHFgv8lA+wwuaPxLOEhWR5bzJ21iygUH9X4meeLVRZKEbfpYi3OWWD4GQ==", + "license": "MIT", + "dependencies": { + "@react-hook/event": "^1.2.1", + "@react-hook/throttle": "^2.2.0" + }, + "peerDependencies": { + "react": ">=16.8" + } + }, + "node_modules/@react-hook/window-size": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/@react-hook/window-size/-/window-size-3.1.1.tgz", + "integrity": "sha512-yWnVS5LKnOUIrEsI44oz3bIIUYqflamPL27n+k/PC//PsX/YeWBky09oPeAoc9As6jSH16Wgo8plI+ECZaHk3g==", + "license": "MIT", + "dependencies": { + "@react-hook/debounce": "^3.0.0", + "@react-hook/event": "^1.2.1", + "@react-hook/throttle": "^2.2.0" + }, + "peerDependencies": { + "react": ">=16.8" + } + }, + "node_modules/@react-leaflet/core": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/@react-leaflet/core/-/core-3.0.0.tgz", + "integrity": "sha512-3EWmekh4Nz+pGcr+xjf0KNyYfC3U2JjnkWsh0zcqaexYqmmB5ZhH37kz41JXGmKzpaMZCnPofBBm64i+YrEvGQ==", + "license": "Hippocratic-2.1", + "peerDependencies": { + "leaflet": "^1.9.0", + "react": "^19.0.0", + "react-dom": "^19.0.0" + } + }, + "node_modules/@restart/hooks": { + "version": "0.4.16", + "resolved": "https://registry.npmjs.org/@restart/hooks/-/hooks-0.4.16.tgz", + "integrity": "sha512-f7aCv7c+nU/3mF7NWLtVVr0Ra80RqsO89hO72r+Y/nvQr5+q0UFGkocElTH6MJApvReVh6JHUFYn2cw1WdHF3w==", + "license": "MIT", + "dependencies": { + "dequal": "^2.0.3" + }, + "peerDependencies": { + "react": ">=16.8.0" + } + }, + "node_modules/@restart/ui": { + "version": "1.9.4", + "resolved": "https://registry.npmjs.org/@restart/ui/-/ui-1.9.4.tgz", + "integrity": "sha512-N4C7haUc3vn4LTwVUPlkJN8Ach/+yIMvRuTVIhjilNHqegY60SGLrzud6errOMNJwSnmYFnt1J0H/k8FE3A4KA==", + "license": "MIT", + "dependencies": { + "@babel/runtime": "^7.26.0", + "@popperjs/core": "^2.11.8", + "@react-aria/ssr": "^3.5.0", + "@restart/hooks": "^0.5.0", + "@types/warning": "^3.0.3", + "dequal": "^2.0.3", + "dom-helpers": "^5.2.0", + "uncontrollable": "^8.0.4", + "warning": "^4.0.3" + }, + "peerDependencies": { + "react": ">=16.14.0", + "react-dom": ">=16.14.0" + } + }, + "node_modules/@restart/ui/node_modules/@restart/hooks": { + "version": "0.5.1", + "resolved": "https://registry.npmjs.org/@restart/hooks/-/hooks-0.5.1.tgz", + "integrity": "sha512-EMoH04NHS1pbn07iLTjIjgttuqb7qu4+/EyhAx27MHpoENcB2ZdSsLTNxmKD+WEPnZigo62Qc8zjGnNxoSE/5Q==", + "license": "MIT", + "dependencies": { + "dequal": "^2.0.3" + }, + "peerDependencies": { + "react": ">=16.8.0" + } + }, + "node_modules/@restart/ui/node_modules/uncontrollable": { + "version": "8.0.4", + "resolved": "https://registry.npmjs.org/uncontrollable/-/uncontrollable-8.0.4.tgz", + "integrity": "sha512-ulRWYWHvscPFc0QQXvyJjY6LIXU56f0h8pQFvhxiKk5V1fcI8gp9Ht9leVAhrVjzqMw0BgjspBINx9r6oyJUvQ==", + "license": "MIT", + "peerDependencies": { + "react": ">=16.14.0" + } + }, + "node_modules/@rolldown/pluginutils": { + "version": "1.0.0-beta.32", + "resolved": "https://registry.npmjs.org/@rolldown/pluginutils/-/pluginutils-1.0.0-beta.32.tgz", + "integrity": "sha512-QReCdvxiUZAPkvp1xpAg62IeNzykOFA6syH2CnClif4YmALN1XKpB39XneL80008UbtMShthSVDKmrx05N1q/g==", + "dev": true, + "license": "MIT" + }, + "node_modules/@rollup/rollup-android-arm-eabi": { + "version": "4.48.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm-eabi/-/rollup-android-arm-eabi-4.48.1.tgz", + "integrity": "sha512-rGmb8qoG/zdmKoYELCBwu7vt+9HxZ7Koos3pD0+sH5fR3u3Wb/jGcpnqxcnWsPEKDUyzeLSqksN8LJtgXjqBYw==", + "cpu": [ + "arm" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "android" + ] + }, + "node_modules/@rollup/rollup-android-arm64": { + "version": "4.48.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm64/-/rollup-android-arm64-4.48.1.tgz", + "integrity": "sha512-4e9WtTxrk3gu1DFE+imNJr4WsL13nWbD/Y6wQcyku5qadlKHY3OQ3LJ/INrrjngv2BJIHnIzbqMk1GTAC2P8yQ==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "android" + ] + }, + "node_modules/@rollup/rollup-darwin-arm64": { + "version": "4.48.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-arm64/-/rollup-darwin-arm64-4.48.1.tgz", + "integrity": "sha512-+XjmyChHfc4TSs6WUQGmVf7Hkg8ferMAE2aNYYWjiLzAS/T62uOsdfnqv+GHRjq7rKRnYh4mwWb4Hz7h/alp8A==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ] + }, + "node_modules/@rollup/rollup-darwin-x64": { + "version": "4.48.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-x64/-/rollup-darwin-x64-4.48.1.tgz", + "integrity": "sha512-upGEY7Ftw8M6BAJyGwnwMw91rSqXTcOKZnnveKrVWsMTF8/k5mleKSuh7D4v4IV1pLxKAk3Tbs0Lo9qYmii5mQ==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ] + }, + "node_modules/@rollup/rollup-freebsd-arm64": { + "version": "4.48.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-freebsd-arm64/-/rollup-freebsd-arm64-4.48.1.tgz", + "integrity": "sha512-P9ViWakdoynYFUOZhqq97vBrhuvRLAbN/p2tAVJvhLb8SvN7rbBnJQcBu8e/rQts42pXGLVhfsAP0k9KXWa3nQ==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "freebsd" + ] + }, + "node_modules/@rollup/rollup-freebsd-x64": { + "version": "4.48.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-freebsd-x64/-/rollup-freebsd-x64-4.48.1.tgz", + "integrity": "sha512-VLKIwIpnBya5/saccM8JshpbxfyJt0Dsli0PjXozHwbSVaHTvWXJH1bbCwPXxnMzU4zVEfgD1HpW3VQHomi2AQ==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "freebsd" + ] + }, + "node_modules/@rollup/rollup-linux-arm-gnueabihf": { + "version": "4.48.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-gnueabihf/-/rollup-linux-arm-gnueabihf-4.48.1.tgz", + "integrity": "sha512-3zEuZsXfKaw8n/yF7t8N6NNdhyFw3s8xJTqjbTDXlipwrEHo4GtIKcMJr5Ed29leLpB9AugtAQpAHW0jvtKKaQ==", + "cpu": [ + "arm" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-arm-musleabihf": { + "version": "4.48.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-musleabihf/-/rollup-linux-arm-musleabihf-4.48.1.tgz", + "integrity": "sha512-leo9tOIlKrcBmmEypzunV/2w946JeLbTdDlwEZ7OnnsUyelZ72NMnT4B2vsikSgwQifjnJUbdXzuW4ToN1wV+Q==", + "cpu": [ + "arm" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-arm64-gnu": { + "version": "4.48.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-gnu/-/rollup-linux-arm64-gnu-4.48.1.tgz", + "integrity": "sha512-Vy/WS4z4jEyvnJm+CnPfExIv5sSKqZrUr98h03hpAMbE2aI0aD2wvK6GiSe8Gx2wGp3eD81cYDpLLBqNb2ydwQ==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-arm64-musl": { + "version": "4.48.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-musl/-/rollup-linux-arm64-musl-4.48.1.tgz", + "integrity": "sha512-x5Kzn7XTwIssU9UYqWDB9VpLpfHYuXw5c6bJr4Mzv9kIv242vmJHbI5PJJEnmBYitUIfoMCODDhR7KoZLot2VQ==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-loongarch64-gnu": { + "version": "4.48.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-loongarch64-gnu/-/rollup-linux-loongarch64-gnu-4.48.1.tgz", + "integrity": "sha512-yzCaBbwkkWt/EcgJOKDUdUpMHjhiZT/eDktOPWvSRpqrVE04p0Nd6EGV4/g7MARXXeOqstflqsKuXVM3H9wOIQ==", + "cpu": [ + "loong64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-ppc64-gnu": { + "version": "4.48.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-ppc64-gnu/-/rollup-linux-ppc64-gnu-4.48.1.tgz", + "integrity": "sha512-UK0WzWUjMAJccHIeOpPhPcKBqax7QFg47hwZTp6kiMhQHeOYJeaMwzeRZe1q5IiTKsaLnHu9s6toSYVUlZ2QtQ==", + "cpu": [ + "ppc64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-riscv64-gnu": { + "version": "4.48.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-riscv64-gnu/-/rollup-linux-riscv64-gnu-4.48.1.tgz", + "integrity": "sha512-3NADEIlt+aCdCbWVZ7D3tBjBX1lHpXxcvrLt/kdXTiBrOds8APTdtk2yRL2GgmnSVeX4YS1JIf0imFujg78vpw==", + "cpu": [ + "riscv64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-riscv64-musl": { + "version": "4.48.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-riscv64-musl/-/rollup-linux-riscv64-musl-4.48.1.tgz", + "integrity": "sha512-euuwm/QTXAMOcyiFCcrx0/S2jGvFlKJ2Iro8rsmYL53dlblp3LkUQVFzEidHhvIPPvcIsxDhl2wkBE+I6YVGzA==", + "cpu": [ + "riscv64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-s390x-gnu": { + "version": "4.48.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-s390x-gnu/-/rollup-linux-s390x-gnu-4.48.1.tgz", + "integrity": "sha512-w8mULUjmPdWLJgmTYJx/W6Qhln1a+yqvgwmGXcQl2vFBkWsKGUBRbtLRuKJUln8Uaimf07zgJNxOhHOvjSQmBQ==", + "cpu": [ + "s390x" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-x64-gnu": { + "version": "4.48.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-gnu/-/rollup-linux-x64-gnu-4.48.1.tgz", + "integrity": "sha512-90taWXCWxTbClWuMZD0DKYohY1EovA+W5iytpE89oUPmT5O1HFdf8cuuVIylE6vCbrGdIGv85lVRzTcpTRZ+kA==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-x64-musl": { + "version": "4.48.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-musl/-/rollup-linux-x64-musl-4.48.1.tgz", + "integrity": "sha512-2Gu29SkFh1FfTRuN1GR1afMuND2GKzlORQUP3mNMJbqdndOg7gNsa81JnORctazHRokiDzQ5+MLE5XYmZW5VWg==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-win32-arm64-msvc": { + "version": "4.48.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-arm64-msvc/-/rollup-win32-arm64-msvc-4.48.1.tgz", + "integrity": "sha512-6kQFR1WuAO50bxkIlAVeIYsz3RUx+xymwhTo9j94dJ+kmHe9ly7muH23sdfWduD0BA8pD9/yhonUvAjxGh34jQ==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ] + }, + "node_modules/@rollup/rollup-win32-ia32-msvc": { + "version": "4.48.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-ia32-msvc/-/rollup-win32-ia32-msvc-4.48.1.tgz", + "integrity": "sha512-RUyZZ/mga88lMI3RlXFs4WQ7n3VyU07sPXmMG7/C1NOi8qisUg57Y7LRarqoGoAiopmGmChUhSwfpvQ3H5iGSQ==", + "cpu": [ + "ia32" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ] + }, + "node_modules/@rollup/rollup-win32-x64-msvc": { + "version": "4.48.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-x64-msvc/-/rollup-win32-x64-msvc-4.48.1.tgz", + "integrity": "sha512-8a/caCUN4vkTChxkaIJcMtwIVcBhi4X2PQRoT+yCK3qRYaZ7cURrmJFL5Ux9H9RaMIXj9RuihckdmkBX3zZsgg==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ] + }, + "node_modules/@standard-schema/utils": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/@standard-schema/utils/-/utils-0.3.0.tgz", + "integrity": "sha512-e7Mew686owMaPJVNNLs55PUvgz371nKgwsc4vxE49zsODpJEnxgxRo2y/OKrqueavXgZNMDVj3DdHFlaSAeU8g==", + "license": "MIT" + }, + "node_modules/@svgdotjs/svg.draggable.js": { + "version": "3.0.6", + "resolved": "https://registry.npmjs.org/@svgdotjs/svg.draggable.js/-/svg.draggable.js-3.0.6.tgz", + "integrity": "sha512-7iJFm9lL3C40HQcqzEfezK2l+dW2CpoVY3b77KQGqc8GXWa6LhhmX5Ckv7alQfUXBuZbjpICZ+Dvq1czlGx7gA==", + "license": "MIT", + "peerDependencies": { + "@svgdotjs/svg.js": "^3.2.4" + } + }, + "node_modules/@svgdotjs/svg.filter.js": { + "version": "3.0.9", + "resolved": "https://registry.npmjs.org/@svgdotjs/svg.filter.js/-/svg.filter.js-3.0.9.tgz", + "integrity": "sha512-/69XMRCDoam2HgC4ldHIaDgeQf1ViHIsa0Ld4uWgiXtZ+E24DWHe/9Ib6kbNiZ7WRIdlVokUDR1Fg0kjIpkfbw==", + "license": "MIT", + "dependencies": { + "@svgdotjs/svg.js": "^3.2.4" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/@svgdotjs/svg.js": { + "version": "3.2.4", + "resolved": "https://registry.npmjs.org/@svgdotjs/svg.js/-/svg.js-3.2.4.tgz", + "integrity": "sha512-BjJ/7vWNowlX3Z8O4ywT58DqbNRyYlkk6Yz/D13aB7hGmfQTvGX4Tkgtm/ApYlu9M7lCQi15xUEidqMUmdMYwg==", + "license": "MIT", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/Fuzzyma" + } + }, + "node_modules/@svgdotjs/svg.panzoom.js": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/@svgdotjs/svg.panzoom.js/-/svg.panzoom.js-2.1.2.tgz", + "integrity": "sha512-0Nzo2TRlTebW3pzfAPtHx8Ye7Y3kuMEkK7hwVJi0SgQUB/vstjg7fvCJxB++EqsuDEetP0/SC+4CpLMVm6Lh2g==", + "license": "MIT", + "dependencies": { + "@svgdotjs/svg.js": "^3.0.16" + } + }, + "node_modules/@svgdotjs/svg.resize.js": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/@svgdotjs/svg.resize.js/-/svg.resize.js-2.0.5.tgz", + "integrity": "sha512-4heRW4B1QrJeENfi7326lUPYBCevj78FJs8kfeDxn5st0IYPIRXoTtOSYvTzFWgaWWXd3YCDE6ao4fmv91RthA==", + "license": "MIT", + "engines": { + "node": ">= 14.18" + }, + "peerDependencies": { + "@svgdotjs/svg.js": "^3.2.4", + "@svgdotjs/svg.select.js": "^4.0.1" + } + }, + "node_modules/@svgdotjs/svg.select.js": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/@svgdotjs/svg.select.js/-/svg.select.js-4.0.3.tgz", + "integrity": "sha512-qkMgso1sd2hXKd1FZ1weO7ANq12sNmQJeGDjs46QwDVsxSRcHmvWKL2NDF7Yimpwf3sl5esOLkPqtV2bQ3v/Jg==", + "license": "MIT", + "engines": { + "node": ">= 14.18" + }, + "peerDependencies": { + "@svgdotjs/svg.js": "^3.2.4" + } + }, + "node_modules/@swc/helpers": { + "version": "0.5.17", + "resolved": "https://registry.npmjs.org/@swc/helpers/-/helpers-0.5.17.tgz", + "integrity": "sha512-5IKx/Y13RsYd+sauPb2x+U/xZikHjolzfuDgTAl/Tdf3Q8rslRvC19NKDLgAJQ6wsqADk10ntlv08nPFw/gO/A==", + "license": "Apache-2.0", + "dependencies": { + "tslib": "^2.8.0" + } + }, + "node_modules/@tanstack/react-table": { + "version": "8.21.3", + "resolved": "https://registry.npmjs.org/@tanstack/react-table/-/react-table-8.21.3.tgz", + "integrity": "sha512-5nNMTSETP4ykGegmVkhjcS8tTLW6Vl4axfEGQN3v0zdHYbK4UfoqfPChclTrJ4EoK9QynqAu9oUf8VEmrpZ5Ww==", + "license": "MIT", + "dependencies": { + "@tanstack/table-core": "8.21.3" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/tannerlinsley" + }, + "peerDependencies": { + "react": ">=16.8", + "react-dom": ">=16.8" + } + }, + "node_modules/@tanstack/table-core": { + "version": "8.21.3", + "resolved": "https://registry.npmjs.org/@tanstack/table-core/-/table-core-8.21.3.tgz", + "integrity": "sha512-ldZXEhOBb8Is7xLs01fR3YEc3DERiz5silj8tnGkFZytt1abEvl/GhUmCE0PMLaMPTa3Jk4HbKmRlHmu+gCftg==", + "license": "MIT", + "engines": { + "node": ">=12" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/tannerlinsley" + } + }, + "node_modules/@types/babel__core": { + "version": "7.20.5", + "resolved": "https://registry.npmjs.org/@types/babel__core/-/babel__core-7.20.5.tgz", + "integrity": "sha512-qoQprZvz5wQFJwMDqeseRXWv3rqMvhgpbXFfVyWhbx9X47POIA6i/+dXefEmZKoAgOaTdaIgNSMqMIU61yRyzA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/parser": "^7.20.7", + "@babel/types": "^7.20.7", + "@types/babel__generator": "*", + "@types/babel__template": "*", + "@types/babel__traverse": "*" + } + }, + "node_modules/@types/babel__generator": { + "version": "7.27.0", + "resolved": "https://registry.npmjs.org/@types/babel__generator/-/babel__generator-7.27.0.tgz", + "integrity": "sha512-ufFd2Xi92OAVPYsy+P4n7/U7e68fex0+Ee8gSG9KX7eo084CWiQ4sdxktvdl0bOPupXtVJPY19zk6EwWqUQ8lg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/types": "^7.0.0" + } + }, + "node_modules/@types/babel__template": { + "version": "7.4.4", + "resolved": "https://registry.npmjs.org/@types/babel__template/-/babel__template-7.4.4.tgz", + "integrity": "sha512-h/NUaSyG5EyxBIp8YRxo4RMe2/qQgvyowRwVMzhYhBCONbW8PUsg4lkFMrhgZhUe5z3L3MiLDuvyJ/CaPa2A8A==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/parser": "^7.1.0", + "@babel/types": "^7.0.0" + } + }, + "node_modules/@types/babel__traverse": { + "version": "7.28.0", + "resolved": "https://registry.npmjs.org/@types/babel__traverse/-/babel__traverse-7.28.0.tgz", + "integrity": "sha512-8PvcXf70gTDZBgt9ptxJ8elBeBjcLOAcOtoO/mPJjtji1+CdGbHgm77om1GrsPxsiE+uXIpNSK64UYaIwQXd4Q==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/types": "^7.28.2" + } + }, + "node_modules/@types/estree": { + "version": "1.0.8", + "resolved": "https://registry.npmjs.org/@types/estree/-/estree-1.0.8.tgz", + "integrity": "sha512-dWHzHa2WqEXI/O1E9OjrocMTKJl2mSrEolh1Iomrv6U+JuNwaHXsXx9bLu5gG7BUWFIN0skIQJQ/L1rIex4X6w==", + "dev": true, + "license": "MIT" + }, + "node_modules/@types/geojson": { + "version": "7946.0.16", + "resolved": "https://registry.npmjs.org/@types/geojson/-/geojson-7946.0.16.tgz", + "integrity": "sha512-6C8nqWur3j98U6+lXDfTUWIfgvZU+EumvpHKcYjujKH7woYyLj2sUmff0tRhrqM7BohUw7Pz3ZB1jj2gW9Fvmg==", + "dev": true, + "license": "MIT" + }, + "node_modules/@types/json-schema": { + "version": "7.0.15", + "resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.15.tgz", + "integrity": "sha512-5+fP8P8MFNC+AyZCDxrB2pkZFPGzqQWUzpSeuuVLvm8VMcorNYavBqoFcxK8bQz4Qsbn4oUEEem4wDLfcysGHA==", + "dev": true, + "license": "MIT" + }, + "node_modules/@types/leaflet": { + "version": "1.9.20", + "resolved": "https://registry.npmjs.org/@types/leaflet/-/leaflet-1.9.20.tgz", + "integrity": "sha512-rooalPMlk61LCaLOvBF2VIf9M47HgMQqi5xQ9QRi7c8PkdIe0WrIi5IxXUXQjAdL0c+vcQ01mYWbthzmp9GHWw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/geojson": "*" + } + }, + "node_modules/@types/lodash": { + "version": "4.17.20", + "resolved": "https://registry.npmjs.org/@types/lodash/-/lodash-4.17.20.tgz", + "integrity": "sha512-H3MHACvFUEiujabxhaI/ImO6gUrd8oOurg7LQtS7mbwIXA/cUqWrvBsaeJ23aZEPk1TAYkurjfMbSELfoCXlGA==", + "dev": true, + "license": "MIT" + }, + "node_modules/@types/node": { + "version": "24.3.0", + "resolved": "https://registry.npmjs.org/@types/node/-/node-24.3.0.tgz", + "integrity": "sha512-aPTXCrfwnDLj4VvXrm+UUCQjNEvJgNA8s5F1cvwQU+3KNltTOkBm1j30uNLyqqPNe7gE3KFzImYoZEfLhp4Yow==", + "devOptional": true, + "license": "MIT", + "dependencies": { + "undici-types": "~7.10.0" + } + }, + "node_modules/@types/parse-json": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/@types/parse-json/-/parse-json-4.0.2.tgz", + "integrity": "sha512-dISoDXWWQwUquiKsyZ4Ng+HX2KsPL7LyHKHQwgGFEA3IaKac4Obd+h2a/a6waisAoepJlBcx9paWqjA8/HVjCw==", + "license": "MIT" + }, + "node_modules/@types/prop-types": { + "version": "15.7.15", + "resolved": "https://registry.npmjs.org/@types/prop-types/-/prop-types-15.7.15.tgz", + "integrity": "sha512-F6bEyamV9jKGAFBEmlQnesRPGOQqS2+Uwi0Em15xenOxHaf2hv6L8YCVn3rPdPJOiJfPiCnLIRyvwVaqMY3MIw==", + "license": "MIT" + }, + "node_modules/@types/react": { + "version": "19.1.11", + "resolved": "https://registry.npmjs.org/@types/react/-/react-19.1.11.tgz", + "integrity": "sha512-lr3jdBw/BGj49Eps7EvqlUaoeA0xpj3pc0RoJkHpYaCHkVK7i28dKyImLQb3JVlqs3aYSXf7qYuWOW/fgZnTXQ==", + "license": "MIT", + "dependencies": { + "csstype": "^3.0.2" + } + }, + "node_modules/@types/react-dom": { + "version": "19.1.7", + "resolved": "https://registry.npmjs.org/@types/react-dom/-/react-dom-19.1.7.tgz", + "integrity": "sha512-i5ZzwYpqjmrKenzkoLM2Ibzt6mAsM7pxB6BCIouEVVmgiqaMj1TjaK7hnA36hbW5aZv20kx7Lw6hWzPWg0Rurw==", + "dev": true, + "license": "MIT", + "peerDependencies": { + "@types/react": "^19.0.0" + } + }, + "node_modules/@types/react-transition-group": { + "version": "4.4.12", + "resolved": "https://registry.npmjs.org/@types/react-transition-group/-/react-transition-group-4.4.12.tgz", + "integrity": "sha512-8TV6R3h2j7a91c+1DXdJi3Syo69zzIZbz7Lg5tORM5LEJG7X/E6a1V3drRyBRZq7/utz7A+c4OgYLiLcYGHG6w==", + "license": "MIT", + "peerDependencies": { + "@types/react": "*" + } + }, + "node_modules/@types/sortablejs": { + "version": "1.15.8", + "resolved": "https://registry.npmjs.org/@types/sortablejs/-/sortablejs-1.15.8.tgz", + "integrity": "sha512-b79830lW+RZfwaztgs1aVPgbasJ8e7AXtZYHTELNXZPsERt4ymJdjV4OccDbHQAvHrCcFpbF78jkm0R6h/pZVg==", + "license": "MIT" + }, + "node_modules/@types/use-sync-external-store": { + "version": "0.0.6", + "resolved": "https://registry.npmjs.org/@types/use-sync-external-store/-/use-sync-external-store-0.0.6.tgz", + "integrity": "sha512-zFDAD+tlpf2r4asuHEj0XH6pY6i0g5NeAHPn+15wk3BV6JA69eERFXC1gyGThDkVa1zCyKr5jox1+2LbV/AMLg==", + "license": "MIT" + }, + "node_modules/@types/warning": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/@types/warning/-/warning-3.0.3.tgz", + "integrity": "sha512-D1XC7WK8K+zZEveUPY+cf4+kgauk8N4eHr/XIHXGlGYkHLud6hK9lYfZk1ry1TNh798cZUCgb6MqGEG8DkJt6Q==", + "license": "MIT" + }, + "node_modules/@typescript-eslint/eslint-plugin": { + "version": "8.40.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-8.40.0.tgz", + "integrity": "sha512-w/EboPlBwnmOBtRbiOvzjD+wdiZdgFeo17lkltrtn7X37vagKKWJABvyfsJXTlHe6XBzugmYgd4A4nW+k8Mixw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@eslint-community/regexpp": "^4.10.0", + "@typescript-eslint/scope-manager": "8.40.0", + "@typescript-eslint/type-utils": "8.40.0", + "@typescript-eslint/utils": "8.40.0", + "@typescript-eslint/visitor-keys": "8.40.0", + "graphemer": "^1.4.0", + "ignore": "^7.0.0", + "natural-compare": "^1.4.0", + "ts-api-utils": "^2.1.0" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependencies": { + "@typescript-eslint/parser": "^8.40.0", + "eslint": "^8.57.0 || ^9.0.0", + "typescript": ">=4.8.4 <6.0.0" + } + }, + "node_modules/@typescript-eslint/eslint-plugin/node_modules/ignore": { + "version": "7.0.5", + "resolved": "https://registry.npmjs.org/ignore/-/ignore-7.0.5.tgz", + "integrity": "sha512-Hs59xBNfUIunMFgWAbGX5cq6893IbWg4KnrjbYwX3tx0ztorVgTDA6B2sxf8ejHJ4wz8BqGUMYlnzNBer5NvGg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 4" + } + }, + "node_modules/@typescript-eslint/parser": { + "version": "8.40.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-8.40.0.tgz", + "integrity": "sha512-jCNyAuXx8dr5KJMkecGmZ8KI61KBUhkCob+SD+C+I5+Y1FWI2Y3QmY4/cxMCC5WAsZqoEtEETVhUiUMIGCf6Bw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@typescript-eslint/scope-manager": "8.40.0", + "@typescript-eslint/types": "8.40.0", + "@typescript-eslint/typescript-estree": "8.40.0", + "@typescript-eslint/visitor-keys": "8.40.0", + "debug": "^4.3.4" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependencies": { + "eslint": "^8.57.0 || ^9.0.0", + "typescript": ">=4.8.4 <6.0.0" + } + }, + "node_modules/@typescript-eslint/project-service": { + "version": "8.40.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/project-service/-/project-service-8.40.0.tgz", + "integrity": "sha512-/A89vz7Wf5DEXsGVvcGdYKbVM9F7DyFXj52lNYUDS1L9yJfqjW/fIp5PgMuEJL/KeqVTe2QSbXAGUZljDUpArw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@typescript-eslint/tsconfig-utils": "^8.40.0", + "@typescript-eslint/types": "^8.40.0", + "debug": "^4.3.4" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependencies": { + "typescript": ">=4.8.4 <6.0.0" + } + }, + "node_modules/@typescript-eslint/scope-manager": { + "version": "8.40.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-8.40.0.tgz", + "integrity": "sha512-y9ObStCcdCiZKzwqsE8CcpyuVMwRouJbbSrNuThDpv16dFAj429IkM6LNb1dZ2m7hK5fHyzNcErZf7CEeKXR4w==", + "dev": true, + "license": "MIT", + "dependencies": { + "@typescript-eslint/types": "8.40.0", + "@typescript-eslint/visitor-keys": "8.40.0" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + } + }, + "node_modules/@typescript-eslint/tsconfig-utils": { + "version": "8.40.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/tsconfig-utils/-/tsconfig-utils-8.40.0.tgz", + "integrity": "sha512-jtMytmUaG9d/9kqSl/W3E3xaWESo4hFDxAIHGVW/WKKtQhesnRIJSAJO6XckluuJ6KDB5woD1EiqknriCtAmcw==", + "dev": true, + "license": "MIT", + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependencies": { + "typescript": ">=4.8.4 <6.0.0" + } + }, + "node_modules/@typescript-eslint/type-utils": { + "version": "8.40.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-8.40.0.tgz", + "integrity": "sha512-eE60cK4KzAc6ZrzlJnflXdrMqOBaugeukWICO2rB0KNvwdIMaEaYiywwHMzA1qFpTxrLhN9Lp4E/00EgWcD3Ow==", + "dev": true, + "license": "MIT", + "dependencies": { + "@typescript-eslint/types": "8.40.0", + "@typescript-eslint/typescript-estree": "8.40.0", + "@typescript-eslint/utils": "8.40.0", + "debug": "^4.3.4", + "ts-api-utils": "^2.1.0" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependencies": { + "eslint": "^8.57.0 || ^9.0.0", + "typescript": ">=4.8.4 <6.0.0" + } + }, + "node_modules/@typescript-eslint/types": { + "version": "8.40.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-8.40.0.tgz", + "integrity": "sha512-ETdbFlgbAmXHyFPwqUIYrfc12ArvpBhEVgGAxVYSwli26dn8Ko+lIo4Su9vI9ykTZdJn+vJprs/0eZU0YMAEQg==", + "dev": true, + "license": "MIT", + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + } + }, + "node_modules/@typescript-eslint/typescript-estree": { + "version": "8.40.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-8.40.0.tgz", + "integrity": "sha512-k1z9+GJReVVOkc1WfVKs1vBrR5MIKKbdAjDTPvIK3L8De6KbFfPFt6BKpdkdk7rZS2GtC/m6yI5MYX+UsuvVYQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@typescript-eslint/project-service": "8.40.0", + "@typescript-eslint/tsconfig-utils": "8.40.0", + "@typescript-eslint/types": "8.40.0", + "@typescript-eslint/visitor-keys": "8.40.0", + "debug": "^4.3.4", + "fast-glob": "^3.3.2", + "is-glob": "^4.0.3", + "minimatch": "^9.0.4", + "semver": "^7.6.0", + "ts-api-utils": "^2.1.0" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependencies": { + "typescript": ">=4.8.4 <6.0.0" + } + }, + "node_modules/@typescript-eslint/typescript-estree/node_modules/brace-expansion": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.2.tgz", + "integrity": "sha512-Jt0vHyM+jmUBqojB7E1NIYadt0vI0Qxjxd2TErW94wDz+E2LAm5vKMXXwg6ZZBTHPuUlDgQHKXvjGBdfcF1ZDQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "balanced-match": "^1.0.0" + } + }, + "node_modules/@typescript-eslint/typescript-estree/node_modules/minimatch": { + "version": "9.0.5", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.5.tgz", + "integrity": "sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow==", + "dev": true, + "license": "ISC", + "dependencies": { + "brace-expansion": "^2.0.1" + }, + "engines": { + "node": ">=16 || 14 >=14.17" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/@typescript-eslint/typescript-estree/node_modules/semver": { + "version": "7.7.2", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.2.tgz", + "integrity": "sha512-RF0Fw+rO5AMf9MAyaRXI4AV0Ulj5lMHqVxxdSgiVbixSCXoEmmX/jk0CuJw4+3SqroYO9VoUh+HcuJivvtJemA==", + "dev": true, + "license": "ISC", + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/@typescript-eslint/utils": { + "version": "8.40.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-8.40.0.tgz", + "integrity": "sha512-Cgzi2MXSZyAUOY+BFwGs17s7ad/7L+gKt6Y8rAVVWS+7o6wrjeFN4nVfTpbE25MNcxyJ+iYUXflbs2xR9h4UBg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@eslint-community/eslint-utils": "^4.7.0", + "@typescript-eslint/scope-manager": "8.40.0", + "@typescript-eslint/types": "8.40.0", + "@typescript-eslint/typescript-estree": "8.40.0" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependencies": { + "eslint": "^8.57.0 || ^9.0.0", + "typescript": ">=4.8.4 <6.0.0" + } + }, + "node_modules/@typescript-eslint/visitor-keys": { + "version": "8.40.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-8.40.0.tgz", + "integrity": "sha512-8CZ47QwalyRjsypfwnbI3hKy5gJDPmrkLjkgMxhi0+DZZ2QNx2naS6/hWoVYUHU7LU2zleF68V9miaVZvhFfTA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@typescript-eslint/types": "8.40.0", + "eslint-visitor-keys": "^4.2.1" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + } + }, + "node_modules/@vitejs/plugin-react": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/@vitejs/plugin-react/-/plugin-react-5.0.1.tgz", + "integrity": "sha512-DE4UNaBXwtVoDJ0ccBdLVjFTWL70NRuWNCxEieTI3lrq9ORB9aOCQEKstwDXBl87NvFdbqh/p7eINGyj0BthJA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/core": "^7.28.3", + "@babel/plugin-transform-react-jsx-self": "^7.27.1", + "@babel/plugin-transform-react-jsx-source": "^7.27.1", + "@rolldown/pluginutils": "1.0.0-beta.32", + "@types/babel__core": "^7.20.5", + "react-refresh": "^0.17.0" + }, + "engines": { + "node": "^20.19.0 || >=22.12.0" + }, + "peerDependencies": { + "vite": "^4.2.0 || ^5.0.0 || ^6.0.0 || ^7.0.0" + } + }, + "node_modules/@yr/monotone-cubic-spline": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/@yr/monotone-cubic-spline/-/monotone-cubic-spline-1.0.3.tgz", + "integrity": "sha512-FQXkOta0XBSUPHndIKON2Y9JeQz5ZeMqLYZVVK93FliNBFm7LNMIZmY6FrMEB9XPcDbE2bekMbZD6kzDkxwYjA==", + "license": "MIT" + }, + "node_modules/acorn": { + "version": "8.15.0", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.15.0.tgz", + "integrity": "sha512-NZyJarBfL7nWwIq+FDL6Zp/yHEhePMNnnJ0y3qfieCrmNvYct8uvtiV41UvlSe6apAfk0fY1FbWx+NwfmpvtTg==", + "dev": true, + "license": "MIT", + "bin": { + "acorn": "bin/acorn" + }, + "engines": { + "node": ">=0.4.0" + } + }, + "node_modules/acorn-jsx": { + "version": "5.3.2", + "resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.3.2.tgz", + "integrity": "sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==", + "dev": true, + "license": "MIT", + "peerDependencies": { + "acorn": "^6.0.0 || ^7.0.0 || ^8.0.0" + } + }, + "node_modules/agent-base": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-6.0.2.tgz", + "integrity": "sha512-RZNwNclF7+MS/8bDg70amg32dyeZGZxiDuQmZxKLAlQjr3jGyLx+4Kkk58UO7D2QdgFIQCovuSuZESne6RG6XQ==", + "license": "MIT", + "dependencies": { + "debug": "4" + }, + "engines": { + "node": ">= 6.0.0" + } + }, + "node_modules/ajv": { + "version": "6.12.6", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", + "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", + "dev": true, + "license": "MIT", + "dependencies": { + "fast-deep-equal": "^3.1.1", + "fast-json-stable-stringify": "^2.0.0", + "json-schema-traverse": "^0.4.1", + "uri-js": "^4.2.2" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/epoberezkin" + } + }, + "node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "license": "MIT", + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/anymatch": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.3.tgz", + "integrity": "sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==", + "dev": true, + "license": "ISC", + "dependencies": { + "normalize-path": "^3.0.0", + "picomatch": "^2.0.4" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/apexcharts": { + "version": "4.7.0", + "resolved": "https://registry.npmjs.org/apexcharts/-/apexcharts-4.7.0.tgz", + "integrity": "sha512-iZSrrBGvVlL+nt2B1NpqfDuBZ9jX61X9I2+XV0hlYXHtTwhwLTHDKGXjNXAgFBDLuvSYCB/rq2nPWVPRv2DrGA==", + "license": "MIT", + "dependencies": { + "@svgdotjs/svg.draggable.js": "^3.0.4", + "@svgdotjs/svg.filter.js": "^3.0.8", + "@svgdotjs/svg.js": "^3.2.4", + "@svgdotjs/svg.resize.js": "^2.0.2", + "@svgdotjs/svg.select.js": "^4.0.1", + "@yr/monotone-cubic-spline": "^1.0.3" + } + }, + "node_modules/apextree": { + "version": "1.4.2", + "resolved": "https://registry.npmjs.org/apextree/-/apextree-1.4.2.tgz", + "integrity": "sha512-svRWJG8wHXTNivLXsOgXvlZnsuKQM69jwlO439cd0U4zohvYGxnKpdXrye4C30dm46x0FNibSjkHmmxeDj5Akg==", + "license": "See LICENSE in LICENSE", + "dependencies": { + "@dagrejs/dagre": "^1.1.4", + "@svgdotjs/svg.js": "^3.2.0", + "@svgdotjs/svg.panzoom.js": "^2.1.2" + } + }, + "node_modules/argparse": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", + "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==", + "dev": true, + "license": "Python-2.0" + }, + "node_modules/asynckit": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz", + "integrity": "sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==", + "license": "MIT" + }, + "node_modules/attr-accept": { + "version": "2.2.5", + "resolved": "https://registry.npmjs.org/attr-accept/-/attr-accept-2.2.5.tgz", + "integrity": "sha512-0bDNnY/u6pPwHDMoF0FieU354oBi0a8rD9FcsLwzcGWbc8KS8KPIi7y+s13OlVY+gMWc/9xEMUgNE6Qm8ZllYQ==", + "license": "MIT", + "engines": { + "node": ">=4" + } + }, + "node_modules/axios": { + "version": "1.20.0", + "resolved": "https://registry.npmjs.org/axios/-/axios-1.20.0.tgz", + "integrity": "sha512-r8aOh8j9cGKpgQAqpzrUHnSIc6a59Y3Xf/cv8sy1DrHCkZHzQGEuoq1tARk6qSyDdtQGSDgpb9kFlruzPvrgwg==", + "license": "MIT", + "dependencies": { + "follow-redirects": "^1.16.0", + "form-data": "^4.0.6", + "https-proxy-agent": "^5.0.1", + "proxy-from-env": "^2.1.0" + } + }, + "node_modules/babel-plugin-macros": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/babel-plugin-macros/-/babel-plugin-macros-3.1.0.tgz", + "integrity": "sha512-Cg7TFGpIr01vOQNODXOOaGz2NpCU5gl8x1qJFbb6hbZxR7XrcE2vtbAsTAbJ7/xwJtUuJEw8K8Zr/AE0LHlesg==", + "license": "MIT", + "dependencies": { + "@babel/runtime": "^7.12.5", + "cosmiconfig": "^7.0.0", + "resolve": "^1.19.0" + }, + "engines": { + "node": ">=10", + "npm": ">=6" + } + }, + "node_modules/balanced-match": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", + "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==", + "dev": true, + "license": "MIT" + }, + "node_modules/base64-arraybuffer": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/base64-arraybuffer/-/base64-arraybuffer-1.0.2.tgz", + "integrity": "sha512-I3yl4r9QB5ZRY3XuJVEPfc2XhZO6YweFPI+UovAzn+8/hb3oJ6lnysaFcjVpkCPfVWFUDvoZ8kmVDP7WyRtYtQ==", + "license": "MIT", + "engines": { + "node": ">= 0.6.0" + } + }, + "node_modules/base64-js": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.3.1.tgz", + "integrity": "sha512-mLQ4i2QO1ytvGWFWmcngKO//JXAQueZvwEKtjgQFM4jIK0kU+ytMfplL8j+n5mspOfjHwoAg+9yhb7BwAHm36g==", + "license": "MIT" + }, + "node_modules/binary-extensions": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.3.0.tgz", + "integrity": "sha512-Ceh+7ox5qe7LJuLHoY0feh3pHuUDHAcRUeyL2VYghZwfpkNIy/+8Ocg0a3UuSoYzavmylwuLWQOf3hl0jjMMIw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/bl": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/bl/-/bl-4.1.0.tgz", + "integrity": "sha512-1W07cM9gS6DcLperZfFSj+bWLtaPGSOHWhPiGzXmvVJbRLdG82sH/Kn8EtW1VqWVA54AKf2h5k5BbnIbwF3h6w==", + "license": "MIT", + "optional": true, + "dependencies": { + "buffer": "^5.5.0", + "inherits": "^2.0.4", + "readable-stream": "^3.4.0" + } + }, + "node_modules/bl/node_modules/readable-stream": { + "version": "3.6.2", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.2.tgz", + "integrity": "sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==", + "license": "MIT", + "optional": true, + "dependencies": { + "inherits": "^2.0.3", + "string_decoder": "^1.1.1", + "util-deprecate": "^1.0.1" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/bootstrap": { + "version": "5.3.7", + "resolved": "https://registry.npmjs.org/bootstrap/-/bootstrap-5.3.7.tgz", + "integrity": "sha512-7KgiD8UHjfcPBHEpDNg+zGz8L3LqR3GVwqZiBRFX04a1BCArZOz1r2kjly2HQ0WokqTO0v1nF+QAt8dsW4lKlw==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/twbs" + }, + { + "type": "opencollective", + "url": "https://opencollective.com/bootstrap" + } + ], + "license": "MIT", + "peerDependencies": { + "@popperjs/core": "^2.11.8" + } + }, + "node_modules/brace-expansion": { + "version": "1.1.12", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.12.tgz", + "integrity": "sha512-9T9UjW3r0UW5c1Q7GTwllptXwhvYmEzFhzMfZ9H7FQWt+uZePjZPjBP/W1ZEyZ1twGWom5/56TF4lPcqjnDHcg==", + "dev": true, + "license": "MIT", + "dependencies": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" + } + }, + "node_modules/braces": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.3.tgz", + "integrity": "sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA==", + "dev": true, + "license": "MIT", + "dependencies": { + "fill-range": "^7.1.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/brotli": { + "version": "1.3.3", + "resolved": "https://registry.npmjs.org/brotli/-/brotli-1.3.3.tgz", + "integrity": "sha512-oTKjJdShmDuGW94SyyaoQvAjf30dZaHnjJ8uAF+u2/vGJkJbJPJAT1gDiOJP5v1Zb6f9KEyW/1HpuaWIXtGHPg==", + "license": "MIT", + "dependencies": { + "base64-js": "^1.1.2" + } + }, + "node_modules/browserslist": { + "version": "4.25.3", + "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.25.3.tgz", + "integrity": "sha512-cDGv1kkDI4/0e5yON9yM5G/0A5u8sf5TnmdX5C9qHzI9PPu++sQ9zjm1k9NiOrf3riY4OkK0zSGqfvJyJsgCBQ==", + "dev": true, + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/browserslist" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/browserslist" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "license": "MIT", + "dependencies": { + "caniuse-lite": "^1.0.30001735", + "electron-to-chromium": "^1.5.204", + "node-releases": "^2.0.19", + "update-browserslist-db": "^1.1.3" + }, + "bin": { + "browserslist": "cli.js" + }, + "engines": { + "node": "^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7" + } + }, + "node_modules/buffer": { + "version": "5.7.1", + "resolved": "https://registry.npmjs.org/buffer/-/buffer-5.7.1.tgz", + "integrity": "sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "license": "MIT", + "optional": true, + "dependencies": { + "base64-js": "^1.3.1", + "ieee754": "^1.1.13" + } + }, + "node_modules/call-bind": { + "version": "1.0.8", + "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.8.tgz", + "integrity": "sha512-oKlSFMcMwpUg2ednkhQ454wfWiU/ul3CkJe/PEHcTKuiX6RpbehUiFMXu13HalGZxfUwCQzZG747YXBn1im9ww==", + "license": "MIT", + "dependencies": { + "call-bind-apply-helpers": "^1.0.0", + "es-define-property": "^1.0.0", + "get-intrinsic": "^1.2.4", + "set-function-length": "^1.2.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/call-bind-apply-helpers": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/call-bind-apply-helpers/-/call-bind-apply-helpers-1.0.2.tgz", + "integrity": "sha512-Sp1ablJ0ivDkSzjcaJdxEunN5/XvksFJ2sMBFfq6x0ryhQV/2b/KwFe21cMpmHtPOSij8K99/wSfoEuTObmuMQ==", + "license": "MIT", + "dependencies": { + "es-errors": "^1.3.0", + "function-bind": "^1.1.2" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/call-bound": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/call-bound/-/call-bound-1.0.4.tgz", + "integrity": "sha512-+ys997U96po4Kx/ABpBCqhA9EuxJaQWDQg7295H4hBphv3IZg0boBKuwYpt4YXp6MZ5AmZQnU/tyMTlRpaSejg==", + "license": "MIT", + "dependencies": { + "call-bind-apply-helpers": "^1.0.2", + "get-intrinsic": "^1.3.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/callsites": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz", + "integrity": "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==", + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/caniuse-lite": { + "version": "1.0.30001737", + "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001737.tgz", + "integrity": "sha512-BiloLiXtQNrY5UyF0+1nSJLXUENuhka2pzy2Fx5pGxqavdrxSCW4U6Pn/PoG3Efspi2frRbHpBV2XsrPE6EDlw==", + "dev": true, + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/browserslist" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/caniuse-lite" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "license": "CC-BY-4.0" + }, + "node_modules/canvas": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/canvas/-/canvas-3.2.0.tgz", + "integrity": "sha512-jk0GxrLtUEmW/TmFsk2WghvgHe8B0pxGilqCL21y8lHkPUGa6FTsnCNtHPOzT8O3y+N+m3espawV80bbBlgfTA==", + "hasInstallScript": true, + "license": "MIT", + "optional": true, + "dependencies": { + "node-addon-api": "^7.0.0", + "prebuild-install": "^7.1.3" + }, + "engines": { + "node": "^18.12.0 || >= 20.9.0" + } + }, + "node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dev": true, + "license": "MIT", + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/chart.js": { + "version": "4.5.0", + "resolved": "https://registry.npmjs.org/chart.js/-/chart.js-4.5.0.tgz", + "integrity": "sha512-aYeC/jDgSEx8SHWZvANYMioYMZ2KX02W6f6uVfyteuCGcadDLcYVHdfdygsTQkQ4TKn5lghoojAsPj5pu0SnvQ==", + "license": "MIT", + "dependencies": { + "@kurkle/color": "^0.3.0" + }, + "engines": { + "pnpm": ">=8" + } + }, + "node_modules/chokidar": { + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.6.0.tgz", + "integrity": "sha512-7VT13fmjotKpGipCW9JEQAusEPE+Ei8nl6/g4FBAmIm0GOOLMua9NDDo/DWp0ZAxCr3cPq5ZpBqmPAQgDda2Pw==", + "dev": true, + "license": "MIT", + "dependencies": { + "anymatch": "~3.1.2", + "braces": "~3.0.2", + "glob-parent": "~5.1.2", + "is-binary-path": "~2.1.0", + "is-glob": "~4.0.1", + "normalize-path": "~3.0.0", + "readdirp": "~3.6.0" + }, + "engines": { + "node": ">= 8.10.0" + }, + "funding": { + "url": "https://paulmillr.com/funding/" + }, + "optionalDependencies": { + "fsevents": "~2.3.2" + } + }, + "node_modules/chokidar/node_modules/glob-parent": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", + "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", + "dev": true, + "license": "ISC", + "dependencies": { + "is-glob": "^4.0.1" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/chownr": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/chownr/-/chownr-1.1.4.tgz", + "integrity": "sha512-jJ0bqzaylmJtVnNgzTeSOs8DPavpbYgEr/b0YL8/2GO3xJEhInFmhKMUnEJQjZumK7KXGFhUy89PrsJWlakBVg==", + "license": "ISC", + "optional": true + }, + "node_modules/classnames": { + "version": "2.5.1", + "resolved": "https://registry.npmjs.org/classnames/-/classnames-2.5.1.tgz", + "integrity": "sha512-saHYOzhIQs6wy2sVxTM6bUDsQO4F50V9RQ22qBpEdCW+I+/Wmke2HOl6lS6dTpdxVhb88/I6+Hs+438c3lfUow==", + "license": "MIT" + }, + "node_modules/clone": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/clone/-/clone-1.0.4.tgz", + "integrity": "sha512-JQHZ2QMW6l3aH/j6xCqQThY/9OH4D/9ls34cgkUBiEeocRTU04tHfKPBsUK1PqZCUQM7GiA0IIXJSuXHI64Kbg==", + "license": "MIT", + "engines": { + "node": ">=0.8" + } + }, + "node_modules/clsx": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/clsx/-/clsx-2.1.1.tgz", + "integrity": "sha512-eYm0QWBtUrBWZWG0d386OGAw16Z995PiOVo2B7bjWSbHedGl5e0ZWaq65kOGgUSNesEIDkB9ISbTg/JK9dhCZA==", + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true, + "license": "MIT" + }, + "node_modules/combined-stream": { + "version": "1.0.8", + "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz", + "integrity": "sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==", + "license": "MIT", + "dependencies": { + "delayed-stream": "~1.0.0" + }, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/compute-scroll-into-view": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/compute-scroll-into-view/-/compute-scroll-into-view-3.1.1.tgz", + "integrity": "sha512-VRhuHOLoKYOy4UbilLbUzbYg93XLjv2PncJC50EuTWPA3gaja1UjBsUP/D/9/juV3vQFr6XBEzn9KCAHdUvOHw==", + "license": "MIT" + }, + "node_modules/concat-map": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", + "integrity": "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==", + "dev": true, + "license": "MIT" + }, + "node_modules/convert-source-map": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-2.0.0.tgz", + "integrity": "sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg==", + "dev": true, + "license": "MIT" + }, + "node_modules/cookie": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/cookie/-/cookie-1.0.2.tgz", + "integrity": "sha512-9Kr/j4O16ISv8zBBhJoi4bXOYNTkFLOqSL3UDB0njXxCXNezjeyVrJyGOWtgfs/q2km1gwBcfH8q1yEGoMYunA==", + "license": "MIT", + "engines": { + "node": ">=18" + } + }, + "node_modules/core-util-is": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.3.tgz", + "integrity": "sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ==", + "license": "MIT" + }, + "node_modules/cosmiconfig": { + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-7.1.0.tgz", + "integrity": "sha512-AdmX6xUzdNASswsFtmwSt7Vj8po9IuqXm0UXz7QKPuEUmPB4XyjGfaAr2PSuELMwkRMVH1EpIkX5bTZGRB3eCA==", + "license": "MIT", + "dependencies": { + "@types/parse-json": "^4.0.0", + "import-fresh": "^3.2.1", + "parse-json": "^5.0.0", + "path-type": "^4.0.0", + "yaml": "^1.10.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/cosmiconfig/node_modules/yaml": { + "version": "1.10.2", + "resolved": "https://registry.npmjs.org/yaml/-/yaml-1.10.2.tgz", + "integrity": "sha512-r3vXyErRCYJ7wg28yvBY5VSoAF8ZvlcW9/BwUzEtUsjvX/DKs24dIkuwjtuprwJJHsbyUbLApepYTR1BN4uHrg==", + "license": "ISC", + "engines": { + "node": ">= 6" + } + }, + "node_modules/countup.js": { + "version": "2.9.0", + "resolved": "https://registry.npmjs.org/countup.js/-/countup.js-2.9.0.tgz", + "integrity": "sha512-llqrvyXztRFPp6+i8jx25phHWcVWhrHO4Nlt0uAOSKHB8778zzQswa4MU3qKBvkXfJKftRYFJuVHez67lyKdHg==", + "license": "MIT" + }, + "node_modules/cross-spawn": { + "version": "7.0.6", + "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.6.tgz", + "integrity": "sha512-uV2QOWP2nWzsy2aMp8aRibhi9dlzF5Hgh5SHaB9OiTGEyDTiJJyx0uy51QXdyWbtAHNua4XJzUKca3OzKUd3vA==", + "dev": true, + "license": "MIT", + "dependencies": { + "path-key": "^3.1.0", + "shebang-command": "^2.0.0", + "which": "^2.0.1" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/crypto-js": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/crypto-js/-/crypto-js-4.2.0.tgz", + "integrity": "sha512-KALDyEYgpY+Rlob/iriUtjV6d5Eq+Y191A5g4UqLAi8CyGP9N1+FdVbkc1SxKc2r4YAYqG8JzO2KGL+AizD70Q==", + "license": "MIT" + }, + "node_modules/css-box-model": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/css-box-model/-/css-box-model-1.2.1.tgz", + "integrity": "sha512-a7Vr4Q/kd/aw96bnJG332W9V9LkJO69JRcaCYDUqjp6/z0w6VcZjgAcTbgFxEPfBgdnAwlh3iwu+hLopa+flJw==", + "license": "MIT", + "dependencies": { + "tiny-invariant": "^1.0.6" + } + }, + "node_modules/css-line-break": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/css-line-break/-/css-line-break-2.1.0.tgz", + "integrity": "sha512-FHcKFCZcAha3LwfVBhCQbW2nCNbkZXn7KVUJcsT5/P8YmfsVja0FMPJr0B903j/E69HUphKiV9iQArX8SDYA4w==", + "license": "MIT", + "dependencies": { + "utrie": "^1.0.2" + } + }, + "node_modules/csstype": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/csstype/-/csstype-3.1.3.tgz", + "integrity": "sha512-M1uQkMl8rQK/szD0LNhtqxIPLpimGm8sOBwU7lLnCpSbTyY3yeU1Vc7l4KT5zT4s/yOxHH5O7tIuuLOCnLADRw==", + "license": "MIT" + }, + "node_modules/datatables.net": { + "version": "2.3.3", + "resolved": "https://registry.npmjs.org/datatables.net/-/datatables.net-2.3.3.tgz", + "integrity": "sha512-SWL3za6nheY6gdoiLgCc++tYmxbwrmv2bjrEiII9rXBWXXSbOZct6pjR3FueMVRM5jmt7pQcXiGovfuFDnutQg==", + "license": "MIT", + "dependencies": { + "jquery": ">=1.7" + } + }, + "node_modules/datatables.net-bs5": { + "version": "2.3.3", + "resolved": "https://registry.npmjs.org/datatables.net-bs5/-/datatables.net-bs5-2.3.3.tgz", + "integrity": "sha512-IPtC57k3KyZaLzIYTHies23Cm2zqaKfD6lkxy/aOAUUAtsg35l53VqNY9y84AEySYG3YLghMHVBvl2ckUhvm0A==", + "license": "MIT", + "dependencies": { + "datatables.net": "2.3.3", + "jquery": ">=1.7" + } + }, + "node_modules/datatables.net-buttons": { + "version": "3.2.4", + "resolved": "https://registry.npmjs.org/datatables.net-buttons/-/datatables.net-buttons-3.2.4.tgz", + "integrity": "sha512-anA39/R0kpHA2DOwqEHy/ZMXD5vf4tWmyNO0BnO0kJG7AFNvGTUCWBnBifXYg3G64U6JYpYY+MuTFKIB1/ZMTQ==", + "license": "MIT", + "dependencies": { + "datatables.net": "^2", + "jquery": ">=1.7" + } + }, + "node_modules/datatables.net-buttons-bs5": { + "version": "3.2.4", + "resolved": "https://registry.npmjs.org/datatables.net-buttons-bs5/-/datatables.net-buttons-bs5-3.2.4.tgz", + "integrity": "sha512-yX8Ia32P1D9L02XWjisA6a9fFp0LgmzpIcvf/4ty+QG5/qj1tOOqWgsXsxxIY2Uj918WmLJS6VaJabRAMoAqHA==", + "license": "MIT", + "dependencies": { + "datatables.net-bs5": "^2", + "datatables.net-buttons": "3.2.4", + "jquery": ">=1.7" + } + }, + "node_modules/datatables.net-fixedheader": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/datatables.net-fixedheader/-/datatables.net-fixedheader-4.0.3.tgz", + "integrity": "sha512-Mzx6MT7/+aaLQ3fRlOaFPJQFMOYorsSx2PvD/Hh3DAv6O/Oq8UPQsJ84I16feAqkPqoDdtP/eaXuUKH+NYDfVQ==", + "license": "MIT", + "dependencies": { + "datatables.net": "^2", + "jquery": ">=1.7" + } + }, + "node_modules/datatables.net-fixedheader-bs5": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/datatables.net-fixedheader-bs5/-/datatables.net-fixedheader-bs5-4.0.3.tgz", + "integrity": "sha512-FaYQe2RakMcBEDpicmJy47lFoxVucPI0hg8EvsfGsDdkpIEcvpOdnxfCOJNyexyLg9zkfBnPgxLitEKAYyUdrw==", + "license": "MIT", + "dependencies": { + "datatables.net-bs5": "^2", + "datatables.net-fixedheader": "4.0.3", + "jquery": ">=1.7" + } + }, + "node_modules/datatables.net-react": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/datatables.net-react/-/datatables.net-react-1.0.1.tgz", + "integrity": "sha512-RbLaS87ss3hZjLKfymUpj9UJ7KkQQ57oG2lbcqPVki67x3emtyaDHY8NOCYAXPU/BHYYRNR2u6y7fqffYOV+GA==", + "license": "MIT" + }, + "node_modules/datatables.net-responsive": { + "version": "3.0.6", + "resolved": "https://registry.npmjs.org/datatables.net-responsive/-/datatables.net-responsive-3.0.6.tgz", + "integrity": "sha512-GHVgU7k7/ST7F/z1/0ieaJiNghrO1mgH8PbikAaL9MH1pw+GMcCuL5sFaFzIyMRzZz7tnrmVnjrkNX+W01VzhA==", + "license": "MIT", + "dependencies": { + "datatables.net": "^2", + "jquery": ">=1.7" + } + }, + "node_modules/datatables.net-responsive-bs5": { + "version": "3.0.6", + "resolved": "https://registry.npmjs.org/datatables.net-responsive-bs5/-/datatables.net-responsive-bs5-3.0.6.tgz", + "integrity": "sha512-FQNYSisTfShgcur5mBTFgpaqmtlM9fDCDAMtkqU5YyZldvR+vlMW0rJ60hSKHN9B+aAA3tIjDZuR1U3+VvO6ag==", + "license": "MIT", + "dependencies": { + "datatables.net-bs5": "^2", + "datatables.net-responsive": "3.0.6", + "jquery": ">=1.7" + } + }, + "node_modules/datatables.net-select": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/datatables.net-select/-/datatables.net-select-3.1.0.tgz", + "integrity": "sha512-DqXX6kYsDCjMtfiFsAVerYRI3HoGl3LOouJTkXRbp5E9EnWUHbDnmLPnPBirqqTD0j7GzJbi6/cIXNin8Wh2Nw==", + "license": "MIT", + "dependencies": { + "datatables.net": "^2", + "jquery": ">=1.7" + } + }, + "node_modules/datatables.net-select-bs5": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/datatables.net-select-bs5/-/datatables.net-select-bs5-3.1.0.tgz", + "integrity": "sha512-kZLQqOaDT6qDzOn5PuptSAAkFva3JmIfoJiYdDqBMK62n9L59eJDOYYyCd42QJSUdF3DbpMtbpQzhS5Rl5lm6g==", + "license": "MIT", + "dependencies": { + "datatables.net-bs5": "^2", + "datatables.net-select": "3.1.0", + "jquery": ">=1.7" + } + }, + "node_modules/date-fns": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/date-fns/-/date-fns-4.1.0.tgz", + "integrity": "sha512-Ukq0owbQXxa/U3EGtsdVBkR1w7KOQ5gIBqdH2hkvknzZPYvBxb/aa6E8L7tmjFtkwZBu3UXBbjIgPo/Ez4xaNg==", + "license": "MIT", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/kossnocorp" + } + }, + "node_modules/date-fns-jalali": { + "version": "4.1.0-0", + "resolved": "https://registry.npmjs.org/date-fns-jalali/-/date-fns-jalali-4.1.0-0.tgz", + "integrity": "sha512-hTIP/z+t+qKwBDcmmsnmjWTduxCg+5KfdqWQvb2X/8C9+knYY6epN/pfxdDuyVlSVeFz0sM5eEfwIUQ70U4ckg==", + "license": "MIT" + }, + "node_modules/dayjs": { + "version": "1.11.13", + "resolved": "https://registry.npmjs.org/dayjs/-/dayjs-1.11.13.tgz", + "integrity": "sha512-oaMBel6gjolK862uaPQOVTA7q3TZhuSvuMQAAglQDOWYO9A91IrAOUJEyKVlqJlHE0vq5p5UXxzdPfMH/x6xNg==", + "license": "MIT" + }, + "node_modules/debug": { + "version": "4.4.1", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.4.1.tgz", + "integrity": "sha512-KcKCqiftBJcZr++7ykoDIEwSa3XWowTfNPo92BYxjXiyYEVrUQh2aLyhxBCwww+heortUFxEJYcRzosstTEBYQ==", + "license": "MIT", + "dependencies": { + "ms": "^2.1.3" + }, + "engines": { + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } + } + }, + "node_modules/decompress-response": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/decompress-response/-/decompress-response-6.0.0.tgz", + "integrity": "sha512-aW35yZM6Bb/4oJlZncMH2LCoZtJXTRxES17vE3hoRiowU2kWHaJKFkSBDnDR+cm9J+9QhXmREyIfv0pji9ejCQ==", + "license": "MIT", + "optional": true, + "dependencies": { + "mimic-response": "^3.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/deep-equal": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/deep-equal/-/deep-equal-1.1.2.tgz", + "integrity": "sha512-5tdhKF6DbU7iIzrIOa1AOUt39ZRm13cmL1cGEh//aqR8x9+tNfbywRf0n5FD/18OKMdo7DNEtrX2t22ZAkI+eg==", + "license": "MIT", + "dependencies": { + "is-arguments": "^1.1.1", + "is-date-object": "^1.0.5", + "is-regex": "^1.1.4", + "object-is": "^1.1.5", + "object-keys": "^1.1.1", + "regexp.prototype.flags": "^1.5.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/deep-extend": { + "version": "0.6.0", + "resolved": "https://registry.npmjs.org/deep-extend/-/deep-extend-0.6.0.tgz", + "integrity": "sha512-LOHxIOaPYdHlJRtCQfDIVZtfw/ufM8+rVj649RIHzcm/vGwQRXFt6OPqIFWsm2XEMrNIEtWR64sY1LEKD2vAOA==", + "license": "MIT", + "optional": true, + "engines": { + "node": ">=4.0.0" + } + }, + "node_modules/deep-is": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.4.tgz", + "integrity": "sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==", + "dev": true, + "license": "MIT" + }, + "node_modules/define-data-property": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/define-data-property/-/define-data-property-1.1.4.tgz", + "integrity": "sha512-rBMvIzlpA8v6E+SJZoo++HAYqsLrkg7MSfIinMPFhmkorw7X+dOXVJQs+QT69zGkzMyfDnIMN2Wid1+NbL3T+A==", + "license": "MIT", + "dependencies": { + "es-define-property": "^1.0.0", + "es-errors": "^1.3.0", + "gopd": "^1.0.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/define-properties": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.2.1.tgz", + "integrity": "sha512-8QmQKqEASLd5nx0U1B1okLElbUuuttJ/AnYmRXbbbGDWh6uS208EjD4Xqq/I9wK7u0v6O08XhTWnt5XtEbR6Dg==", + "license": "MIT", + "dependencies": { + "define-data-property": "^1.0.1", + "has-property-descriptors": "^1.0.0", + "object-keys": "^1.1.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/delayed-stream": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz", + "integrity": "sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ==", + "license": "MIT", + "engines": { + "node": ">=0.4.0" + } + }, + "node_modules/dequal": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/dequal/-/dequal-2.0.3.tgz", + "integrity": "sha512-0je+qPKHEMohvfRTCEo3CrPG6cAzAYgmzKyxRiYSSDkS6eGJdyVJm7WaYA5ECaAD9wLB2T4EEeymA5aFVcYXCA==", + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/detect-libc": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/detect-libc/-/detect-libc-2.0.4.tgz", + "integrity": "sha512-3UDv+G9CsCKO1WKMGw9fwq/SWJYbI0c5Y7LU1AXYoDdbhE2AHQ6N6Nb34sG8Fj7T5APy8qXDCKuuIHd1BR0tVA==", + "license": "Apache-2.0", + "optional": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/dfa": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/dfa/-/dfa-1.2.0.tgz", + "integrity": "sha512-ED3jP8saaweFTjeGX8HQPjeC1YYyZs98jGNZx6IiBvxW7JG5v492kamAQB3m2wop07CvU/RQmzcKr6bgcC5D/Q==", + "license": "MIT" + }, + "node_modules/dnd-core": { + "version": "14.0.1", + "resolved": "https://registry.npmjs.org/dnd-core/-/dnd-core-14.0.1.tgz", + "integrity": "sha512-+PVS2VPTgKFPYWo3vAFEA8WPbTf7/xo43TifH9G8S1KqnrQu0o77A3unrF5yOugy4mIz7K5wAVFHUcha7wsz6A==", + "license": "MIT", + "dependencies": { + "@react-dnd/asap": "^4.0.0", + "@react-dnd/invariant": "^2.0.0", + "redux": "^4.1.1" + } + }, + "node_modules/dnd-core/node_modules/redux": { + "version": "4.2.1", + "resolved": "https://registry.npmjs.org/redux/-/redux-4.2.1.tgz", + "integrity": "sha512-LAUYz4lc+Do8/g7aeRa8JkyDErK6ekstQaqWQrNRW//MY1TvCEpMtpTWvlQ+FPbWCx+Xixu/6SHt5N0HR+SB4w==", + "license": "MIT", + "dependencies": { + "@babel/runtime": "^7.9.2" + } + }, + "node_modules/dom-helpers": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/dom-helpers/-/dom-helpers-5.2.1.tgz", + "integrity": "sha512-nRCa7CK3VTrM2NmGkIy4cbK7IZlgBE/PYMn55rrXefr5xXDP0LdtfPnblFDoVdcAfslJ7or6iqAUnx0CCGIWQA==", + "license": "MIT", + "dependencies": { + "@babel/runtime": "^7.8.7", + "csstype": "^3.0.2" + } + }, + "node_modules/dunder-proto": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/dunder-proto/-/dunder-proto-1.0.1.tgz", + "integrity": "sha512-KIN/nDJBQRcXw0MLVhZE9iQHmG68qAVIBg9CqmUYjmQIhgij9U5MFvrqkUL5FbtyyzZuOeOt0zdeRe4UY7ct+A==", + "license": "MIT", + "dependencies": { + "call-bind-apply-helpers": "^1.0.1", + "es-errors": "^1.3.0", + "gopd": "^1.2.0" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/electron-to-chromium": { + "version": "1.5.208", + "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.5.208.tgz", + "integrity": "sha512-ozZyibehoe7tOhNaf16lKmljVf+3npZcJIEbJRVftVsmAg5TeA1mGS9dVCZzOwr2xT7xK15V0p7+GZqSPgkuPg==", + "dev": true, + "license": "ISC" + }, + "node_modules/end-of-stream": { + "version": "1.4.5", + "resolved": "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.5.tgz", + "integrity": "sha512-ooEGc6HP26xXq/N+GCGOT0JKCLDGrq2bQUZrQ7gyrJiZANJ/8YDTxTpQBXGMn+WbIQXNVpyWymm7KYVICQnyOg==", + "license": "MIT", + "optional": true, + "dependencies": { + "once": "^1.4.0" + } + }, + "node_modules/error-ex": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/error-ex/-/error-ex-1.3.2.tgz", + "integrity": "sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==", + "license": "MIT", + "dependencies": { + "is-arrayish": "^0.2.1" + } + }, + "node_modules/es-define-property": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/es-define-property/-/es-define-property-1.0.1.tgz", + "integrity": "sha512-e3nRfgfUZ4rNGL232gUgX06QNyyez04KdjFrF+LTRoOXmrOgFKDg4BCdsjW8EnT69eqdYGmRpJwiPVYNrCaW3g==", + "license": "MIT", + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/es-errors": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/es-errors/-/es-errors-1.3.0.tgz", + "integrity": "sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw==", + "license": "MIT", + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/es-object-atoms": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/es-object-atoms/-/es-object-atoms-1.1.1.tgz", + "integrity": "sha512-FGgH2h8zKNim9ljj7dankFPcICIK9Cp5bm+c2gQSYePhpaG5+esrLODihIorn+Pe6FGJzWhXQotPv73jTaldXA==", + "license": "MIT", + "dependencies": { + "es-errors": "^1.3.0" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/es-set-tostringtag": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/es-set-tostringtag/-/es-set-tostringtag-2.1.0.tgz", + "integrity": "sha512-j6vWzfrGVfyXxge+O0x5sh6cvxAog0a/4Rdd2K36zCMV5eJ+/+tOAngRO8cODMNWbVRdVlmGZQL2YS3yR8bIUA==", + "license": "MIT", + "dependencies": { + "es-errors": "^1.3.0", + "get-intrinsic": "^1.2.6", + "has-tostringtag": "^1.0.2", + "hasown": "^2.0.2" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/esbuild": { + "version": "0.25.9", + "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.25.9.tgz", + "integrity": "sha512-CRbODhYyQx3qp7ZEwzxOk4JBqmD/seJrzPa/cGjY1VtIn5E09Oi9/dB4JwctnfZ8Q8iT7rioVv5k/FNT/uf54g==", + "dev": true, + "hasInstallScript": true, + "license": "MIT", + "bin": { + "esbuild": "bin/esbuild" + }, + "engines": { + "node": ">=18" + }, + "optionalDependencies": { + "@esbuild/aix-ppc64": "0.25.9", + "@esbuild/android-arm": "0.25.9", + "@esbuild/android-arm64": "0.25.9", + "@esbuild/android-x64": "0.25.9", + "@esbuild/darwin-arm64": "0.25.9", + "@esbuild/darwin-x64": "0.25.9", + "@esbuild/freebsd-arm64": "0.25.9", + "@esbuild/freebsd-x64": "0.25.9", + "@esbuild/linux-arm": "0.25.9", + "@esbuild/linux-arm64": "0.25.9", + "@esbuild/linux-ia32": "0.25.9", + "@esbuild/linux-loong64": "0.25.9", + "@esbuild/linux-mips64el": "0.25.9", + "@esbuild/linux-ppc64": "0.25.9", + "@esbuild/linux-riscv64": "0.25.9", + "@esbuild/linux-s390x": "0.25.9", + "@esbuild/linux-x64": "0.25.9", + "@esbuild/netbsd-arm64": "0.25.9", + "@esbuild/netbsd-x64": "0.25.9", + "@esbuild/openbsd-arm64": "0.25.9", + "@esbuild/openbsd-x64": "0.25.9", + "@esbuild/openharmony-arm64": "0.25.9", + "@esbuild/sunos-x64": "0.25.9", + "@esbuild/win32-arm64": "0.25.9", + "@esbuild/win32-ia32": "0.25.9", + "@esbuild/win32-x64": "0.25.9" + } + }, + "node_modules/escalade": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.2.0.tgz", + "integrity": "sha512-WUj2qlxaQtO4g6Pq5c29GTcWGDyd8itL8zTlipgECz3JesAiiOKotd8JU6otB3PACgG6xkJUyVhboMS+bje/jA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/escape-string-regexp": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz", + "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==", + "license": "MIT", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/eslint": { + "version": "9.34.0", + "resolved": "https://registry.npmjs.org/eslint/-/eslint-9.34.0.tgz", + "integrity": "sha512-RNCHRX5EwdrESy3Jc9o8ie8Bog+PeYvvSR8sDGoZxNFTvZ4dlxUB3WzQ3bQMztFrSRODGrLLj8g6OFuGY/aiQg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@eslint-community/eslint-utils": "^4.2.0", + "@eslint-community/regexpp": "^4.12.1", + "@eslint/config-array": "^0.21.0", + "@eslint/config-helpers": "^0.3.1", + "@eslint/core": "^0.15.2", + "@eslint/eslintrc": "^3.3.1", + "@eslint/js": "9.34.0", + "@eslint/plugin-kit": "^0.3.5", + "@humanfs/node": "^0.16.6", + "@humanwhocodes/module-importer": "^1.0.1", + "@humanwhocodes/retry": "^0.4.2", + "@types/estree": "^1.0.6", + "@types/json-schema": "^7.0.15", + "ajv": "^6.12.4", + "chalk": "^4.0.0", + "cross-spawn": "^7.0.6", + "debug": "^4.3.2", + "escape-string-regexp": "^4.0.0", + "eslint-scope": "^8.4.0", + "eslint-visitor-keys": "^4.2.1", + "espree": "^10.4.0", + "esquery": "^1.5.0", + "esutils": "^2.0.2", + "fast-deep-equal": "^3.1.3", + "file-entry-cache": "^8.0.0", + "find-up": "^5.0.0", + "glob-parent": "^6.0.2", + "ignore": "^5.2.0", + "imurmurhash": "^0.1.4", + "is-glob": "^4.0.0", + "json-stable-stringify-without-jsonify": "^1.0.1", + "lodash.merge": "^4.6.2", + "minimatch": "^3.1.2", + "natural-compare": "^1.4.0", + "optionator": "^0.9.3" + }, + "bin": { + "eslint": "bin/eslint.js" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "url": "https://eslint.org/donate" + }, + "peerDependencies": { + "jiti": "*" + }, + "peerDependenciesMeta": { + "jiti": { + "optional": true + } + } + }, + "node_modules/eslint-plugin-react-hooks": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/eslint-plugin-react-hooks/-/eslint-plugin-react-hooks-5.2.0.tgz", + "integrity": "sha512-+f15FfK64YQwZdJNELETdn5ibXEUQmW1DZL6KXhNnc2heoy/sg9VJJeT7n8TlMWouzWqSWavFkIhHyIbIAEapg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=10" + }, + "peerDependencies": { + "eslint": "^3.0.0 || ^4.0.0 || ^5.0.0 || ^6.0.0 || ^7.0.0 || ^8.0.0-0 || ^9.0.0" + } + }, + "node_modules/eslint-plugin-react-refresh": { + "version": "0.4.20", + "resolved": "https://registry.npmjs.org/eslint-plugin-react-refresh/-/eslint-plugin-react-refresh-0.4.20.tgz", + "integrity": "sha512-XpbHQ2q5gUF8BGOX4dHe+71qoirYMhApEPZ7sfhF/dNnOF1UXnCMGZf79SFTBO7Bz5YEIT4TMieSlJBWhP9WBA==", + "dev": true, + "license": "MIT", + "peerDependencies": { + "eslint": ">=8.40" + } + }, + "node_modules/eslint-scope": { + "version": "8.4.0", + "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-8.4.0.tgz", + "integrity": "sha512-sNXOfKCn74rt8RICKMvJS7XKV/Xk9kA7DyJr8mJik3S7Cwgy3qlkkmyS2uQB3jiJg6VNdZd/pDBJu0nvG2NlTg==", + "dev": true, + "license": "BSD-2-Clause", + "dependencies": { + "esrecurse": "^4.3.0", + "estraverse": "^5.2.0" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + } + }, + "node_modules/eslint-visitor-keys": { + "version": "4.2.1", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-4.2.1.tgz", + "integrity": "sha512-Uhdk5sfqcee/9H/rCOJikYz67o0a2Tw2hGRPOG2Y1R2dg7brRe1uG0yaNQDHu+TO/uQPF/5eCapvYSmHUjt7JQ==", + "dev": true, + "license": "Apache-2.0", + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + } + }, + "node_modules/espree": { + "version": "10.4.0", + "resolved": "https://registry.npmjs.org/espree/-/espree-10.4.0.tgz", + "integrity": "sha512-j6PAQ2uUr79PZhBjP5C5fhl8e39FmRnOjsD5lGnWrFU8i2G776tBK7+nP8KuQUTTyAZUwfQqXAgrVH5MbH9CYQ==", + "dev": true, + "license": "BSD-2-Clause", + "dependencies": { + "acorn": "^8.15.0", + "acorn-jsx": "^5.3.2", + "eslint-visitor-keys": "^4.2.1" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + } + }, + "node_modules/esquery": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/esquery/-/esquery-1.6.0.tgz", + "integrity": "sha512-ca9pw9fomFcKPvFLXhBKUK90ZvGibiGOvRJNbjljY7s7uq/5YO4BOzcYtJqExdx99rF6aAcnRxHmcUHcz6sQsg==", + "dev": true, + "license": "BSD-3-Clause", + "dependencies": { + "estraverse": "^5.1.0" + }, + "engines": { + "node": ">=0.10" + } + }, + "node_modules/esrecurse": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/esrecurse/-/esrecurse-4.3.0.tgz", + "integrity": "sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==", + "dev": true, + "license": "BSD-2-Clause", + "dependencies": { + "estraverse": "^5.2.0" + }, + "engines": { + "node": ">=4.0" + } + }, + "node_modules/estraverse": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", + "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", + "dev": true, + "license": "BSD-2-Clause", + "engines": { + "node": ">=4.0" + } + }, + "node_modules/esutils": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz", + "integrity": "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==", + "dev": true, + "license": "BSD-2-Clause", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/eventemitter3": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/eventemitter3/-/eventemitter3-5.0.1.tgz", + "integrity": "sha512-GWkBvjiSZK87ELrYOSESUYeVIc9mvLLf/nXalMOS5dYrgZq9o5OVkbZAVM06CVxYsCwH9BDZFPlQTlPA1j4ahA==", + "license": "MIT" + }, + "node_modules/expand-template": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/expand-template/-/expand-template-2.0.3.tgz", + "integrity": "sha512-XYfuKMvj4O35f/pOXLObndIRvyQ+/+6AhODh+OKWj9S9498pHHn/IMszH+gt0fBCRWMNfk1ZSp5x3AifmnI2vg==", + "license": "(MIT OR WTFPL)", + "optional": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/fast-deep-equal": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz", + "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==", + "license": "MIT" + }, + "node_modules/fast-diff": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/fast-diff/-/fast-diff-1.3.0.tgz", + "integrity": "sha512-VxPP4NqbUjj6MaAOafWeUn2cXWLcCtljklUtZf0Ind4XQ+QPtmA0b18zZy0jIQx+ExRVCR/ZQpBmik5lXshNsw==", + "license": "Apache-2.0" + }, + "node_modules/fast-glob": { + "version": "3.3.3", + "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.3.3.tgz", + "integrity": "sha512-7MptL8U0cqcFdzIzwOTHoilX9x5BrNqye7Z/LuC7kCMRio1EMSyqRK3BEAUD7sXRq4iT4AzTVuZdhgQ2TCvYLg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@nodelib/fs.stat": "^2.0.2", + "@nodelib/fs.walk": "^1.2.3", + "glob-parent": "^5.1.2", + "merge2": "^1.3.0", + "micromatch": "^4.0.8" + }, + "engines": { + "node": ">=8.6.0" + } + }, + "node_modules/fast-glob/node_modules/glob-parent": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", + "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", + "dev": true, + "license": "ISC", + "dependencies": { + "is-glob": "^4.0.1" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/fast-json-stable-stringify": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz", + "integrity": "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==", + "dev": true, + "license": "MIT" + }, + "node_modules/fast-levenshtein": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz", + "integrity": "sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==", + "dev": true, + "license": "MIT" + }, + "node_modules/fastq": { + "version": "1.19.1", + "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.19.1.tgz", + "integrity": "sha512-GwLTyxkCXjXbxqIhTsMI2Nui8huMPtnxg7krajPJAjnEG/iiOS7i+zCtWGZR9G0NBKbXKh6X9m9UIsYX/N6vvQ==", + "dev": true, + "license": "ISC", + "dependencies": { + "reusify": "^1.0.4" + } + }, + "node_modules/file-entry-cache": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-8.0.0.tgz", + "integrity": "sha512-XXTUwCvisa5oacNGRP9SfNtYBNAMi+RPwBFmblZEF7N7swHYQS6/Zfk7SRwx4D5j3CH211YNRco1DEMNVfZCnQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "flat-cache": "^4.0.0" + }, + "engines": { + "node": ">=16.0.0" + } + }, + "node_modules/file-selector": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/file-selector/-/file-selector-2.1.2.tgz", + "integrity": "sha512-QgXo+mXTe8ljeqUFaX3QVHc5osSItJ/Km+xpocx0aSqWGMSCf6qYs/VnzZgS864Pjn5iceMRFigeAV7AfTlaig==", + "license": "MIT", + "dependencies": { + "tslib": "^2.7.0" + }, + "engines": { + "node": ">= 12" + } + }, + "node_modules/filepond": { + "version": "4.32.8", + "resolved": "https://registry.npmjs.org/filepond/-/filepond-4.32.8.tgz", + "integrity": "sha512-svcz5lh4YKrV92zogqpOKzVEOXbD/zT7RAHso5Lqp0GujP+kxF2PSl9Tb6AdYVzfMRtoPsExcphJPpBLoo8eYg==", + "license": "MIT" + }, + "node_modules/filepond-plugin-image-exif-orientation": { + "version": "1.0.11", + "resolved": "https://registry.npmjs.org/filepond-plugin-image-exif-orientation/-/filepond-plugin-image-exif-orientation-1.0.11.tgz", + "integrity": "sha512-hLBc12Fk6Zkj3L8mSAn+elugHOqT5rLUbgVXQQIQjMe0FsGjtpoxqeVR6jt4IWHGat2L9sFAgU2TGmd1mqosCg==", + "license": "MIT", + "peerDependencies": { + "filepond": ">=3.x <5.x" + } + }, + "node_modules/filepond-plugin-image-preview": { + "version": "4.6.12", + "resolved": "https://registry.npmjs.org/filepond-plugin-image-preview/-/filepond-plugin-image-preview-4.6.12.tgz", + "integrity": "sha512-Y8ETX5QVV0mbPB0586UH8AUmG9tZg8PuN5bdEAIlZVJFTct5ebViJ7+Am94/VhTPjLqZjBf1zmDq5JU6XRsZKw==", + "license": "MIT", + "peerDependencies": { + "filepond": ">=4.x <5.x" + } + }, + "node_modules/fill-range": { + "version": "7.1.1", + "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.1.1.tgz", + "integrity": "sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg==", + "dev": true, + "license": "MIT", + "dependencies": { + "to-regex-range": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/find-root": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/find-root/-/find-root-1.1.0.tgz", + "integrity": "sha512-NKfW6bec6GfKc0SGx1e07QZY9PE99u0Bft/0rzSD5k3sO/vwkVUpDUKVm5Gpp5Ue3YfShPFTX2070tDs5kB9Ng==", + "license": "MIT" + }, + "node_modules/find-up": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-5.0.0.tgz", + "integrity": "sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==", + "dev": true, + "license": "MIT", + "dependencies": { + "locate-path": "^6.0.0", + "path-exists": "^4.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/flat-cache": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-4.0.1.tgz", + "integrity": "sha512-f7ccFPK3SXFHpx15UIGyRJ/FJQctuKZ0zVuN3frBo4HnK3cay9VEW0R6yPYFHC0AgqhukPzKjq22t5DmAyqGyw==", + "dev": true, + "license": "MIT", + "dependencies": { + "flatted": "^3.2.9", + "keyv": "^4.5.4" + }, + "engines": { + "node": ">=16" + } + }, + "node_modules/flatpickr": { + "version": "4.6.13", + "resolved": "https://registry.npmjs.org/flatpickr/-/flatpickr-4.6.13.tgz", + "integrity": "sha512-97PMG/aywoYpB4IvbvUJi0RQi8vearvU0oov1WW3k0WZPBMrTQVqekSX5CjSG/M4Q3i6A/0FKXC7RyAoAUUSPw==", + "license": "MIT" + }, + "node_modules/flatted": { + "version": "3.3.3", + "resolved": "https://registry.npmjs.org/flatted/-/flatted-3.3.3.tgz", + "integrity": "sha512-GX+ysw4PBCz0PzosHDepZGANEuFCMLrnRTiEy9McGjmkCQYwRq4A/X786G/fjM/+OjsWSU1ZrY5qyARZmO/uwg==", + "dev": true, + "license": "ISC" + }, + "node_modules/follow-redirects": { + "version": "1.16.0", + "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.16.0.tgz", + "integrity": "sha512-y5rN/uOsadFT/JfYwhxRS5R7Qce+g3zG97+JrtFZlC9klX/W5hD7iiLzScI4nZqUS7DNUdhPgw4xI8W2LuXlUw==", + "funding": [ + { + "type": "individual", + "url": "https://github.com/sponsors/RubenVerborgh" + } + ], + "license": "MIT", + "engines": { + "node": ">=4.0" + }, + "peerDependenciesMeta": { + "debug": { + "optional": true + } + } + }, + "node_modules/form-data": { + "version": "4.0.6", + "resolved": "https://registry.npmjs.org/form-data/-/form-data-4.0.6.tgz", + "integrity": "sha512-vKatAh4SlVfgbv+YtmhiRjhEMJsYpsG1Y2rMQtR+SVSbytsSD1YGzDIcrAJmdFec88u/+VoGmxnl+80gL1tRCQ==", + "license": "MIT", + "dependencies": { + "asynckit": "^0.4.0", + "combined-stream": "^1.0.8", + "es-set-tostringtag": "^2.1.0", + "hasown": "^2.0.4", + "mime-types": "^2.1.35" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/fs-constants": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/fs-constants/-/fs-constants-1.0.0.tgz", + "integrity": "sha512-y6OAwoSIf7FyjMIv94u+b5rdheZEjzR63GTyZJm5qh4Bi+2YgwLCcI/fPFZkL5PSixOt6ZNKm+w+Hfp/Bciwow==", + "license": "MIT", + "optional": true + }, + "node_modules/fsevents": { + "version": "2.3.3", + "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.3.tgz", + "integrity": "sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==", + "dev": true, + "hasInstallScript": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": "^8.16.0 || ^10.6.0 || >=11.0.0" + } + }, + "node_modules/function-bind": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.2.tgz", + "integrity": "sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==", + "license": "MIT", + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/functions-have-names": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/functions-have-names/-/functions-have-names-1.2.3.tgz", + "integrity": "sha512-xckBUXyTIqT97tq2x2AMb+g163b5JFysYk0x4qxNFwbfQkmNZoiRHb6sPzI9/QV33WeuvVYBUIiD4NzNIyqaRQ==", + "license": "MIT", + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/gensync": { + "version": "1.0.0-beta.2", + "resolved": "https://registry.npmjs.org/gensync/-/gensync-1.0.0-beta.2.tgz", + "integrity": "sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/get-intrinsic": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.3.0.tgz", + "integrity": "sha512-9fSjSaos/fRIVIp+xSJlE6lfwhES7LNtKaCBIamHsjr2na1BiABJPo0mOjjz8GJDURarmCPGqaiVg5mfjb98CQ==", + "license": "MIT", + "dependencies": { + "call-bind-apply-helpers": "^1.0.2", + "es-define-property": "^1.0.1", + "es-errors": "^1.3.0", + "es-object-atoms": "^1.1.1", + "function-bind": "^1.1.2", + "get-proto": "^1.0.1", + "gopd": "^1.2.0", + "has-symbols": "^1.1.0", + "hasown": "^2.0.2", + "math-intrinsics": "^1.1.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/get-proto": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/get-proto/-/get-proto-1.0.1.tgz", + "integrity": "sha512-sTSfBjoXBp89JvIKIefqw7U2CCebsc74kiY6awiGogKtoSGbgjYE/G/+l9sF3MWFPNc9IcoOC4ODfKHfxFmp0g==", + "license": "MIT", + "dependencies": { + "dunder-proto": "^1.0.1", + "es-object-atoms": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/github-from-package": { + "version": "0.0.0", + "resolved": "https://registry.npmjs.org/github-from-package/-/github-from-package-0.0.0.tgz", + "integrity": "sha512-SyHy3T1v2NUXn29OsWdxmK6RwHD+vkj3v8en8AOBZ1wBQ/hCAQ5bAQTD02kW4W9tUp/3Qh6J8r9EvntiyCmOOw==", + "license": "MIT", + "optional": true + }, + "node_modules/glob-parent": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-6.0.2.tgz", + "integrity": "sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==", + "dev": true, + "license": "ISC", + "dependencies": { + "is-glob": "^4.0.3" + }, + "engines": { + "node": ">=10.13.0" + } + }, + "node_modules/globals": { + "version": "16.3.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-16.3.0.tgz", + "integrity": "sha512-bqWEnJ1Nt3neqx2q5SFfGS8r/ahumIakg3HcwtNlrVlwXIeNumWn/c7Pn/wKzGhf6SaW6H6uWXLqC30STCMchQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/gopd": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/gopd/-/gopd-1.2.0.tgz", + "integrity": "sha512-ZUKRh6/kUFoAiTAtTYPZJ3hw9wNxx+BIBOijnlG9PnrJsCcSjs1wyyD6vJpaYtgnzDrKYRSqf3OO6Rfa93xsRg==", + "license": "MIT", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/graphemer": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/graphemer/-/graphemer-1.4.0.tgz", + "integrity": "sha512-EtKwoO6kxCL9WO5xipiHTZlSzBm7WLT627TqC/uVRd0HKmq8NXyebnNYxDoBi7wt8eTWrUrKXCOVaFq9x1kgag==", + "dev": true, + "license": "MIT" + }, + "node_modules/has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/has-property-descriptors": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/has-property-descriptors/-/has-property-descriptors-1.0.2.tgz", + "integrity": "sha512-55JNKuIW+vq4Ke1BjOTjM2YctQIvCT7GFzHwmfZPGo5wnrgkid0YQtnAleFSqumZm4az3n2BS+erby5ipJdgrg==", + "license": "MIT", + "dependencies": { + "es-define-property": "^1.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/has-symbols": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.1.0.tgz", + "integrity": "sha512-1cDNdwJ2Jaohmb3sg4OmKaMBwuC48sYni5HUw2DvsC8LjGTLK9h+eb1X6RyuOHe4hT0ULCW68iomhjUoKUqlPQ==", + "license": "MIT", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/has-tostringtag": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/has-tostringtag/-/has-tostringtag-1.0.2.tgz", + "integrity": "sha512-NqADB8VjPFLM2V0VvHUewwwsw0ZWBaIdgo+ieHtK3hasLz4qeCRjYcqfB6AQrBggRKppKF8L52/VqdVsO47Dlw==", + "license": "MIT", + "dependencies": { + "has-symbols": "^1.0.3" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/hasown": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/hasown/-/hasown-2.0.4.tgz", + "integrity": "sha512-T2UbfbBEF32wiepXIsMlTW9+dDYC6wMh/t/vYA4tuOMKqWz/n3vr1NFSxQiyP+zk2mXsoMA/i/7qV6LKut1t1A==", + "license": "MIT", + "dependencies": { + "function-bind": "^1.1.2" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/hoist-non-react-statics": { + "version": "3.3.2", + "resolved": "https://registry.npmjs.org/hoist-non-react-statics/-/hoist-non-react-statics-3.3.2.tgz", + "integrity": "sha512-/gGivxi8JPKWNm/W0jSmzcMPpfpPLc3dY/6GxhX2hQ9iGj3aDfklV4ET7NjKpSinLpJ5vafa9iiGIEZg10SfBw==", + "license": "BSD-3-Clause", + "dependencies": { + "react-is": "^16.7.0" + } + }, + "node_modules/hoist-non-react-statics/node_modules/react-is": { + "version": "16.13.1", + "resolved": "https://registry.npmjs.org/react-is/-/react-is-16.13.1.tgz", + "integrity": "sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ==", + "license": "MIT" + }, + "node_modules/html2canvas": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/html2canvas/-/html2canvas-1.4.1.tgz", + "integrity": "sha512-fPU6BHNpsyIhr8yyMpTLLxAbkaK8ArIBcmZIRiBLiDhjeqvXolaEmDGmELFuX9I4xDcaKKcJl+TKZLqruBbmWA==", + "license": "MIT", + "dependencies": { + "css-line-break": "^2.1.0", + "text-segmentation": "^1.0.3" + }, + "engines": { + "node": ">=8.0.0" + } + }, + "node_modules/https-proxy-agent": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-5.0.1.tgz", + "integrity": "sha512-dFcAjpTQFgoLMzC2VwU+C/CbS7uRL0lWmxDITmqm7C+7F0Odmj6s9l6alZc6AELXhrnggM2CeWSXHGOdX2YtwA==", + "license": "MIT", + "dependencies": { + "agent-base": "6", + "debug": "4" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/iconv-lite": { + "version": "0.6.3", + "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.6.3.tgz", + "integrity": "sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw==", + "license": "MIT", + "dependencies": { + "safer-buffer": ">= 2.1.2 < 3.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/ieee754": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.2.1.tgz", + "integrity": "sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "license": "BSD-3-Clause", + "optional": true + }, + "node_modules/ignore": { + "version": "5.3.2", + "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.3.2.tgz", + "integrity": "sha512-hsBTNUqQTDwkWtcdYI2i06Y/nUBEsNEDJKjWdigLvegy8kDuJAS8uRlpkkcQpyEXL0Z/pjDy5HBmMjRCJ2gq+g==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 4" + } + }, + "node_modules/immediate": { + "version": "3.0.6", + "resolved": "https://registry.npmjs.org/immediate/-/immediate-3.0.6.tgz", + "integrity": "sha512-XXOFtyqDjNDAQxVfYxuF7g9Il/IbWmmlQg2MYKOH8ExIT1qg6xc4zyS3HaEEATgs1btfzxq15ciUiY7gjSXRGQ==", + "license": "MIT" + }, + "node_modules/immutable": { + "version": "4.3.7", + "resolved": "https://registry.npmjs.org/immutable/-/immutable-4.3.7.tgz", + "integrity": "sha512-1hqclzwYwjRDFLjcFxOM5AYkkG0rpFPpr1RLPMEuGczoS7YA8gLhy8SWXYRAA/XwfEHpfo3cw5JGioS32fnMRw==", + "dev": true, + "license": "MIT" + }, + "node_modules/import-fresh": { + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.3.1.tgz", + "integrity": "sha512-TR3KfrTZTYLPB6jUjfx6MF9WcWrHL9su5TObK4ZkYgBdWKPOFoSoQIdEuTuR82pmtxH2spWG9h6etwfr1pLBqQ==", + "license": "MIT", + "dependencies": { + "parent-module": "^1.0.0", + "resolve-from": "^4.0.0" + }, + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/imurmurhash": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz", + "integrity": "sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.8.19" + } + }, + "node_modules/inherits": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", + "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==", + "license": "ISC" + }, + "node_modules/ini": { + "version": "1.3.8", + "resolved": "https://registry.npmjs.org/ini/-/ini-1.3.8.tgz", + "integrity": "sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew==", + "license": "ISC", + "optional": true + }, + "node_modules/invariant": { + "version": "2.2.4", + "resolved": "https://registry.npmjs.org/invariant/-/invariant-2.2.4.tgz", + "integrity": "sha512-phJfQVBuaJM5raOpJjSfkiD6BpbCE4Ns//LaXl6wGYtUBY83nWS6Rf9tXm2e8VaK60JEjYldbPif/A2B1C2gNA==", + "license": "MIT", + "dependencies": { + "loose-envify": "^1.0.0" + } + }, + "node_modules/is-arguments": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/is-arguments/-/is-arguments-1.2.0.tgz", + "integrity": "sha512-7bVbi0huj/wrIAOzb8U1aszg9kdi3KN/CyU19CTI7tAoZYEZoL9yCDXpbXN+uPsuWnP02cyug1gleqq+TU+YCA==", + "license": "MIT", + "dependencies": { + "call-bound": "^1.0.2", + "has-tostringtag": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-arrayish": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz", + "integrity": "sha512-zz06S8t0ozoDXMG+ube26zeCTNXcKIPJZJi8hBrF4idCLms4CG9QtK7qBl1boi5ODzFpjswb5JPmHCbMpjaYzg==", + "license": "MIT" + }, + "node_modules/is-binary-path": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz", + "integrity": "sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==", + "dev": true, + "license": "MIT", + "dependencies": { + "binary-extensions": "^2.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/is-core-module": { + "version": "2.16.1", + "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.16.1.tgz", + "integrity": "sha512-UfoeMA6fIJ8wTYFEUjelnaGI67v6+N7qXJEvQuIGa99l4xsCruSYOVSQ0uPANn4dAzm8lkYPaKLrrijLq7x23w==", + "license": "MIT", + "dependencies": { + "hasown": "^2.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-date-object": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/is-date-object/-/is-date-object-1.1.0.tgz", + "integrity": "sha512-PwwhEakHVKTdRNVOw+/Gyh0+MzlCl4R6qKvkhuvLtPMggI1WAHt9sOwZxQLSGpUaDnrdyDsomoRgNnCfKNSXXg==", + "license": "MIT", + "dependencies": { + "call-bound": "^1.0.2", + "has-tostringtag": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-extglob": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", + "integrity": "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-glob": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz", + "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==", + "dev": true, + "license": "MIT", + "dependencies": { + "is-extglob": "^2.1.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-mobile": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/is-mobile/-/is-mobile-5.0.0.tgz", + "integrity": "sha512-Tz/yndySvLAEXh+Uk8liFCxOwVH6YutuR74utvOcu7I9Di+DwM0mtdPVZNaVvvBUM2OXxne/NhOs1zAO7riusQ==", + "license": "MIT" + }, + "node_modules/is-number": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", + "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.12.0" + } + }, + "node_modules/is-regex": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.2.1.tgz", + "integrity": "sha512-MjYsKHO5O7mCsmRGxWcLWheFqN9DJ/2TmngvjKXihe6efViPqc274+Fx/4fYj/r03+ESvBdTXK0V6tA3rgez1g==", + "license": "MIT", + "dependencies": { + "call-bound": "^1.0.2", + "gopd": "^1.2.0", + "has-tostringtag": "^1.0.2", + "hasown": "^2.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/isarray": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", + "integrity": "sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==", + "license": "MIT" + }, + "node_modules/isexe": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", + "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==", + "dev": true, + "license": "ISC" + }, + "node_modules/jpeg-exif": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/jpeg-exif/-/jpeg-exif-1.1.4.tgz", + "integrity": "sha512-a+bKEcCjtuW5WTdgeXFzswSrdqi0jk4XlEtZlx5A94wCoBpFjfFTbo/Tra5SpNCl/YFZPvcV1dJc+TAYeg6ROQ==", + "license": "MIT" + }, + "node_modules/jquery": { + "version": "3.7.1", + "resolved": "https://registry.npmjs.org/jquery/-/jquery-3.7.1.tgz", + "integrity": "sha512-m4avr8yL8kmFN8psrbFFFmB/If14iN5o9nw/NgnnM+kybDJpRsAynV2BsfpTYrTRysYUdADVD7CkUUizgkpLfg==", + "license": "MIT" + }, + "node_modules/js-tokens": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz", + "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==", + "license": "MIT" + }, + "node_modules/js-yaml": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz", + "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==", + "dev": true, + "license": "MIT", + "dependencies": { + "argparse": "^2.0.1" + }, + "bin": { + "js-yaml": "bin/js-yaml.js" + } + }, + "node_modules/jsesc": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-3.1.0.tgz", + "integrity": "sha512-/sM3dO2FOzXjKQhJuo0Q173wf2KOo8t4I8vHy6lF9poUp7bKT0/NHE8fPX23PwfhnykfqnC2xRxOnVw5XuGIaA==", + "license": "MIT", + "bin": { + "jsesc": "bin/jsesc" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/json-buffer": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/json-buffer/-/json-buffer-3.0.1.tgz", + "integrity": "sha512-4bV5BfR2mqfQTJm+V5tPPdf+ZpuhiIvTuAB5g8kcrXOZpTT/QwwVRWBywX1ozr6lEuPdbHxwaJlm9G6mI2sfSQ==", + "dev": true, + "license": "MIT" + }, + "node_modules/json-parse-even-better-errors": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/json-parse-even-better-errors/-/json-parse-even-better-errors-2.3.1.tgz", + "integrity": "sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w==", + "license": "MIT" + }, + "node_modules/json-schema-traverse": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", + "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==", + "dev": true, + "license": "MIT" + }, + "node_modules/json-stable-stringify-without-jsonify": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz", + "integrity": "sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw==", + "dev": true, + "license": "MIT" + }, + "node_modules/json5": { + "version": "2.2.3", + "resolved": "https://registry.npmjs.org/json5/-/json5-2.2.3.tgz", + "integrity": "sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg==", + "dev": true, + "license": "MIT", + "bin": { + "json5": "lib/cli.js" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/jsvectormap": { + "version": "1.3.3", + "resolved": "https://registry.npmjs.org/jsvectormap/-/jsvectormap-1.3.3.tgz", + "integrity": "sha512-cx0TgSxlFGzoX//4lW5ahP1rGUUiyiYc1p1eGPoF1vGVfEHF3M0+bgith4Fl8s3J1UPYvXpcpOWR9r0He8TpBg==", + "license": "MIT" + }, + "node_modules/jszip": { + "version": "3.10.1", + "resolved": "https://registry.npmjs.org/jszip/-/jszip-3.10.1.tgz", + "integrity": "sha512-xXDvecyTpGLrqFrvkrUSoxxfJI5AH7U8zxxtVclpsUtMCq4JQ290LY8AW5c7Ggnr/Y/oK+bQMbqK2qmtk3pN4g==", + "license": "(MIT OR GPL-3.0-or-later)", + "dependencies": { + "lie": "~3.3.0", + "pako": "~1.0.2", + "readable-stream": "~2.3.6", + "setimmediate": "^1.0.5" + } + }, + "node_modules/keyv": { + "version": "4.5.4", + "resolved": "https://registry.npmjs.org/keyv/-/keyv-4.5.4.tgz", + "integrity": "sha512-oxVHkHR/EJf2CNXnWxRLW6mg7JyCCUcG0DtEGmL2ctUo1PNTin1PUil+r/+4r5MpVgC/fn1kjsx7mjSujKqIpw==", + "dev": true, + "license": "MIT", + "dependencies": { + "json-buffer": "3.0.1" + } + }, + "node_modules/ladda": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/ladda/-/ladda-2.0.3.tgz", + "integrity": "sha512-b/m5BP2M2s37GkwEMBJV6mnvLsFUUo1pdn13n6x18bPEFFf+zEl5TmeeqYXmUjgkEEugICe+dTvmciteJ+CGcQ==", + "license": "MIT", + "dependencies": { + "spin.js": "^4.1.1" + } + }, + "node_modules/leaflet": { + "version": "1.9.4", + "resolved": "https://registry.npmjs.org/leaflet/-/leaflet-1.9.4.tgz", + "integrity": "sha512-nxS1ynzJOmOlHp+iL3FyWqK89GtNL8U8rvlMOsQdTTssxZwCXh8N2NB3GDQOL+YR3XnWyZAxwQixURb+FA74PA==", + "license": "BSD-2-Clause" + }, + "node_modules/levn": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/levn/-/levn-0.4.1.tgz", + "integrity": "sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "prelude-ls": "^1.2.1", + "type-check": "~0.4.0" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/lie": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/lie/-/lie-3.3.0.tgz", + "integrity": "sha512-UaiMJzeWRlEujzAuw5LokY1L5ecNQYZKfmyZ9L7wDHb/p5etKaxXhohBcrw0EYby+G/NA52vRSN4N39dxHAIwQ==", + "license": "MIT", + "dependencies": { + "immediate": "~3.0.5" + } + }, + "node_modules/lines-and-columns": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/lines-and-columns/-/lines-and-columns-1.2.4.tgz", + "integrity": "sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==", + "license": "MIT" + }, + "node_modules/locate-path": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-6.0.0.tgz", + "integrity": "sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==", + "dev": true, + "license": "MIT", + "dependencies": { + "p-locate": "^5.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/lodash": { + "version": "4.17.21", + "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz", + "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==", + "license": "MIT" + }, + "node_modules/lodash-es": { + "version": "4.17.21", + "resolved": "https://registry.npmjs.org/lodash-es/-/lodash-es-4.17.21.tgz", + "integrity": "sha512-mKnC+QJ9pWVzv+C4/U3rRsHapFfHvQFoFB92e52xeyGMcX6/OlIl78je1u8vePzYZSkkogMPJ2yjxxsb89cxyw==", + "license": "MIT" + }, + "node_modules/lodash.clonedeep": { + "version": "4.5.0", + "resolved": "https://registry.npmjs.org/lodash.clonedeep/-/lodash.clonedeep-4.5.0.tgz", + "integrity": "sha512-H5ZhCF25riFd9uB5UCkVKo61m3S/xZk1x4wA6yp/L3RFP6Z/eHH1ymQcGLo7J3GMPfm0V/7m1tryHuGVxpqEBQ==", + "license": "MIT" + }, + "node_modules/lodash.debounce": { + "version": "4.0.8", + "resolved": "https://registry.npmjs.org/lodash.debounce/-/lodash.debounce-4.0.8.tgz", + "integrity": "sha512-FT1yDzDYEoYWhnSGnpE/4Kj1fLZkDFyqRb7fNt6FdYOSxlUWAtp42Eh6Wb0rGIv/m9Bgo7x4GhQbm5Ys4SG5ow==", + "license": "MIT" + }, + "node_modules/lodash.isequal": { + "version": "4.5.0", + "resolved": "https://registry.npmjs.org/lodash.isequal/-/lodash.isequal-4.5.0.tgz", + "integrity": "sha512-pDo3lu8Jhfjqls6GkMgpahsF9kCyayhgykjyLMNFTKWrpVdAQtYyB4muAMWozBB4ig/dtWAmsMxLEI8wuz+DYQ==", + "deprecated": "This package is deprecated. Use require('node:util').isDeepStrictEqual instead.", + "license": "MIT" + }, + "node_modules/lodash.merge": { + "version": "4.6.2", + "resolved": "https://registry.npmjs.org/lodash.merge/-/lodash.merge-4.6.2.tgz", + "integrity": "sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==", + "dev": true, + "license": "MIT" + }, + "node_modules/loose-envify": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/loose-envify/-/loose-envify-1.4.0.tgz", + "integrity": "sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q==", + "license": "MIT", + "dependencies": { + "js-tokens": "^3.0.0 || ^4.0.0" + }, + "bin": { + "loose-envify": "cli.js" + } + }, + "node_modules/lru-cache": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-5.1.1.tgz", + "integrity": "sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==", + "dev": true, + "license": "ISC", + "dependencies": { + "yallist": "^3.0.2" + } + }, + "node_modules/make-cancellable-promise": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/make-cancellable-promise/-/make-cancellable-promise-1.3.2.tgz", + "integrity": "sha512-GCXh3bq/WuMbS+Ky4JBPW1hYTOU+znU+Q5m9Pu+pI8EoUqIHk9+tviOKC6/qhHh8C4/As3tzJ69IF32kdz85ww==", + "license": "MIT", + "funding": { + "url": "https://github.com/wojtekmaj/make-cancellable-promise?sponsor=1" + } + }, + "node_modules/make-event-props": { + "version": "1.6.2", + "resolved": "https://registry.npmjs.org/make-event-props/-/make-event-props-1.6.2.tgz", + "integrity": "sha512-iDwf7mA03WPiR8QxvcVHmVWEPfMY1RZXerDVNCRYW7dUr2ppH3J58Rwb39/WG39yTZdRSxr3x+2v22tvI0VEvA==", + "license": "MIT", + "funding": { + "url": "https://github.com/wojtekmaj/make-event-props?sponsor=1" + } + }, + "node_modules/masonic": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/masonic/-/masonic-4.1.0.tgz", + "integrity": "sha512-3RNbAG5qLve7qNtGp1UM/u7vI39jO73ZFHDBAg3xl8AVh7A6Ikx7I7mBeC0NY0h1r1jJn2Wqeol1QMa09MQbyQ==", + "license": "MIT", + "dependencies": { + "@essentials/memoize-one": "^1.1.0", + "@essentials/one-key-map": "^1.2.0", + "@essentials/request-timeout": "^1.3.0", + "@react-hook/event": "^1.2.6", + "@react-hook/latest": "^1.0.3", + "@react-hook/passive-layout-effect": "^1.2.1", + "@react-hook/throttle": "^2.2.0", + "@react-hook/window-scroll": "^1.3.0", + "@react-hook/window-size": "^3.1.1", + "raf-schd": "^4.0.3", + "trie-memoize": "^1.2.0" + }, + "peerDependencies": { + "react": ">=16.8" + } + }, + "node_modules/math-intrinsics": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/math-intrinsics/-/math-intrinsics-1.1.0.tgz", + "integrity": "sha512-/IXtbwEk5HTPyEwyKX6hGkYXxM9nbj64B+ilVJnC/R6B0pH5G4V3b0pVbL7DBj4tkhBAppbQUlf6F6Xl9LHu1g==", + "license": "MIT", + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/memoize-one": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/memoize-one/-/memoize-one-6.0.0.tgz", + "integrity": "sha512-rkpe71W0N0c0Xz6QD0eJETuWAJGnJ9afsl1srmwPrI+yBCkge5EycXXbYRyvL29zZVUWQCY7InPRCv3GDXuZNw==", + "license": "MIT" + }, + "node_modules/merge-refs": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/merge-refs/-/merge-refs-1.3.0.tgz", + "integrity": "sha512-nqXPXbso+1dcKDpPCXvwZyJILz+vSLqGGOnDrYHQYE+B8n9JTCekVLC65AfCpR4ggVyA/45Y0iR9LDyS2iI+zA==", + "license": "MIT", + "funding": { + "url": "https://github.com/wojtekmaj/merge-refs?sponsor=1" + }, + "peerDependencies": { + "@types/react": "^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + } + } + }, + "node_modules/merge2": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz", + "integrity": "sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 8" + } + }, + "node_modules/micromatch": { + "version": "4.0.8", + "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.8.tgz", + "integrity": "sha512-PXwfBhYu0hBCPw8Dn0E+WDYb7af3dSLVWKi3HGv84IdF4TyFoC0ysxFd0Goxw7nSv4T/PzEJQxsYsEiFCKo2BA==", + "dev": true, + "license": "MIT", + "dependencies": { + "braces": "^3.0.3", + "picomatch": "^2.3.1" + }, + "engines": { + "node": ">=8.6" + } + }, + "node_modules/mime-db": { + "version": "1.52.0", + "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz", + "integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==", + "license": "MIT", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/mime-types": { + "version": "2.1.35", + "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.35.tgz", + "integrity": "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==", + "license": "MIT", + "dependencies": { + "mime-db": "1.52.0" + }, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/mimic-response": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/mimic-response/-/mimic-response-3.1.0.tgz", + "integrity": "sha512-z0yWI+4FDrrweS8Zmt4Ej5HdJmky15+L2e6Wgn3+iK5fWzb6T3fhNFq2+MeTRb064c6Wr4N/wv0DzQTjNzHNGQ==", + "license": "MIT", + "optional": true, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/minimatch": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", + "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", + "dev": true, + "license": "ISC", + "dependencies": { + "brace-expansion": "^1.1.7" + }, + "engines": { + "node": "*" + } + }, + "node_modules/minimist": { + "version": "1.2.8", + "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.8.tgz", + "integrity": "sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==", + "license": "MIT", + "optional": true, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/mkdirp-classic": { + "version": "0.5.3", + "resolved": "https://registry.npmjs.org/mkdirp-classic/-/mkdirp-classic-0.5.3.tgz", + "integrity": "sha512-gKLcREMhtuZRwRAfqP3RFW+TK4JqApVBtOIftVgjuABpAtpxhPGaDcfvbhNvD0B8iD1oUr/txX35NjcaY6Ns/A==", + "license": "MIT", + "optional": true + }, + "node_modules/moment": { + "version": "2.30.1", + "resolved": "https://registry.npmjs.org/moment/-/moment-2.30.1.tgz", + "integrity": "sha512-uEmtNhbDOrWPFS+hdjFCBfy9f2YoyzRpwcl+DqpC6taX21FzsTLQVbMV/W7PzNSX6x/bhC1zA3c2UQ5NzH6how==", + "license": "MIT", + "engines": { + "node": "*" + } + }, + "node_modules/ms": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", + "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", + "license": "MIT" + }, + "node_modules/nanoid": { + "version": "3.3.11", + "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.11.tgz", + "integrity": "sha512-N8SpfPUnUp1bK+PMYW8qSWdl9U+wwNWI4QKxOYDy9JAro3WMX7p2OeVRF9v+347pnakNevPmiHhNmZ2HbFA76w==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "license": "MIT", + "bin": { + "nanoid": "bin/nanoid.cjs" + }, + "engines": { + "node": "^10 || ^12 || ^13.7 || ^14 || >=15.0.1" + } + }, + "node_modules/napi-build-utils": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/napi-build-utils/-/napi-build-utils-2.0.0.tgz", + "integrity": "sha512-GEbrYkbfF7MoNaoh2iGG84Mnf/WZfB0GdGEsM8wz7Expx/LlWf5U8t9nvJKXSp3qr5IsEbK04cBGhol/KwOsWA==", + "license": "MIT", + "optional": true + }, + "node_modules/natural-compare": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz", + "integrity": "sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==", + "dev": true, + "license": "MIT" + }, + "node_modules/node-abi": { + "version": "3.75.0", + "resolved": "https://registry.npmjs.org/node-abi/-/node-abi-3.75.0.tgz", + "integrity": "sha512-OhYaY5sDsIka7H7AtijtI9jwGYLyl29eQn/W623DiN/MIv5sUqc4g7BIDThX+gb7di9f6xK02nkp8sdfFWZLTg==", + "license": "MIT", + "optional": true, + "dependencies": { + "semver": "^7.3.5" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/node-abi/node_modules/semver": { + "version": "7.7.2", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.2.tgz", + "integrity": "sha512-RF0Fw+rO5AMf9MAyaRXI4AV0Ulj5lMHqVxxdSgiVbixSCXoEmmX/jk0CuJw4+3SqroYO9VoUh+HcuJivvtJemA==", + "license": "ISC", + "optional": true, + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/node-addon-api": { + "version": "7.1.1", + "resolved": "https://registry.npmjs.org/node-addon-api/-/node-addon-api-7.1.1.tgz", + "integrity": "sha512-5m3bsyrjFWE1xf7nz7YXdN4udnVtXK6/Yfgn5qnahL6bCkf2yKt4k3nuTKAtT4r3IG8JNR2ncsIMdZuAzJjHQQ==", + "license": "MIT", + "optional": true + }, + "node_modules/node-releases": { + "version": "2.0.19", + "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.19.tgz", + "integrity": "sha512-xxOWJsBKtzAq7DY0J+DTzuz58K8e7sJbdgwkbMWQe8UYB6ekmsQ45q0M/tJDsGaZmbC+l7n57UV8Hl5tHxO9uw==", + "dev": true, + "license": "MIT" + }, + "node_modules/normalize-path": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz", + "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/object-assign": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", + "integrity": "sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==", + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/object-is": { + "version": "1.1.6", + "resolved": "https://registry.npmjs.org/object-is/-/object-is-1.1.6.tgz", + "integrity": "sha512-F8cZ+KfGlSGi09lJT7/Nd6KJZ9ygtvYC0/UYYLI9nmQKLMnydpB9yvbv9K1uSkEu7FU9vYPmVwLg328tX+ot3Q==", + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.7", + "define-properties": "^1.2.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/object-keys": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.1.1.tgz", + "integrity": "sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==", + "license": "MIT", + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/once": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", + "integrity": "sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==", + "license": "ISC", + "optional": true, + "dependencies": { + "wrappy": "1" + } + }, + "node_modules/optionator": { + "version": "0.9.4", + "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.9.4.tgz", + "integrity": "sha512-6IpQ7mKUxRcZNLIObR0hz7lxsapSSIYNZJwXPGeF0mTVqGKFIXj1DQcMoT22S3ROcLyY/rz0PWaWZ9ayWmad9g==", + "dev": true, + "license": "MIT", + "dependencies": { + "deep-is": "^0.1.3", + "fast-levenshtein": "^2.0.6", + "levn": "^0.4.1", + "prelude-ls": "^1.2.1", + "type-check": "^0.4.0", + "word-wrap": "^1.2.5" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/p-limit": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz", + "integrity": "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "yocto-queue": "^0.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/p-locate": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-5.0.0.tgz", + "integrity": "sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==", + "dev": true, + "license": "MIT", + "dependencies": { + "p-limit": "^3.0.2" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/pako": { + "version": "1.0.11", + "resolved": "https://registry.npmjs.org/pako/-/pako-1.0.11.tgz", + "integrity": "sha512-4hLB8Py4zZce5s4yd9XzopqwVv/yGNhV1Bl8NTmCq1763HeK2+EwVTv+leGeL13Dnh2wfbqowVPXCIO0z4taYw==", + "license": "(MIT AND Zlib)" + }, + "node_modules/parchment": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/parchment/-/parchment-3.0.0.tgz", + "integrity": "sha512-HUrJFQ/StvgmXRcQ1ftY6VEZUq3jA2t9ncFN4F84J/vN0/FPpQF+8FKXb3l6fLces6q0uOHj6NJn+2xvZnxO6A==", + "license": "BSD-3-Clause" + }, + "node_modules/parent-module": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/parent-module/-/parent-module-1.0.1.tgz", + "integrity": "sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==", + "license": "MIT", + "dependencies": { + "callsites": "^3.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/parse-json": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-5.2.0.tgz", + "integrity": "sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg==", + "license": "MIT", + "dependencies": { + "@babel/code-frame": "^7.0.0", + "error-ex": "^1.3.1", + "json-parse-even-better-errors": "^2.3.0", + "lines-and-columns": "^1.1.6" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/path-exists": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", + "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/path-key": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz", + "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/path-parse": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz", + "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==", + "license": "MIT" + }, + "node_modules/path-type": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/path-type/-/path-type-4.0.0.tgz", + "integrity": "sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==", + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/path2d": { + "version": "0.2.2", + "resolved": "https://registry.npmjs.org/path2d/-/path2d-0.2.2.tgz", + "integrity": "sha512-+vnG6S4dYcYxZd+CZxzXCNKdELYZSKfohrk98yajCo1PtRoDgCTrrwOvK1GT0UoAdVszagDVllQc0U1vaX4NUQ==", + "license": "MIT", + "optional": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/pdfjs-dist": { + "version": "4.8.69", + "resolved": "https://registry.npmjs.org/pdfjs-dist/-/pdfjs-dist-4.8.69.tgz", + "integrity": "sha512-IHZsA4T7YElCKNNXtiLgqScw4zPd3pG9do8UrznC757gMd7UPeHSL2qwNNMJo4r79fl8oj1Xx+1nh2YkzdMpLQ==", + "license": "Apache-2.0", + "engines": { + "node": ">=18" + }, + "optionalDependencies": { + "canvas": "^3.0.0-rc2", + "path2d": "^0.2.1" + } + }, + "node_modules/pdfmake": { + "version": "0.2.20", + "resolved": "https://registry.npmjs.org/pdfmake/-/pdfmake-0.2.20.tgz", + "integrity": "sha512-bGbxbGFP5p8PWNT3Phsu1ZcRLnRfF6jmnuKTkgmt6i5PZzSdX6JaB+NeTz9q+aocfW8SE9GUjL3o/5GroBqGcQ==", + "license": "MIT", + "dependencies": { + "@foliojs-fork/linebreak": "^1.1.2", + "@foliojs-fork/pdfkit": "^0.15.3", + "iconv-lite": "^0.6.3", + "xmldoc": "^2.0.1" + }, + "engines": { + "node": ">=18" + } + }, + "node_modules/picocolors": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.1.1.tgz", + "integrity": "sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA==", + "license": "ISC" + }, + "node_modules/picomatch": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", + "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8.6" + }, + "funding": { + "url": "https://github.com/sponsors/jonschlinkert" + } + }, + "node_modules/png-js": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/png-js/-/png-js-1.0.0.tgz", + "integrity": "sha512-k+YsbhpA9e+EFfKjTCH3VW6aoKlyNYI6NYdTfDL4CIvFnvsuO84ttonmZE7rc+v23SLTH8XX+5w/Ak9v0xGY4g==" + }, + "node_modules/postcss": { + "version": "8.5.6", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.5.6.tgz", + "integrity": "sha512-3Ybi1tAuwAP9s0r1UQ2J4n5Y0G05bJkpUIO0/bI9MhwmD70S5aTWbXGBwxHrelT+XM1k6dM0pk+SwNkpTRN7Pg==", + "dev": true, + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/postcss/" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/postcss" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "license": "MIT", + "dependencies": { + "nanoid": "^3.3.11", + "picocolors": "^1.1.1", + "source-map-js": "^1.2.1" + }, + "engines": { + "node": "^10 || ^12 || >=14" + } + }, + "node_modules/preact": { + "version": "10.12.1", + "resolved": "https://registry.npmjs.org/preact/-/preact-10.12.1.tgz", + "integrity": "sha512-l8386ixSsBdbreOAkqtrwqHwdvR35ID8c3rKPa8lCWuO86dBi32QWHV4vfsZK1utLLFMvw+Z5Ad4XLkZzchscg==", + "license": "MIT", + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/preact" + } + }, + "node_modules/prebuild-install": { + "version": "7.1.3", + "resolved": "https://registry.npmjs.org/prebuild-install/-/prebuild-install-7.1.3.tgz", + "integrity": "sha512-8Mf2cbV7x1cXPUILADGI3wuhfqWvtiLA1iclTDbFRZkgRQS0NqsPZphna9V+HyTEadheuPmjaJMsbzKQFOzLug==", + "license": "MIT", + "optional": true, + "dependencies": { + "detect-libc": "^2.0.0", + "expand-template": "^2.0.3", + "github-from-package": "0.0.0", + "minimist": "^1.2.3", + "mkdirp-classic": "^0.5.3", + "napi-build-utils": "^2.0.0", + "node-abi": "^3.3.0", + "pump": "^3.0.0", + "rc": "^1.2.7", + "simple-get": "^4.0.0", + "tar-fs": "^2.0.0", + "tunnel-agent": "^0.6.0" + }, + "bin": { + "prebuild-install": "bin.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/prelude-ls": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.2.1.tgz", + "integrity": "sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/process-nextick-args": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.1.tgz", + "integrity": "sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==", + "license": "MIT" + }, + "node_modules/prop-types": { + "version": "15.8.1", + "resolved": "https://registry.npmjs.org/prop-types/-/prop-types-15.8.1.tgz", + "integrity": "sha512-oj87CgZICdulUohogVAR7AjlC0327U4el4L6eAvOqCeudMDVU0NThNaV+b9Df4dXgSP1gXMTnPdhfe/2qDH5cg==", + "license": "MIT", + "dependencies": { + "loose-envify": "^1.4.0", + "object-assign": "^4.1.1", + "react-is": "^16.13.1" + } + }, + "node_modules/prop-types-extra": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/prop-types-extra/-/prop-types-extra-1.1.1.tgz", + "integrity": "sha512-59+AHNnHYCdiC+vMwY52WmvP5dM3QLeoumYuEyceQDi9aEhtwN9zIQ2ZNo25sMyXnbh32h+P1ezDsUpUH3JAew==", + "license": "MIT", + "dependencies": { + "react-is": "^16.3.2", + "warning": "^4.0.0" + }, + "peerDependencies": { + "react": ">=0.14.0" + } + }, + "node_modules/prop-types-extra/node_modules/react-is": { + "version": "16.13.1", + "resolved": "https://registry.npmjs.org/react-is/-/react-is-16.13.1.tgz", + "integrity": "sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ==", + "license": "MIT" + }, + "node_modules/prop-types/node_modules/react-is": { + "version": "16.13.1", + "resolved": "https://registry.npmjs.org/react-is/-/react-is-16.13.1.tgz", + "integrity": "sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ==", + "license": "MIT" + }, + "node_modules/property-expr": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/property-expr/-/property-expr-2.0.6.tgz", + "integrity": "sha512-SVtmxhRE/CGkn3eZY1T6pC8Nln6Fr/lu1mKSgRud0eC73whjGfoAogbn78LkD8aFL0zz3bAFerKSnOl7NlErBA==", + "license": "MIT" + }, + "node_modules/proxy-from-env": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/proxy-from-env/-/proxy-from-env-2.1.0.tgz", + "integrity": "sha512-cJ+oHTW1VAEa8cJslgmUZrc+sjRKgAKl3Zyse6+PV38hZe/V6Z14TbCuXcan9F9ghlz4QrFr2c92TNF82UkYHA==", + "license": "MIT", + "engines": { + "node": ">=10" + } + }, + "node_modules/pump": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/pump/-/pump-3.0.3.tgz", + "integrity": "sha512-todwxLMY7/heScKmntwQG8CXVkWUOdYxIvY2s0VWAAMh/nd8SoYiRaKjlr7+iCs984f2P8zvrfWcDDYVb73NfA==", + "license": "MIT", + "optional": true, + "dependencies": { + "end-of-stream": "^1.1.0", + "once": "^1.3.1" + } + }, + "node_modules/punycode": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.3.1.tgz", + "integrity": "sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/queue-microtask": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz", + "integrity": "sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "license": "MIT" + }, + "node_modules/quill": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/quill/-/quill-2.0.3.tgz", + "integrity": "sha512-xEYQBqfYx/sfb33VJiKnSJp8ehloavImQ2A6564GAbqG55PGw1dAWUn1MUbQB62t0azawUS2CZZhWCjO8gRvTw==", + "license": "BSD-3-Clause", + "dependencies": { + "eventemitter3": "^5.0.1", + "lodash-es": "^4.17.21", + "parchment": "^3.0.0", + "quill-delta": "^5.1.0" + }, + "engines": { + "npm": ">=8.2.3" + } + }, + "node_modules/quill-delta": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/quill-delta/-/quill-delta-5.1.0.tgz", + "integrity": "sha512-X74oCeRI4/p0ucjb5Ma8adTXd9Scumz367kkMK5V/IatcX6A0vlgLgKbzXWy5nZmCGeNJm2oQX0d2Eqj+ZIlCA==", + "license": "MIT", + "dependencies": { + "fast-diff": "^1.3.0", + "lodash.clonedeep": "^4.5.0", + "lodash.isequal": "^4.5.0" + }, + "engines": { + "node": ">= 12.0.0" + } + }, + "node_modules/raf-schd": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/raf-schd/-/raf-schd-4.0.3.tgz", + "integrity": "sha512-tQkJl2GRWh83ui2DiPTJz9wEiMN20syf+5oKfB03yYP7ioZcJwsIK8FjrtLwH1m7C7e+Tt2yYBlrOpdT+dyeIQ==", + "license": "MIT" + }, + "node_modules/rc": { + "version": "1.2.8", + "resolved": "https://registry.npmjs.org/rc/-/rc-1.2.8.tgz", + "integrity": "sha512-y3bGgqKj3QBdxLbLkomlohkvsA8gdAiUQlSBJnBhfn+BPxg4bc62d8TcBW15wavDfgexCgccckhcZvywyQYPOw==", + "license": "(BSD-2-Clause OR MIT OR Apache-2.0)", + "optional": true, + "dependencies": { + "deep-extend": "^0.6.0", + "ini": "~1.3.0", + "minimist": "^1.2.0", + "strip-json-comments": "~2.0.1" + }, + "bin": { + "rc": "cli.js" + } + }, + "node_modules/rc-util": { + "version": "5.44.4", + "resolved": "https://registry.npmjs.org/rc-util/-/rc-util-5.44.4.tgz", + "integrity": "sha512-resueRJzmHG9Q6rI/DfK6Kdv9/Lfls05vzMs1Sk3M2P+3cJa+MakaZyWY8IPfehVuhPJFKrIY1IK4GqbiaiY5w==", + "license": "MIT", + "dependencies": { + "@babel/runtime": "^7.18.3", + "react-is": "^18.2.0" + }, + "peerDependencies": { + "react": ">=16.9.0", + "react-dom": ">=16.9.0" + } + }, + "node_modules/rc/node_modules/strip-json-comments": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-2.0.1.tgz", + "integrity": "sha512-4gB8na07fecVVkOI6Rs4e7T6NOTki5EmL7TUduTs6bu3EdnSycntVJ4re8kgZA+wx9IueI2Y11bfbgwtzuE0KQ==", + "license": "MIT", + "optional": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/react": { + "version": "19.1.1", + "resolved": "https://registry.npmjs.org/react/-/react-19.1.1.tgz", + "integrity": "sha512-w8nqGImo45dmMIfljjMwOGtbmC/mk4CMYhWIicdSflH91J9TyCyczcPFXJzrZ/ZXcgGRFeP6BU0BEJTw6tZdfQ==", + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/react-apexcharts": { + "version": "1.7.0", + "resolved": "https://registry.npmjs.org/react-apexcharts/-/react-apexcharts-1.7.0.tgz", + "integrity": "sha512-03oScKJyNLRf0Oe+ihJxFZliBQM9vW3UWwomVn4YVRTN1jsIR58dLWt0v1sb8RwJVHDMbeHiKQueM0KGpn7nOA==", + "license": "MIT", + "dependencies": { + "prop-types": "^15.8.1" + }, + "peerDependencies": { + "apexcharts": ">=4.0.0", + "react": ">=0.13" + } + }, + "node_modules/react-arborist": { + "version": "3.4.3", + "resolved": "https://registry.npmjs.org/react-arborist/-/react-arborist-3.4.3.tgz", + "integrity": "sha512-yFnq1nIQhT2uJY4TZVz2tgAiBb9lxSyvF4vC3S8POCK8xLzjGIxVv3/4dmYquQJ7AHxaZZArRGHiHKsEewKdTQ==", + "license": "MIT", + "dependencies": { + "react-dnd": "^14.0.3", + "react-dnd-html5-backend": "^14.0.3", + "react-window": "^1.8.11", + "redux": "^5.0.0", + "use-sync-external-store": "^1.2.0" + }, + "peerDependencies": { + "react": ">= 16.14", + "react-dom": ">= 16.14" + } + }, + "node_modules/react-bootstrap": { + "version": "2.10.10", + "resolved": "https://registry.npmjs.org/react-bootstrap/-/react-bootstrap-2.10.10.tgz", + "integrity": "sha512-gMckKUqn8aK/vCnfwoBpBVFUGT9SVQxwsYrp9yDHt0arXMamxALerliKBxr1TPbntirK/HGrUAHYbAeQTa9GHQ==", + "license": "MIT", + "dependencies": { + "@babel/runtime": "^7.24.7", + "@restart/hooks": "^0.4.9", + "@restart/ui": "^1.9.4", + "@types/prop-types": "^15.7.12", + "@types/react-transition-group": "^4.4.6", + "classnames": "^2.3.2", + "dom-helpers": "^5.2.1", + "invariant": "^2.2.4", + "prop-types": "^15.8.1", + "prop-types-extra": "^1.1.0", + "react-transition-group": "^4.4.5", + "uncontrollable": "^7.2.1", + "warning": "^4.0.3" + }, + "peerDependencies": { + "@types/react": ">=16.14.8", + "react": ">=16.14.0", + "react-dom": ">=16.14.0" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + } + } + }, + "node_modules/react-bootstrap-typeahead": { + "version": "6.4.1", + "resolved": "https://registry.npmjs.org/react-bootstrap-typeahead/-/react-bootstrap-typeahead-6.4.1.tgz", + "integrity": "sha512-Uw3vB4H5WGmnOHdQvqVKkOyzzxZ5NUrsd/HKhGnbta5+bEI99xyghr9Y0tVLcMoQZ9Wxpe4g/LJl75L/FsHq/A==", + "license": "MIT", + "dependencies": { + "@babel/runtime": "^7.14.6", + "@floating-ui/react-dom": "^2.1.2", + "@restart/hooks": "^0.4.0", + "@restart/ui": "^1.9.4", + "classnames": "^2.2.0", + "fast-deep-equal": "^3.1.1", + "invariant": "^2.2.1", + "lodash.debounce": "^4.0.8", + "prop-types": "^15.5.8", + "scroll-into-view-if-needed": "^3.1.0", + "warning": "^4.0.1" + }, + "engines": { + "node": ">=18.0.0" + }, + "peerDependencies": { + "react": ">=16.8.0", + "react-dom": ">=16.8.0" + } + }, + "node_modules/react-chartjs-2": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/react-chartjs-2/-/react-chartjs-2-5.3.0.tgz", + "integrity": "sha512-UfZZFnDsERI3c3CZGxzvNJd02SHjaSJ8kgW1djn65H1KK8rehwTjyrRKOG3VTMG8wtHZ5rgAO5oTHtHi9GCCmw==", + "license": "MIT", + "peerDependencies": { + "chart.js": "^4.1.1", + "react": "^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0" + } + }, + "node_modules/react-colorful": { + "version": "5.6.1", + "resolved": "https://registry.npmjs.org/react-colorful/-/react-colorful-5.6.1.tgz", + "integrity": "sha512-1exovf0uGTGyq5mXQT0zgQ80uvj2PCwvF8zY1RN9/vbJVSjSo3fsB/4L3ObbF7u70NduSiK4xu4Y6q1MHoUGEw==", + "license": "MIT", + "peerDependencies": { + "react": ">=16.8.0", + "react-dom": ">=16.8.0" + } + }, + "node_modules/react-countup": { + "version": "6.5.3", + "resolved": "https://registry.npmjs.org/react-countup/-/react-countup-6.5.3.tgz", + "integrity": "sha512-udnqVQitxC7QWADSPDOxVWULkLvKUWrDapn5i53HE4DPRVgs+Y5rr4bo25qEl8jSh+0l2cToJgGMx+clxPM3+w==", + "license": "MIT", + "dependencies": { + "countup.js": "^2.8.0" + }, + "peerDependencies": { + "react": ">= 16.3.0" + } + }, + "node_modules/react-datepicker": { + "version": "8.7.0", + "resolved": "https://registry.npmjs.org/react-datepicker/-/react-datepicker-8.7.0.tgz", + "integrity": "sha512-r5OJbiLWc3YiVNy69Kau07/aVgVGsFVMA6+nlqCV7vyQ8q0FUOnJ+wAI4CgVxHejG3i5djAEiebrF8/Eip4rIw==", + "license": "MIT", + "dependencies": { + "@floating-ui/react": "^0.27.15", + "clsx": "^2.1.1", + "date-fns": "^4.1.0" + }, + "peerDependencies": { + "react": "^16.9.0 || ^17 || ^18 || ^19 || ^19.0.0-rc", + "react-dom": "^16.9.0 || ^17 || ^18 || ^19 || ^19.0.0-rc" + } + }, + "node_modules/react-day-picker": { + "version": "9.9.0", + "resolved": "https://registry.npmjs.org/react-day-picker/-/react-day-picker-9.9.0.tgz", + "integrity": "sha512-NtkJbuX6cl/VaGNb3sVVhmMA6LSMnL5G3xNL+61IyoZj0mUZFWTg4hmj7PHjIQ8MXN9dHWhUHFoJWG6y60DKSg==", + "license": "MIT", + "dependencies": { + "@date-fns/tz": "^1.4.1", + "date-fns": "^4.1.0", + "date-fns-jalali": "^4.1.0-0" + }, + "engines": { + "node": ">=18" + }, + "funding": { + "type": "individual", + "url": "https://github.com/sponsors/gpbl" + }, + "peerDependencies": { + "react": ">=16.8.0" + } + }, + "node_modules/react-dnd": { + "version": "14.0.5", + "resolved": "https://registry.npmjs.org/react-dnd/-/react-dnd-14.0.5.tgz", + "integrity": "sha512-9i1jSgbyVw0ELlEVt/NkCUkxy1hmhJOkePoCH713u75vzHGyXhPDm28oLfc2NMSBjZRM1Y+wRjHXJT3sPrTy+A==", + "license": "MIT", + "dependencies": { + "@react-dnd/invariant": "^2.0.0", + "@react-dnd/shallowequal": "^2.0.0", + "dnd-core": "14.0.1", + "fast-deep-equal": "^3.1.3", + "hoist-non-react-statics": "^3.3.2" + }, + "peerDependencies": { + "@types/hoist-non-react-statics": ">= 3.3.1", + "@types/node": ">= 12", + "@types/react": ">= 16", + "react": ">= 16.14" + }, + "peerDependenciesMeta": { + "@types/hoist-non-react-statics": { + "optional": true + }, + "@types/node": { + "optional": true + }, + "@types/react": { + "optional": true + } + } + }, + "node_modules/react-dnd-html5-backend": { + "version": "14.1.0", + "resolved": "https://registry.npmjs.org/react-dnd-html5-backend/-/react-dnd-html5-backend-14.1.0.tgz", + "integrity": "sha512-6ONeqEC3XKVf4eVmMTe0oPds+c5B9Foyj8p/ZKLb7kL2qh9COYxiBHv3szd6gztqi/efkmriywLUVlPotqoJyw==", + "license": "MIT", + "dependencies": { + "dnd-core": "14.0.1" + } + }, + "node_modules/react-dom": { + "version": "19.1.1", + "resolved": "https://registry.npmjs.org/react-dom/-/react-dom-19.1.1.tgz", + "integrity": "sha512-Dlq/5LAZgF0Gaz6yiqZCf6VCcZs1ghAJyrsu84Q/GT0gV+mCxbfmKNoGRKBYMJ8IEdGPqu49YWXD02GCknEDkw==", + "license": "MIT", + "dependencies": { + "scheduler": "^0.26.0" + }, + "peerDependencies": { + "react": "^19.1.1" + } + }, + "node_modules/react-dropzone": { + "version": "14.3.8", + "resolved": "https://registry.npmjs.org/react-dropzone/-/react-dropzone-14.3.8.tgz", + "integrity": "sha512-sBgODnq+lcA4P296DY4wacOZz3JFpD99fp+hb//iBO2HHnyeZU3FwWyXJ6salNpqQdsZrgMrotuko/BdJMV8Ug==", + "license": "MIT", + "dependencies": { + "attr-accept": "^2.2.4", + "file-selector": "^2.1.0", + "prop-types": "^15.8.1" + }, + "engines": { + "node": ">= 10.13" + }, + "peerDependencies": { + "react": ">= 16.8 || 18.0.0" + } + }, + "node_modules/react-filepond": { + "version": "7.1.3", + "resolved": "https://registry.npmjs.org/react-filepond/-/react-filepond-7.1.3.tgz", + "integrity": "sha512-uQOCZt+YXnBfYn6OxK6vsgSoUROkBu/ZahcfIJnK94c1ZeSAS84L/XKDADq/8Adx/Lz88VtVWvUpTXnNpmjHFQ==", + "license": "MIT", + "peerDependencies": { + "filepond": ">=3.7.x < 5.x", + "react": "16 - 19", + "react-dom": "16 - 19" + } + }, + "node_modules/react-flatpickr": { + "version": "4.0.11", + "resolved": "https://registry.npmjs.org/react-flatpickr/-/react-flatpickr-4.0.11.tgz", + "integrity": "sha512-S0TAu8eUeJgN8lZ0Efi41WGPM/tPPUvrveXQ8CAUO60+7TTrF5Ehyv8fvPVagKCqJahY7hXYERM7XfH2hSAWdg==", + "license": "MIT", + "dependencies": { + "flatpickr": "^4.6.13" + }, + "peerDependencies": { + "react": ">= 16 <= 19" + } + }, + "node_modules/react-hook-form": { + "version": "7.62.0", + "resolved": "https://registry.npmjs.org/react-hook-form/-/react-hook-form-7.62.0.tgz", + "integrity": "sha512-7KWFejc98xqG/F4bAxpL41NB3o1nnvQO1RWZT3TqRZYL8RryQETGfEdVnJN2fy1crCiBLLjkRBVK05j24FxJGA==", + "license": "MIT", + "engines": { + "node": ">=18.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/react-hook-form" + }, + "peerDependencies": { + "react": "^16.8.0 || ^17 || ^18 || ^19" + } + }, + "node_modules/react-icons": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/react-icons/-/react-icons-5.5.0.tgz", + "integrity": "sha512-MEFcXdkP3dLo8uumGI5xN3lDFNsRtrjbOEKDLD7yv76v4wpnEq2Lt2qeHaQOr34I/wPN3s3+N08WkQ+CW37Xiw==", + "license": "MIT", + "peerDependencies": { + "react": "*" + } + }, + "node_modules/react-is": { + "version": "18.3.1", + "resolved": "https://registry.npmjs.org/react-is/-/react-is-18.3.1.tgz", + "integrity": "sha512-/LLMVyas0ljjAtoYiPqYiL8VWXzUUdThrmU5+n20DZv+a+ClRoevUzw5JxU+Ieh5/c87ytoTBV9G1FiKfNJdmg==", + "license": "MIT" + }, + "node_modules/react-leaflet": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/react-leaflet/-/react-leaflet-5.0.0.tgz", + "integrity": "sha512-CWbTpr5vcHw5bt9i4zSlPEVQdTVcML390TjeDG0cK59z1ylexpqC6M1PJFjV8jD7CF+ACBFsLIDs6DRMoLEofw==", + "license": "Hippocratic-2.1", + "dependencies": { + "@react-leaflet/core": "^3.0.0" + }, + "peerDependencies": { + "leaflet": "^1.9.0", + "react": "^19.0.0", + "react-dom": "^19.0.0" + } + }, + "node_modules/react-lifecycles-compat": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/react-lifecycles-compat/-/react-lifecycles-compat-3.0.4.tgz", + "integrity": "sha512-fBASbA6LnOU9dOU2eW7aQ8xmYBSXUIWr+UmF9b1efZBazGNO+rcXT/icdKnYm2pTwcRylVUYwW7H1PHfLekVzA==", + "license": "MIT" + }, + "node_modules/react-number-format": { + "version": "5.4.4", + "resolved": "https://registry.npmjs.org/react-number-format/-/react-number-format-5.4.4.tgz", + "integrity": "sha512-wOmoNZoOpvMminhifQYiYSTCLUDOiUbBunrMrMjA+dV52sY+vck1S4UhR6PkgnoCquvvMSeJjErXZ4qSaWCliA==", + "license": "MIT", + "peerDependencies": { + "react": "^0.14 || ^15.0.0 || ^16.0.0 || ^17.0.0 || ^18.0.0 || ^19.0.0", + "react-dom": "^0.14 || ^15.0.0 || ^16.0.0 || ^17.0.0 || ^18.0.0 || ^19.0.0" + } + }, + "node_modules/react-password-checklist": { + "version": "1.8.1", + "resolved": "https://registry.npmjs.org/react-password-checklist/-/react-password-checklist-1.8.1.tgz", + "integrity": "sha512-QHIU/OejxoH4/cIfYLHaHLb+yYc8mtL0Vr4HTmULxQg3ZNdI9Ni/yYf7pwLBgsUh4sseKCV/GzzYHWpHqejTGw==", + "license": "MIT", + "peerDependencies": { + "react": ">16.0.0-alpha || >17.0.0-alpha || >18.0.0-alpha" + } + }, + "node_modules/react-pdf": { + "version": "9.2.1", + "resolved": "https://registry.npmjs.org/react-pdf/-/react-pdf-9.2.1.tgz", + "integrity": "sha512-AJt0lAIkItWEZRA5d/mO+Om4nPCuTiQ0saA+qItO967DTjmGjnhmF+Bi2tL286mOTfBlF5CyLzJ35KTMaDoH+A==", + "license": "MIT", + "dependencies": { + "clsx": "^2.0.0", + "dequal": "^2.0.3", + "make-cancellable-promise": "^1.3.1", + "make-event-props": "^1.6.0", + "merge-refs": "^1.3.0", + "pdfjs-dist": "4.8.69", + "tiny-invariant": "^1.0.0", + "warning": "^4.0.0" + }, + "funding": { + "url": "https://github.com/wojtekmaj/react-pdf?sponsor=1" + }, + "peerDependencies": { + "@types/react": "^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0", + "react": "^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0", + "react-dom": "^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + } + } + }, + "node_modules/react-quill-new": { + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/react-quill-new/-/react-quill-new-3.6.0.tgz", + "integrity": "sha512-weU6YfB2+7Cujw5Hjgmi0aN/qJd3B6ADWrxgUJMp2MO3tEvKX5kfB0sg3P0UdOVfU0z8icsKFzlnEIpeW1mLhw==", + "license": "MIT", + "dependencies": { + "lodash-es": "^4.17.21", + "quill": "~2.0.2" + }, + "peerDependencies": { + "quill-delta": "^5.1.0", + "react": "^16 || ^17 || ^18 || ^19", + "react-dom": "^16 || ^17 || ^18 || ^19" + } + }, + "node_modules/react-range": { + "version": "1.10.0", + "resolved": "https://registry.npmjs.org/react-range/-/react-range-1.10.0.tgz", + "integrity": "sha512-kDo0LiBUHIQIP8menx0UoxTnHr7UXBYpIYl/DR9jCaO1o29VwvCLpkP/qOTNQz5hkJadPg1uEM07XJcJ1XGoKw==", + "license": "MIT", + "peerDependencies": { + "react": "*", + "react-dom": "*" + } + }, + "node_modules/react-redux": { + "version": "9.2.0", + "resolved": "https://registry.npmjs.org/react-redux/-/react-redux-9.2.0.tgz", + "integrity": "sha512-ROY9fvHhwOD9ySfrF0wmvu//bKCQ6AeZZq1nJNtbDC+kk5DuSuNX/n6YWYF/SYy7bSba4D4FSz8DJeKY/S/r+g==", + "license": "MIT", + "dependencies": { + "@types/use-sync-external-store": "^0.0.6", + "use-sync-external-store": "^1.4.0" + }, + "peerDependencies": { + "@types/react": "^18.2.25 || ^19", + "react": "^18.0 || ^19", + "redux": "^5.0.0" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + }, + "redux": { + "optional": true + } + } + }, + "node_modules/react-refresh": { + "version": "0.17.0", + "resolved": "https://registry.npmjs.org/react-refresh/-/react-refresh-0.17.0.tgz", + "integrity": "sha512-z6F7K9bV85EfseRCp2bzrpyQ0Gkw1uLoCel9XBVWPg/TjRj94SkJzUTGfOa4bs7iJvBWtQG0Wq7wnI0syw3EBQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/react-router": { + "version": "7.8.2", + "resolved": "https://registry.npmjs.org/react-router/-/react-router-7.8.2.tgz", + "integrity": "sha512-7M2fR1JbIZ/jFWqelpvSZx+7vd7UlBTfdZqf6OSdF9g6+sfdqJDAWcak6ervbHph200ePlu+7G8LdoiC3ReyAQ==", + "license": "MIT", + "dependencies": { + "cookie": "^1.0.1", + "set-cookie-parser": "^2.6.0" + }, + "engines": { + "node": ">=20.0.0" + }, + "peerDependencies": { + "react": ">=18", + "react-dom": ">=18" + }, + "peerDependenciesMeta": { + "react-dom": { + "optional": true + } + } + }, + "node_modules/react-select": { + "version": "5.10.2", + "resolved": "https://registry.npmjs.org/react-select/-/react-select-5.10.2.tgz", + "integrity": "sha512-Z33nHdEFWq9tfnfVXaiM12rbJmk+QjFEztWLtmXqQhz6Al4UZZ9xc0wiatmGtUOCCnHN0WizL3tCMYRENX4rVQ==", + "license": "MIT", + "dependencies": { + "@babel/runtime": "^7.12.0", + "@emotion/cache": "^11.4.0", + "@emotion/react": "^11.8.1", + "@floating-ui/dom": "^1.0.1", + "@types/react-transition-group": "^4.4.0", + "memoize-one": "^6.0.0", + "prop-types": "^15.6.0", + "react-transition-group": "^4.3.0", + "use-isomorphic-layout-effect": "^1.2.0" + }, + "peerDependencies": { + "react": "^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0", + "react-dom": "^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0" + } + }, + "node_modules/react-sortablejs": { + "version": "6.1.4", + "resolved": "https://registry.npmjs.org/react-sortablejs/-/react-sortablejs-6.1.4.tgz", + "integrity": "sha512-fc7cBosfhnbh53Mbm6a45W+F735jwZ1UFIYSrIqcO/gRIFoDyZeMtgKlpV4DdyQfbCzdh5LoALLTDRxhMpTyXQ==", + "license": "MIT", + "dependencies": { + "classnames": "2.3.1", + "tiny-invariant": "1.2.0" + }, + "peerDependencies": { + "@types/sortablejs": "1", + "react": ">=16.9.0", + "react-dom": ">=16.9.0", + "sortablejs": "1" + } + }, + "node_modules/react-sortablejs/node_modules/classnames": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/classnames/-/classnames-2.3.1.tgz", + "integrity": "sha512-OlQdbZ7gLfGarSqxesMesDa5uz7KFbID8Kpq/SxIoNGDqY8lSYs0D+hhtBXhcdB3rcbXArFr7vlHheLk1voeNA==", + "license": "MIT" + }, + "node_modules/react-sortablejs/node_modules/tiny-invariant": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/tiny-invariant/-/tiny-invariant-1.2.0.tgz", + "integrity": "sha512-1Uhn/aqw5C6RI4KejVeTg6mIS7IqxnLJ8Mv2tV5rTc0qWobay7pDUz6Wi392Cnc8ak1H0F2cjoRzb2/AW4+Fvg==", + "license": "MIT" + }, + "node_modules/react-transition-group": { + "version": "4.4.5", + "resolved": "https://registry.npmjs.org/react-transition-group/-/react-transition-group-4.4.5.tgz", + "integrity": "sha512-pZcd1MCJoiKiBR2NRxeCRg13uCXbydPnmB4EOeRrY7480qNWO8IIgQG6zlDkm6uRMsURXPuKq0GWtiM59a5Q6g==", + "license": "BSD-3-Clause", + "dependencies": { + "@babel/runtime": "^7.5.5", + "dom-helpers": "^5.0.1", + "loose-envify": "^1.4.0", + "prop-types": "^15.6.2" + }, + "peerDependencies": { + "react": ">=16.6.0", + "react-dom": ">=16.6.0" + } + }, + "node_modules/react-use-wizard": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/react-use-wizard/-/react-use-wizard-2.3.0.tgz", + "integrity": "sha512-z06pQNZ18FvoK+ZDW50hOf0uOySo0Hhd7H4y0MLyk/tBCwpUKGBeULosORBVhipUaWihNLpLJxwH5f+85Qt5XA==", + "license": "MIT", + "engines": { + "node": ">=10" + }, + "peerDependencies": { + "react": ">=16.8.0", + "react-dom": ">=16.8.0" + } + }, + "node_modules/react-window": { + "version": "1.8.11", + "resolved": "https://registry.npmjs.org/react-window/-/react-window-1.8.11.tgz", + "integrity": "sha512-+SRbUVT2scadgFSWx+R1P754xHPEqvcfSfVX10QYg6POOz+WNgkN48pS+BtZNIMGiL1HYrSEiCkwsMS15QogEQ==", + "license": "MIT", + "dependencies": { + "@babel/runtime": "^7.0.0", + "memoize-one": ">=3.1.1 <6" + }, + "engines": { + "node": ">8.0.0" + }, + "peerDependencies": { + "react": "^15.0.0 || ^16.0.0 || ^17.0.0 || ^18.0.0 || ^19.0.0", + "react-dom": "^15.0.0 || ^16.0.0 || ^17.0.0 || ^18.0.0 || ^19.0.0" + } + }, + "node_modules/react-window/node_modules/memoize-one": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/memoize-one/-/memoize-one-5.2.1.tgz", + "integrity": "sha512-zYiwtZUcYyXKo/np96AGZAckk+FWWsUdJ3cHGGmld7+AhvcWmQyGCYUh1hc4Q/pkOhb65dQR/pqCyK0cOaHz4Q==", + "license": "MIT" + }, + "node_modules/readable-stream": { + "version": "2.3.8", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.8.tgz", + "integrity": "sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA==", + "license": "MIT", + "dependencies": { + "core-util-is": "~1.0.0", + "inherits": "~2.0.3", + "isarray": "~1.0.0", + "process-nextick-args": "~2.0.0", + "safe-buffer": "~5.1.1", + "string_decoder": "~1.1.1", + "util-deprecate": "~1.0.1" + } + }, + "node_modules/readdirp": { + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.6.0.tgz", + "integrity": "sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==", + "dev": true, + "license": "MIT", + "dependencies": { + "picomatch": "^2.2.1" + }, + "engines": { + "node": ">=8.10.0" + } + }, + "node_modules/redux": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/redux/-/redux-5.0.1.tgz", + "integrity": "sha512-M9/ELqF6fy8FwmkpnF0S3YKOqMyoWJ4+CS5Efg2ct3oY9daQvd/Pc71FpGZsVsbl3Cpb+IIcjBDUnnyBdQbq4w==", + "license": "MIT" + }, + "node_modules/regexp.prototype.flags": { + "version": "1.5.4", + "resolved": "https://registry.npmjs.org/regexp.prototype.flags/-/regexp.prototype.flags-1.5.4.tgz", + "integrity": "sha512-dYqgNSZbDwkaJ2ceRd9ojCGjBq+mOm9LmtXnAnEGyHhN/5R7iDW2TRw3h+o/jCFxus3P2LfWIIiwowAjANm7IA==", + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.8", + "define-properties": "^1.2.1", + "es-errors": "^1.3.0", + "get-proto": "^1.0.1", + "gopd": "^1.2.0", + "set-function-name": "^2.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/resolve": { + "version": "1.22.10", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.10.tgz", + "integrity": "sha512-NPRy+/ncIMeDlTAsuqwKIiferiawhefFJtkNSW0qZJEqMEb+qBt/77B/jGeeek+F0uOeN05CDa6HXbbIgtVX4w==", + "license": "MIT", + "dependencies": { + "is-core-module": "^2.16.0", + "path-parse": "^1.0.7", + "supports-preserve-symlinks-flag": "^1.0.0" + }, + "bin": { + "resolve": "bin/resolve" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/resolve-from": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz", + "integrity": "sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==", + "license": "MIT", + "engines": { + "node": ">=4" + } + }, + "node_modules/reusify": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/reusify/-/reusify-1.1.0.tgz", + "integrity": "sha512-g6QUff04oZpHs0eG5p83rFLhHeV00ug/Yf9nZM6fLeUrPguBTkTQOdpAWWspMh55TZfVQDPaN3NQJfbVRAxdIw==", + "dev": true, + "license": "MIT", + "engines": { + "iojs": ">=1.0.0", + "node": ">=0.10.0" + } + }, + "node_modules/rollup": { + "version": "4.48.1", + "resolved": "https://registry.npmjs.org/rollup/-/rollup-4.48.1.tgz", + "integrity": "sha512-jVG20NvbhTYDkGAty2/Yh7HK6/q3DGSRH4o8ALKGArmMuaauM9kLfoMZ+WliPwA5+JHr2lTn3g557FxBV87ifg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/estree": "1.0.8" + }, + "bin": { + "rollup": "dist/bin/rollup" + }, + "engines": { + "node": ">=18.0.0", + "npm": ">=8.0.0" + }, + "optionalDependencies": { + "@rollup/rollup-android-arm-eabi": "4.48.1", + "@rollup/rollup-android-arm64": "4.48.1", + "@rollup/rollup-darwin-arm64": "4.48.1", + "@rollup/rollup-darwin-x64": "4.48.1", + "@rollup/rollup-freebsd-arm64": "4.48.1", + "@rollup/rollup-freebsd-x64": "4.48.1", + "@rollup/rollup-linux-arm-gnueabihf": "4.48.1", + "@rollup/rollup-linux-arm-musleabihf": "4.48.1", + "@rollup/rollup-linux-arm64-gnu": "4.48.1", + "@rollup/rollup-linux-arm64-musl": "4.48.1", + "@rollup/rollup-linux-loongarch64-gnu": "4.48.1", + "@rollup/rollup-linux-ppc64-gnu": "4.48.1", + "@rollup/rollup-linux-riscv64-gnu": "4.48.1", + "@rollup/rollup-linux-riscv64-musl": "4.48.1", + "@rollup/rollup-linux-s390x-gnu": "4.48.1", + "@rollup/rollup-linux-x64-gnu": "4.48.1", + "@rollup/rollup-linux-x64-musl": "4.48.1", + "@rollup/rollup-win32-arm64-msvc": "4.48.1", + "@rollup/rollup-win32-ia32-msvc": "4.48.1", + "@rollup/rollup-win32-x64-msvc": "4.48.1", + "fsevents": "~2.3.2" + } + }, + "node_modules/run-parallel": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/run-parallel/-/run-parallel-1.2.0.tgz", + "integrity": "sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "license": "MIT", + "dependencies": { + "queue-microtask": "^1.2.2" + } + }, + "node_modules/safe-buffer": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", + "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", + "license": "MIT" + }, + "node_modules/safer-buffer": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", + "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==", + "license": "MIT" + }, + "node_modules/sass": { + "version": "1.77.6", + "resolved": "https://registry.npmjs.org/sass/-/sass-1.77.6.tgz", + "integrity": "sha512-ByXE1oLD79GVq9Ht1PeHWCPMPB8XHpBuz1r85oByKHjZY6qV6rWnQovQzXJXuQ/XyE1Oj3iPk3lo28uzaRA2/Q==", + "dev": true, + "license": "MIT", + "dependencies": { + "chokidar": ">=3.0.0 <4.0.0", + "immutable": "^4.0.0", + "source-map-js": ">=0.6.2 <2.0.0" + }, + "bin": { + "sass": "sass.js" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/sax": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/sax/-/sax-1.4.1.tgz", + "integrity": "sha512-+aWOz7yVScEGoKNd4PA10LZ8sk0A/z5+nXQG5giUO5rprX9jgYsTdov9qCchZiPIZezbZH+jRut8nPodFAX4Jg==", + "license": "ISC" + }, + "node_modules/scheduler": { + "version": "0.26.0", + "resolved": "https://registry.npmjs.org/scheduler/-/scheduler-0.26.0.tgz", + "integrity": "sha512-NlHwttCI/l5gCPR3D1nNXtWABUmBwvZpEQiD4IXSbIDq8BzLIK/7Ir5gTFSGZDUu37K5cMNp0hFtzO38sC7gWA==", + "license": "MIT" + }, + "node_modules/scroll-into-view-if-needed": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/scroll-into-view-if-needed/-/scroll-into-view-if-needed-3.1.0.tgz", + "integrity": "sha512-49oNpRjWRvnU8NyGVmUaYG4jtTkNonFZI86MmGRDqBphEK2EXT9gdEUoQPZhuBM8yWHxCWbobltqYO5M4XrUvQ==", + "license": "MIT", + "dependencies": { + "compute-scroll-into-view": "^3.0.2" + } + }, + "node_modules/semver": { + "version": "6.3.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", + "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", + "dev": true, + "license": "ISC", + "bin": { + "semver": "bin/semver.js" + } + }, + "node_modules/set-cookie-parser": { + "version": "2.7.1", + "resolved": "https://registry.npmjs.org/set-cookie-parser/-/set-cookie-parser-2.7.1.tgz", + "integrity": "sha512-IOc8uWeOZgnb3ptbCURJWNjWUPcO3ZnTTdzsurqERrP6nPyv+paC55vJM0LpOlT2ne+Ix+9+CRG1MNLlyZ4GjQ==", + "license": "MIT" + }, + "node_modules/set-function-length": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/set-function-length/-/set-function-length-1.2.2.tgz", + "integrity": "sha512-pgRc4hJ4/sNjWCSS9AmnS40x3bNMDTknHgL5UaMBTMyJnU90EgWh1Rz+MC9eFu4BuN/UwZjKQuY/1v3rM7HMfg==", + "license": "MIT", + "dependencies": { + "define-data-property": "^1.1.4", + "es-errors": "^1.3.0", + "function-bind": "^1.1.2", + "get-intrinsic": "^1.2.4", + "gopd": "^1.0.1", + "has-property-descriptors": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/set-function-name": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/set-function-name/-/set-function-name-2.0.2.tgz", + "integrity": "sha512-7PGFlmtwsEADb0WYyvCMa1t+yke6daIG4Wirafur5kcf+MhUnPms1UeR0CKQdTZD81yESwMHbtn+TR+dMviakQ==", + "license": "MIT", + "dependencies": { + "define-data-property": "^1.1.4", + "es-errors": "^1.3.0", + "functions-have-names": "^1.2.3", + "has-property-descriptors": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/setimmediate": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/setimmediate/-/setimmediate-1.0.5.tgz", + "integrity": "sha512-MATJdZp8sLqDl/68LfQmbP8zKPLQNV6BIZoIgrscFDQ+RsvK/BxeDQOgyxKKoh0y/8h3BqVFnCqQ/gd+reiIXA==", + "license": "MIT" + }, + "node_modules/shebang-command": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", + "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==", + "dev": true, + "license": "MIT", + "dependencies": { + "shebang-regex": "^3.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/shebang-regex": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz", + "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/simple-concat": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/simple-concat/-/simple-concat-1.0.1.tgz", + "integrity": "sha512-cSFtAPtRhljv69IK0hTVZQ+OfE9nePi/rtJmw5UjHeVyVroEqJXP1sFztKUy1qU+xvz3u/sfYJLa947b7nAN2Q==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "license": "MIT", + "optional": true + }, + "node_modules/simple-get": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/simple-get/-/simple-get-4.0.1.tgz", + "integrity": "sha512-brv7p5WgH0jmQJr1ZDDfKDOSeWWg+OVypG99A/5vYGPqJ6pxiaHLy8nxtFjBA7oMa01ebA9gfh1uMCFqOuXxvA==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "license": "MIT", + "optional": true, + "dependencies": { + "decompress-response": "^6.0.0", + "once": "^1.3.1", + "simple-concat": "^1.0.0" + } + }, + "node_modules/simplebar-core": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/simplebar-core/-/simplebar-core-1.3.2.tgz", + "integrity": "sha512-qKgTTuTqapjsFGkNhCjyPhysnbZGpQqNmjk0nOYjFN5ordC/Wjvg+RbYCyMSnW60l/Z0ZS82GbNltly6PMUH1w==", + "license": "MIT", + "dependencies": { + "lodash": "^4.17.21", + "lodash-es": "^4.17.21" + } + }, + "node_modules/simplebar-react": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/simplebar-react/-/simplebar-react-3.3.0.tgz", + "integrity": "sha512-sxzy+xRuU41He4tT4QLGYutchtOuye/xxVeq7xhyOiwMiHNK1ZpvbOTyy+7P0i7gfpXLGTJ8Bep8+4Mhdgtz/g==", + "license": "MIT", + "dependencies": { + "simplebar-core": "^1.3.0" + }, + "peerDependencies": { + "react": ">=16.8.0" + } + }, + "node_modules/sortablejs": { + "version": "1.15.6", + "resolved": "https://registry.npmjs.org/sortablejs/-/sortablejs-1.15.6.tgz", + "integrity": "sha512-aNfiuwMEpfBM/CN6LY0ibyhxPfPbyFeBTYJKCvzkJ2GkUpazIt3H+QIPAMHwqQ7tMKaHz1Qj+rJJCqljnf4p3A==", + "license": "MIT" + }, + "node_modules/source-map": { + "version": "0.5.7", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", + "integrity": "sha512-LbrmJOMUSdEVxIKvdcJzQC+nQhe8FUZQTXQy6+I75skNgn3OoQ0DZA8YnFa7gp8tqtL3KPf1kmo0R5DoApeSGQ==", + "license": "BSD-3-Clause", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/source-map-js": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.2.1.tgz", + "integrity": "sha512-UXWMKhLOwVKb728IUtQPXxfYU+usdybtUrK/8uGE8CQMvrhOpwvzDBwj0QhSL7MQc7vIsISBG8VQ8+IDQxpfQA==", + "dev": true, + "license": "BSD-3-Clause", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/spin.js": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/spin.js/-/spin.js-4.1.2.tgz", + "integrity": "sha512-ua/yEpxEwyEUWs57tMQYdik/KJ12sQRyMXjSlK/Ai927aEUDVY3FXUi4ml4VvlLCTQNIjC6tHyjSLBrJzFAqMA==", + "license": "MIT" + }, + "node_modules/string_decoder": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", + "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", + "license": "MIT", + "dependencies": { + "safe-buffer": "~5.1.0" + } + }, + "node_modules/strip-json-comments": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.1.tgz", + "integrity": "sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/stylis": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/stylis/-/stylis-4.2.0.tgz", + "integrity": "sha512-Orov6g6BB1sDfYgzWfTHDOxamtX1bE/zo104Dh9e6fqJ3PooipYyfJ0pUmrZO2wAvO8YbEyeFrkV91XTsGMSrw==", + "license": "MIT" + }, + "node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, + "license": "MIT", + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/supports-preserve-symlinks-flag": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz", + "integrity": "sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==", + "license": "MIT", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/sweetalert2": { + "version": "11.22.4", + "resolved": "https://registry.npmjs.org/sweetalert2/-/sweetalert2-11.22.4.tgz", + "integrity": "sha512-JwcRODfozxiKmspFp+xctZ2izAmLAKbRPcoLMEW7LdugN/YmNrX1LT7hdBW87qsgupEO1ukBBuB17KzKFKW0tg==", + "license": "MIT", + "funding": { + "type": "individual", + "url": "https://github.com/sponsors/limonte" + } + }, + "node_modules/sweetalert2-react-content": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/sweetalert2-react-content/-/sweetalert2-react-content-5.1.0.tgz", + "integrity": "sha512-SBh41SdyHDY9NzwrIG6LACbClCMxIlEFP86tGVr/B4zGD4H2gGXB8o7UAJRc/RtBd/iQL9hIvuCAkrk0AgKEMA==", + "license": "MIT", + "peerDependencies": { + "react": "^18.0.0 || ^19.0.0", + "react-dom": "^18.0.0 || ^19.0.0", + "sweetalert2": "^11.0.0" + } + }, + "node_modules/tabbable": { + "version": "6.2.0", + "resolved": "https://registry.npmjs.org/tabbable/-/tabbable-6.2.0.tgz", + "integrity": "sha512-Cat63mxsVJlzYvN51JmVXIgNoUokrIaT2zLclCXjRd8boZ0004U4KCs/sToJ75C6sdlByWxpYnb5Boif1VSFew==", + "license": "MIT" + }, + "node_modules/tar-fs": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/tar-fs/-/tar-fs-2.1.3.tgz", + "integrity": "sha512-090nwYJDmlhwFwEW3QQl+vaNnxsO2yVsd45eTKRBzSzu+hlb1w2K9inVq5b0ngXuLVqQ4ApvsUHHnu/zQNkWAg==", + "license": "MIT", + "optional": true, + "dependencies": { + "chownr": "^1.1.1", + "mkdirp-classic": "^0.5.2", + "pump": "^3.0.0", + "tar-stream": "^2.1.4" + } + }, + "node_modules/tar-stream": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/tar-stream/-/tar-stream-2.2.0.tgz", + "integrity": "sha512-ujeqbceABgwMZxEJnk2HDY2DlnUZ+9oEcb1KzTVfYHio0UE6dG71n60d8D2I4qNvleWrrXpmjpt7vZeF1LnMZQ==", + "license": "MIT", + "optional": true, + "dependencies": { + "bl": "^4.0.3", + "end-of-stream": "^1.4.1", + "fs-constants": "^1.0.0", + "inherits": "^2.0.3", + "readable-stream": "^3.1.1" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/tar-stream/node_modules/readable-stream": { + "version": "3.6.2", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.2.tgz", + "integrity": "sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==", + "license": "MIT", + "optional": true, + "dependencies": { + "inherits": "^2.0.3", + "string_decoder": "^1.1.1", + "util-deprecate": "^1.0.1" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/text-segmentation": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/text-segmentation/-/text-segmentation-1.0.3.tgz", + "integrity": "sha512-iOiPUo/BGnZ6+54OsWxZidGCsdU8YbE4PSpdPinp7DeMtUJNJBoJ/ouUSTJjHkh1KntHaltHl/gDs2FC4i5+Nw==", + "license": "MIT", + "dependencies": { + "utrie": "^1.0.2" + } + }, + "node_modules/tiny-case": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/tiny-case/-/tiny-case-1.0.3.tgz", + "integrity": "sha512-Eet/eeMhkO6TX8mnUteS9zgPbUMQa4I6Kkp5ORiBD5476/m+PIRiumP5tmh5ioJpH7k51Kehawy2UDfsnxxY8Q==", + "license": "MIT" + }, + "node_modules/tiny-inflate": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/tiny-inflate/-/tiny-inflate-1.0.3.tgz", + "integrity": "sha512-pkY1fj1cKHb2seWDy0B16HeWyczlJA9/WW3u3c4z/NiWDsO3DOU5D7nhTLE9CF0yXv/QZFY7sEJmj24dK+Rrqw==", + "license": "MIT" + }, + "node_modules/tiny-invariant": { + "version": "1.3.3", + "resolved": "https://registry.npmjs.org/tiny-invariant/-/tiny-invariant-1.3.3.tgz", + "integrity": "sha512-+FbBPE1o9QAYvviau/qC5SE3caw21q3xkvWKBtja5vgqOWIHHJ3ioaq1VPfn/Szqctz2bU/oYeKd9/z5BL+PVg==", + "license": "MIT" + }, + "node_modules/tinyglobby": { + "version": "0.2.14", + "resolved": "https://registry.npmjs.org/tinyglobby/-/tinyglobby-0.2.14.tgz", + "integrity": "sha512-tX5e7OM1HnYr2+a2C/4V0htOcSQcoSTH9KgJnVvNm5zm/cyEWKJ7j7YutsH9CxMdtOkkLFy2AHrMci9IM8IPZQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "fdir": "^6.4.4", + "picomatch": "^4.0.2" + }, + "engines": { + "node": ">=12.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/SuperchupuDev" + } + }, + "node_modules/tinyglobby/node_modules/fdir": { + "version": "6.5.0", + "resolved": "https://registry.npmjs.org/fdir/-/fdir-6.5.0.tgz", + "integrity": "sha512-tIbYtZbucOs0BRGqPJkshJUYdL+SDH7dVM8gjy+ERp3WAUjLEFJE+02kanyHtwjWOnwrKYBiwAmM0p4kLJAnXg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=12.0.0" + }, + "peerDependencies": { + "picomatch": "^3 || ^4" + }, + "peerDependenciesMeta": { + "picomatch": { + "optional": true + } + } + }, + "node_modules/tinyglobby/node_modules/picomatch": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-4.0.3.tgz", + "integrity": "sha512-5gTmgEY/sqK6gFXLIsQNH19lWb4ebPDLA4SdLP7dsWkIXHWlG66oPuVvXSGFPppYZz8ZDZq0dYYrbHfBCVUb1Q==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/jonschlinkert" + } + }, + "node_modules/to-regex-range": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", + "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "is-number": "^7.0.0" + }, + "engines": { + "node": ">=8.0" + } + }, + "node_modules/toposort": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/toposort/-/toposort-2.0.2.tgz", + "integrity": "sha512-0a5EOkAUp8D4moMi2W8ZF8jcga7BgZd91O/yabJCFY8az+XSzeGyTKs0Aoo897iV1Nj6guFq8orWDS96z91oGg==", + "license": "MIT" + }, + "node_modules/trie-memoize": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/trie-memoize/-/trie-memoize-1.2.0.tgz", + "integrity": "sha512-hEDLVEP1FCgaRtt0oZDJdz2lK9uK7WlB7ASswt9U9cqruSNueVigtRGxI97hevKlViqhAcRgNgzuY/m8FCCMcg==", + "license": "MIT" + }, + "node_modules/ts-api-utils": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/ts-api-utils/-/ts-api-utils-2.1.0.tgz", + "integrity": "sha512-CUgTZL1irw8u29bzrOD/nH85jqyc74D6SshFgujOIA7osm2Rz7dYH77agkx7H4FBNxDq7Cjf+IjaX/8zwFW+ZQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=18.12" + }, + "peerDependencies": { + "typescript": ">=4.8.4" + } + }, + "node_modules/tslib": { + "version": "2.8.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.8.1.tgz", + "integrity": "sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==", + "license": "0BSD" + }, + "node_modules/tunnel-agent": { + "version": "0.6.0", + "resolved": "https://registry.npmjs.org/tunnel-agent/-/tunnel-agent-0.6.0.tgz", + "integrity": "sha512-McnNiV1l8RYeY8tBgEpuodCC1mLUdbSN+CYBL7kJsJNInOP8UjDDEwdk6Mw60vdLLrr5NHKZhMAOSrR2NZuQ+w==", + "license": "Apache-2.0", + "optional": true, + "dependencies": { + "safe-buffer": "^5.0.1" + }, + "engines": { + "node": "*" + } + }, + "node_modules/type-check": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.4.0.tgz", + "integrity": "sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==", + "dev": true, + "license": "MIT", + "dependencies": { + "prelude-ls": "^1.2.1" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/type-fest": { + "version": "2.19.0", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-2.19.0.tgz", + "integrity": "sha512-RAH822pAdBgcNMAfWnCBU3CFZcfZ/i1eZjwFU/dsLKumyuuP3niueg2UAukXYF0E2AAoc82ZSSf9J0WQBinzHA==", + "license": "(MIT OR CC0-1.0)", + "engines": { + "node": ">=12.20" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/typescript": { + "version": "5.8.3", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.8.3.tgz", + "integrity": "sha512-p1diW6TqL9L07nNxvRMM7hMMw4c5XOo/1ibL4aAIGmSAt9slTE1Xgw5KWuof2uTOvCg9BY7ZRi+GaF+7sfgPeQ==", + "dev": true, + "license": "Apache-2.0", + "bin": { + "tsc": "bin/tsc", + "tsserver": "bin/tsserver" + }, + "engines": { + "node": ">=14.17" + } + }, + "node_modules/typescript-eslint": { + "version": "8.40.0", + "resolved": "https://registry.npmjs.org/typescript-eslint/-/typescript-eslint-8.40.0.tgz", + "integrity": "sha512-Xvd2l+ZmFDPEt4oj1QEXzA4A2uUK6opvKu3eGN9aGjB8au02lIVcLyi375w94hHyejTOmzIU77L8ol2sRg9n7Q==", + "dev": true, + "license": "MIT", + "dependencies": { + "@typescript-eslint/eslint-plugin": "8.40.0", + "@typescript-eslint/parser": "8.40.0", + "@typescript-eslint/typescript-estree": "8.40.0", + "@typescript-eslint/utils": "8.40.0" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependencies": { + "eslint": "^8.57.0 || ^9.0.0", + "typescript": ">=4.8.4 <6.0.0" + } + }, + "node_modules/uncontrollable": { + "version": "7.2.1", + "resolved": "https://registry.npmjs.org/uncontrollable/-/uncontrollable-7.2.1.tgz", + "integrity": "sha512-svtcfoTADIB0nT9nltgjujTi7BzVmwjZClOmskKu/E8FW9BXzg9os8OLr4f8Dlnk0rYWJIWr4wv9eKUXiQvQwQ==", + "license": "MIT", + "dependencies": { + "@babel/runtime": "^7.6.3", + "@types/react": ">=16.9.11", + "invariant": "^2.2.4", + "react-lifecycles-compat": "^3.0.4" + }, + "peerDependencies": { + "react": ">=15.0.0" + } + }, + "node_modules/undici-types": { + "version": "7.10.0", + "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-7.10.0.tgz", + "integrity": "sha512-t5Fy/nfn+14LuOc2KNYg75vZqClpAiqscVvMygNnlsHBFpSXdJaYtXMcdNLpl/Qvc3P2cB3s6lOV51nqsFq4ag==", + "devOptional": true, + "license": "MIT" + }, + "node_modules/unicode-properties": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/unicode-properties/-/unicode-properties-1.4.1.tgz", + "integrity": "sha512-CLjCCLQ6UuMxWnbIylkisbRj31qxHPAurvena/0iwSVbQ2G1VY5/HjV0IRabOEbDHlzZlRdCrD4NhB0JtU40Pg==", + "license": "MIT", + "dependencies": { + "base64-js": "^1.3.0", + "unicode-trie": "^2.0.0" + } + }, + "node_modules/unicode-trie": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/unicode-trie/-/unicode-trie-2.0.0.tgz", + "integrity": "sha512-x7bc76x0bm4prf1VLg79uhAzKw8DVboClSN5VxJuQ+LKDOVEW9CdH+VY7SP+vX7xCYQqzzgQpFqz15zeLvAtZQ==", + "license": "MIT", + "dependencies": { + "pako": "^0.2.5", + "tiny-inflate": "^1.0.0" + } + }, + "node_modules/unicode-trie/node_modules/pako": { + "version": "0.2.9", + "resolved": "https://registry.npmjs.org/pako/-/pako-0.2.9.tgz", + "integrity": "sha512-NUcwaKxUxWrZLpDG+z/xZaCgQITkA/Dv4V/T6bw7VON6l1Xz/VnrBqrYjZQ12TamKHzITTfOEIYUj48y2KXImA==", + "license": "MIT" + }, + "node_modules/update-browserslist-db": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.1.3.tgz", + "integrity": "sha512-UxhIZQ+QInVdunkDAaiazvvT/+fXL5Osr0JZlJulepYu6Jd7qJtDZjlur0emRlT71EN3ScPoE7gvsuIKKNavKw==", + "dev": true, + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/browserslist" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/browserslist" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "license": "MIT", + "dependencies": { + "escalade": "^3.2.0", + "picocolors": "^1.1.1" + }, + "bin": { + "update-browserslist-db": "cli.js" + }, + "peerDependencies": { + "browserslist": ">= 4.21.0" + } + }, + "node_modules/uri-js": { + "version": "4.4.1", + "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz", + "integrity": "sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==", + "dev": true, + "license": "BSD-2-Clause", + "dependencies": { + "punycode": "^2.1.0" + } + }, + "node_modules/use-isomorphic-layout-effect": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/use-isomorphic-layout-effect/-/use-isomorphic-layout-effect-1.2.1.tgz", + "integrity": "sha512-tpZZ+EX0gaghDAiFR37hj5MgY6ZN55kLiPkJsKxBMZ6GZdOSPJXiOzPM984oPYZ5AnehYx5WQp1+ME8I/P/pRA==", + "license": "MIT", + "peerDependencies": { + "react": "^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + } + } + }, + "node_modules/use-sync-external-store": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/use-sync-external-store/-/use-sync-external-store-1.5.0.tgz", + "integrity": "sha512-Rb46I4cGGVBmjamjphe8L/UnvJD+uPPtTkNvX5mZgqdbavhI4EbgIWJiIHXJ8bc/i9EQGPRh4DwEURJ552Do0A==", + "license": "MIT", + "peerDependencies": { + "react": "^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0" + } + }, + "node_modules/usehooks-ts": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/usehooks-ts/-/usehooks-ts-3.1.1.tgz", + "integrity": "sha512-I4diPp9Cq6ieSUH2wu+fDAVQO43xwtulo+fKEidHUwZPnYImbtkTjzIJYcDcJqxgmX31GVqNFURodvcgHcW0pA==", + "license": "MIT", + "dependencies": { + "lodash.debounce": "^4.0.8" + }, + "engines": { + "node": ">=16.15.0" + }, + "peerDependencies": { + "react": "^16.8.0 || ^17 || ^18 || ^19 || ^19.0.0-rc" + } + }, + "node_modules/util-deprecate": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", + "integrity": "sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==", + "license": "MIT" + }, + "node_modules/utrie": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/utrie/-/utrie-1.0.2.tgz", + "integrity": "sha512-1MLa5ouZiOmQzUbjbu9VmjLzn1QLXBhwpUa7kdLUQK+KQ5KA9I1vk5U4YHe/X2Ch7PYnJfWuWT+VbuxbGwljhw==", + "license": "MIT", + "dependencies": { + "base64-arraybuffer": "^1.0.2" + } + }, + "node_modules/vite": { + "version": "7.1.3", + "resolved": "https://registry.npmjs.org/vite/-/vite-7.1.3.tgz", + "integrity": "sha512-OOUi5zjkDxYrKhTV3V7iKsoS37VUM7v40+HuwEmcrsf11Cdx9y3DIr2Px6liIcZFwt3XSRpQvFpL3WVy7ApkGw==", + "dev": true, + "license": "MIT", + "dependencies": { + "esbuild": "^0.25.0", + "fdir": "^6.5.0", + "picomatch": "^4.0.3", + "postcss": "^8.5.6", + "rollup": "^4.43.0", + "tinyglobby": "^0.2.14" + }, + "bin": { + "vite": "bin/vite.js" + }, + "engines": { + "node": "^20.19.0 || >=22.12.0" + }, + "funding": { + "url": "https://github.com/vitejs/vite?sponsor=1" + }, + "optionalDependencies": { + "fsevents": "~2.3.3" + }, + "peerDependencies": { + "@types/node": "^20.19.0 || >=22.12.0", + "jiti": ">=1.21.0", + "less": "^4.0.0", + "lightningcss": "^1.21.0", + "sass": "^1.70.0", + "sass-embedded": "^1.70.0", + "stylus": ">=0.54.8", + "sugarss": "^5.0.0", + "terser": "^5.16.0", + "tsx": "^4.8.1", + "yaml": "^2.4.2" + }, + "peerDependenciesMeta": { + "@types/node": { + "optional": true + }, + "jiti": { + "optional": true + }, + "less": { + "optional": true + }, + "lightningcss": { + "optional": true + }, + "sass": { + "optional": true + }, + "sass-embedded": { + "optional": true + }, + "stylus": { + "optional": true + }, + "sugarss": { + "optional": true + }, + "terser": { + "optional": true + }, + "tsx": { + "optional": true + }, + "yaml": { + "optional": true + } + } + }, + "node_modules/vite/node_modules/fdir": { + "version": "6.5.0", + "resolved": "https://registry.npmjs.org/fdir/-/fdir-6.5.0.tgz", + "integrity": "sha512-tIbYtZbucOs0BRGqPJkshJUYdL+SDH7dVM8gjy+ERp3WAUjLEFJE+02kanyHtwjWOnwrKYBiwAmM0p4kLJAnXg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=12.0.0" + }, + "peerDependencies": { + "picomatch": "^3 || ^4" + }, + "peerDependenciesMeta": { + "picomatch": { + "optional": true + } + } + }, + "node_modules/vite/node_modules/picomatch": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-4.0.3.tgz", + "integrity": "sha512-5gTmgEY/sqK6gFXLIsQNH19lWb4ebPDLA4SdLP7dsWkIXHWlG66oPuVvXSGFPppYZz8ZDZq0dYYrbHfBCVUb1Q==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/jonschlinkert" + } + }, + "node_modules/warning": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/warning/-/warning-4.0.3.tgz", + "integrity": "sha512-rpJyN222KWIvHJ/F53XSZv0Zl/accqHR8et1kpaMTD/fLCRxtV8iX8czMzY7sVZupTI3zcUTg8eycS2kNF9l6w==", + "license": "MIT", + "dependencies": { + "loose-envify": "^1.0.0" + } + }, + "node_modules/which": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", + "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", + "dev": true, + "license": "ISC", + "dependencies": { + "isexe": "^2.0.0" + }, + "bin": { + "node-which": "bin/node-which" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/word-wrap": { + "version": "1.2.5", + "resolved": "https://registry.npmjs.org/word-wrap/-/word-wrap-1.2.5.tgz", + "integrity": "sha512-BN22B5eaMMI9UMtjrGd5g5eCYPpCPDUy0FJXbYsaT5zYxjFOckS53SQDE3pWkVoWpHXVb3BrYcEN4Twa55B5cA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/wrappy": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", + "integrity": "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==", + "license": "ISC", + "optional": true + }, + "node_modules/xmldoc": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/xmldoc/-/xmldoc-2.0.2.tgz", + "integrity": "sha512-UiRwoSStEXS3R+YE8OqYv3jebza8cBBAI2y8g3B15XFkn3SbEOyyLnmPHjLBPZANrPJKEzxxB7A3XwcLikQVlQ==", + "license": "MIT", + "dependencies": { + "sax": "^1.2.4" + }, + "engines": { + "node": ">=12.0.0" + } + }, + "node_modules/yallist": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-3.1.1.tgz", + "integrity": "sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==", + "dev": true, + "license": "ISC" + }, + "node_modules/yocto-queue": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-0.1.0.tgz", + "integrity": "sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/yup": { + "version": "1.7.0", + "resolved": "https://registry.npmjs.org/yup/-/yup-1.7.0.tgz", + "integrity": "sha512-VJce62dBd+JQvoc+fCVq+KZfPHr+hXaxCcVgotfwWvlR0Ja3ffYKaJBT8rptPOSKOGJDCUnW2C2JWpud7aRP6Q==", + "license": "MIT", + "dependencies": { + "property-expr": "^2.0.5", + "tiny-case": "^1.0.3", + "toposort": "^2.0.2", + "type-fest": "^2.19.0" + } + }, + "node_modules/zod": { + "version": "3.25.76", + "resolved": "https://registry.npmjs.org/zod/-/zod-3.25.76.tgz", + "integrity": "sha512-gzUt/qt81nXsFGKIFcC3YnfEAx5NkunCfnDlvuBSSFS02bcXu4Lmea0AFIUwbLWxWPx3d9p8S5QoaujKcNQxcQ==", + "license": "MIT", + "funding": { + "url": "https://github.com/sponsors/colinhacks" + } + } + } +} diff --git a/package.json b/package.json new file mode 100644 index 0000000..fdc23c4 --- /dev/null +++ b/package.json @@ -0,0 +1,113 @@ +{ + "name": "rapport-web", + "private": true, + "version": "0.0.0", + "type": "module", + "scripts": { + "dev": "vite", + "build": "vite build", + "lint": "eslint .", + "preview": "vite preview", + "format": "prettier --write './src/**/*.{ts,tsx,js,jsx}'" + }, + "dependencies": { + "@dnd-kit/core": "^6.3.1", + "@dnd-kit/modifiers": "^9.0.0", + "@dnd-kit/sortable": "^10.0.0", + "@fullcalendar/core": "^6.1.17", + "@fullcalendar/daygrid": "^6.1.17", + "@fullcalendar/interaction": "^6.1.17", + "@fullcalendar/list": "^6.1.17", + "@fullcalendar/react": "^6.1.17", + "@fullcalendar/timegrid": "^6.1.17", + "@hello-pangea/dnd": "^18.0.1", + "@hookform/resolvers": "^5.1.1", + "@rc-component/tour": "^2.1.6", + "@tanstack/react-table": "^8.21.3", + "apexcharts": "^4.7.0", + "apextree": "^1.3.0", + "axios": "^1.11.0", + "bootstrap": "^5.3.7", + "chart.js": "^4.5.0", + "clsx": "^2.1.1", + "datatables.net-bs5": "^2.3.1", + "datatables.net-buttons": "^3.2.3", + "datatables.net-buttons-bs5": "^3.2.3", + "datatables.net-fixedheader": "^4.0.2", + "datatables.net-fixedheader-bs5": "^4.0.2", + "datatables.net-react": "^1.0.1", + "datatables.net-responsive": "^3.0.4", + "datatables.net-responsive-bs5": "^3.0.4", + "datatables.net-select": "^3.0.1", + "datatables.net-select-bs5": "^3.0.1", + "date-fns": "^4.1.0", + "dayjs": "^1.11.13", + "filepond": "^4.32.8", + "filepond-plugin-image-exif-orientation": "^1.0.11", + "filepond-plugin-image-preview": "^4.6.12", + "flatpickr": "^4.6.13", + "html2canvas": "^1.4.1", + "jquery": "^3.7.1", + "jsvectormap": "1.3.3", + "jszip": "^3.10.1", + "ladda": "^2.0.3", + "leaflet": "^1.9.4", + "lodash": "^4.17.21", + "masonic": "^4.1.0", + "moment": "^2.30.1", + "pdfmake": "^0.2.20", + "quill": "^2.0.3", + "rc-util": "^5.44.4", + "react": "^19.1.1", + "react-apexcharts": "^1.7.0", + "react-arborist": "^3.4.3", + "react-bootstrap": "^2.10.10", + "react-bootstrap-typeahead": "^6.4.1", + "react-chartjs-2": "^5.3.0", + "react-colorful": "^5.6.1", + "react-countup": "^6.5.3", + "react-datepicker": "^8.4.0", + "react-day-picker": "^9.7.0", + "react-dom": "^19.1.1", + "react-dropzone": "^14.3.8", + "react-filepond": "^7.1.3", + "react-flatpickr": "^4.0.10", + "react-hook-form": "^7.57.0", + "react-icons": "^5.5.0", + "react-leaflet": "^5.0.0-rc.2", + "react-number-format": "^5.4.4", + "react-password-checklist": "^1.8.1", + "react-pdf": "^9.2.1", + "react-quill-new": "^3.4.6", + "react-range": "^1.10.0", + "react-router": "^7.8.2", + "react-select": "^5.10.1", + "react-sortablejs": "^6.1.4", + "react-use-wizard": "^2.3.0", + "simplebar-react": "3.3.0", + "sortablejs": "^1.15.6", + "sweetalert2": "^11.22.0", + "sweetalert2-react-content": "^5.1.0", + "usehooks-ts": "^3.1.1", + "yup": "^1.6.1", + "zod": "^3.25.63" + }, + "devDependencies": { + "@eslint/js": "^9.33.0", + "@types/leaflet": "^1.9.18", + "@types/lodash": "^4.17.17", + "@types/node": "^24.3.0", + "@types/react": "^19.1.10", + "@types/react-dom": "^19.1.7", + "@types/sortablejs": "^1.15.8", + "@vitejs/plugin-react": "^5.0.0", + "eslint": "^9.33.0", + "eslint-plugin-react-hooks": "^5.2.0", + "eslint-plugin-react-refresh": "^0.4.20", + "globals": "^16.3.0", + "sass": "1.77.6", + "typescript": "~5.8.3", + "typescript-eslint": "^8.39.1", + "vite": "^7.1.2" + } +} diff --git a/public/data/datatables-rendering.json b/public/data/datatables-rendering.json new file mode 100644 index 0000000..b45fd9c --- /dev/null +++ b/public/data/datatables-rendering.json @@ -0,0 +1,460 @@ +{ + "data": [ + { + "name": "Tiger Nixon", + "position": "System Architect", + "salary": "320800", + "start_date": "2011-04-25", + "office": "Gujarat", + "extn": "5421" + }, + { + "name": "Garrett Winters", + "position": "Accountant", + "salary": "170750", + "start_date": "2011-07-25", + "office": "Tokyo", + "extn": "8422" + }, + { + "name": "Ashton Cox", + "position": "Junior Technical Author", + "salary": "86000", + "start_date": "2009-01-12", + "office": "San Francisco", + "extn": "1562" + }, + { + "name": "Cedric Kelly", + "position": "Senior Javascript Developer", + "salary": "433060", + "start_date": "2012-03-29", + "office": "Gujarat", + "extn": "6224" + }, + { + "name": "Airi Satou", + "position": "Accountant", + "salary": "162700", + "start_date": "2008-11-28", + "office": "Tokyo", + "extn": "5407" + }, + { + "name": "Brielle Williamson", + "position": "Integration Specialist", + "salary": "372000", + "start_date": "2012-12-02", + "office": "New York", + "extn": "4804" + }, + { + "name": "Herrod Chandler", + "position": "Sales Assistant", + "salary": "137500", + "start_date": "2012-08-06", + "office": "San Francisco", + "extn": "9608" + }, + { + "name": "Rhona Davidson", + "position": "Integration Specialist", + "salary": "327900", + "start_date": "2010-10-14", + "office": "Tokyo", + "extn": "6200" + }, + { + "name": "Colleen Hurst", + "position": "Javascript Developer", + "salary": "205500", + "start_date": "2009-09-15", + "office": "San Francisco", + "extn": "2360" + }, + { + "name": "Sonya Frost", + "position": "Software Engineer", + "salary": "103600", + "start_date": "2008-12-13", + "office": "Gujarat", + "extn": "1667" + }, + { + "name": "Jena Gaines", + "position": "Office Manager", + "salary": "90560", + "start_date": "2008-12-19", + "office": "London", + "extn": "3814" + }, + { + "name": "Quinn Flynn", + "position": "Support Lead", + "salary": "342000", + "start_date": "2013-03-03", + "office": "Gujarat", + "extn": "9497" + }, + { + "name": "Charde Marshall", + "position": "Regional Director", + "salary": "470600", + "start_date": "2008-10-16", + "office": "San Francisco", + "extn": "6741" + }, + { + "name": "Haley Kennedy", + "position": "Senior Marketing Designer", + "salary": "313500", + "start_date": "2012-12-18", + "office": "London", + "extn": "3597" + }, + { + "name": "Tatyana Fitzpatrick", + "position": "Regional Director", + "salary": "385750", + "start_date": "2010-03-17", + "office": "London", + "extn": "1965" + }, + { + "name": "Michael Silva", + "position": "Marketing Designer", + "salary": "198500", + "start_date": "2012-11-27", + "office": "London", + "extn": "1581" + }, + { + "name": "Paul Byrd", + "position": "Chief Financial Officer (CFO)", + "salary": "725000", + "start_date": "2010-06-09", + "office": "New York", + "extn": "3059" + }, + { + "name": "Gloria Little", + "position": "Systems Administrator", + "salary": "237500", + "start_date": "2009-04-10", + "office": "New York", + "extn": "1721" + }, + { + "name": "Bradley Greer", + "position": "Software Engineer", + "salary": "132000", + "start_date": "2012-10-13", + "office": "London", + "extn": "2558" + }, + { + "name": "Dai Rios", + "position": "Personnel Lead", + "salary": "217500", + "start_date": "2012-09-26", + "office": "Gujarat", + "extn": "2290" + }, + { + "name": "Jenette Caldwell", + "position": "Development Lead", + "salary": "345000", + "start_date": "2011-09-03", + "office": "New York", + "extn": "1937" + }, + { + "name": "Yuri Berry", + "position": "Chief Marketing Officer (CMO)", + "salary": "675000", + "start_date": "2009-06-25", + "office": "New York", + "extn": "6154" + }, + { + "name": "Caesar Vance", + "position": "Pre-Sales Support", + "salary": "106450", + "start_date": "2011-12-12", + "office": "New York", + "extn": "8330" + }, + { + "name": "Doris Wilder", + "position": "Sales Assistant", + "salary": "85600", + "start_date": "2010-09-20", + "office": "Sydney", + "extn": "3023" + }, + { + "name": "Angelica Ramos", + "position": "Chief Executive Officer (CEO)", + "salary": "1200000", + "start_date": "2009-10-09", + "office": "London", + "extn": "5797" + }, + { + "name": "Gavin Joyce", + "position": "Developer", + "salary": "92575", + "start_date": "2010-12-22", + "office": "Gujarat", + "extn": "8822" + }, + { + "name": "Jennifer Chang", + "position": "Regional Director", + "salary": "357650", + "start_date": "2010-11-14", + "office": "Argentina", + "extn": "9239" + }, + { + "name": "Brenden Wagner", + "position": "Software Engineer", + "salary": "206850", + "start_date": "2011-06-07", + "office": "San Francisco", + "extn": "1314" + }, + { + "name": "Fiona Green", + "position": "Chief Operating Officer (COO)", + "salary": "850000", + "start_date": "2010-03-11", + "office": "San Francisco", + "extn": "2947" + }, + { + "name": "Shou Itou", + "position": "Regional Marketing", + "salary": "163000", + "start_date": "2011-08-14", + "office": "Tokyo", + "extn": "8899" + }, + { + "name": "Michelle House", + "position": "Integration Specialist", + "salary": "95400", + "start_date": "2011-06-02", + "office": "Sydney", + "extn": "2769" + }, + { + "name": "Suki Burks", + "position": "Developer", + "salary": "114500", + "start_date": "2009-10-22", + "office": "London", + "extn": "6832" + }, + { + "name": "Prescott Bartlett", + "position": "Technical Author", + "salary": "145000", + "start_date": "2011-05-07", + "office": "London", + "extn": "3606" + }, + { + "name": "Gavin Cortez", + "position": "Team Leader", + "salary": "235500", + "start_date": "2008-10-26", + "office": "San Francisco", + "extn": "2860" + }, + { + "name": "Martena Mccray", + "position": "Post-Sales support", + "salary": "324050", + "start_date": "2011-03-09", + "office": "Gujarat", + "extn": "8240" + }, + { + "name": "Unity Butler", + "position": "Marketing Designer", + "salary": "85675", + "start_date": "2009-12-09", + "office": "San Francisco", + "extn": "5384" + }, + { + "name": "Howard Hatfield", + "position": "Office Manager", + "salary": "164500", + "start_date": "2008-12-16", + "office": "San Francisco", + "extn": "7031" + }, + { + "name": "Hope Fuentes", + "position": "Secretary", + "salary": "109850", + "start_date": "2010-02-12", + "office": "San Francisco", + "extn": "6318" + }, + { + "name": "Vivian Harrell", + "position": "Financial Controller", + "salary": "452500", + "start_date": "2009-02-14", + "office": "San Francisco", + "extn": "9422" + }, + { + "name": "Timothy Mooney", + "position": "Office Manager", + "salary": "136200", + "start_date": "2008-12-11", + "office": "London", + "extn": "7580" + }, + { + "name": "Jackson Bradshaw", + "position": "Director", + "salary": "645750", + "start_date": "2008-09-26", + "office": "New York", + "extn": "1042" + }, + { + "name": "Olivia Liang", + "position": "Support Engineer", + "salary": "234500", + "start_date": "2011-02-03", + "office": "Argentina", + "extn": "2120" + }, + { + "name": "Bruno Nash", + "position": "Software Engineer", + "salary": "163500", + "start_date": "2011-05-03", + "office": "London", + "extn": "6222" + }, + { + "name": "Sakura Yamamoto", + "position": "Support Engineer", + "salary": "139575", + "start_date": "2009-08-19", + "office": "Tokyo", + "extn": "9383" + }, + { + "name": "Thor Walton", + "position": "Developer", + "salary": "98540", + "start_date": "2013-08-11", + "office": "New York", + "extn": "8327" + }, + { + "name": "Finn Camacho", + "position": "Support Engineer", + "salary": "87500", + "start_date": "2009-07-07", + "office": "San Francisco", + "extn": "2927" + }, + { + "name": "Serge Baldwin", + "position": "Data Coordinator", + "salary": "138575", + "start_date": "2012-04-09", + "office": "Argentina", + "extn": "8352" + }, + { + "name": "Zenaida Frank", + "position": "Software Engineer", + "salary": "125250", + "start_date": "2010-01-04", + "office": "New York", + "extn": "7439" + }, + { + "name": "Zorita Serrano", + "position": "Software Engineer", + "salary": "115000", + "start_date": "2012-06-01", + "office": "San Francisco", + "extn": "4389" + }, + { + "name": "Jennifer Acosta", + "position": "Junior Javascript Developer", + "salary": "75650", + "start_date": "2013-02-01", + "office": "Gujarat", + "extn": "3431" + }, + { + "name": "Cara Stevens", + "position": "Sales Assistant", + "salary": "145600", + "start_date": "2011-12-06", + "office": "New York", + "extn": "3990" + }, + { + "name": "Hermione Butler", + "position": "Regional Director", + "salary": "356250", + "start_date": "2011-03-21", + "office": "London", + "extn": "1016" + }, + { + "name": "Lael Greer", + "position": "Systems Administrator", + "salary": "103500", + "start_date": "2009-02-27", + "office": "London", + "extn": "6733" + }, + { + "name": "Jonas Alexander", + "position": "Developer", + "salary": "86500", + "start_date": "2010-07-14", + "office": "San Francisco", + "extn": "8196" + }, + { + "name": "Shad Decker", + "position": "Regional Director", + "salary": "183000", + "start_date": "2008-11-13", + "office": "Gujarat", + "extn": "6373" + }, + { + "name": "Michael Bruce", + "position": "Javascript Developer", + "salary": "183000", + "start_date": "2011-06-27", + "office": "Argentina", + "extn": "5384" + }, + { + "name": "Donna Snider", + "position": "Customer Support", + "salary": "112000", + "start_date": "2011-01-25", + "office": "New York", + "extn": "4226" + } + ] +} \ No newline at end of file diff --git a/public/data/datatables.json b/public/data/datatables.json new file mode 100644 index 0000000..6f487ae --- /dev/null +++ b/public/data/datatables.json @@ -0,0 +1,504 @@ +{ + "data": [ + { + "company": "Apple Inc.", + "symbol": "AAPL", + "price": 2146.86, + "change": 2.92, + "volume": "4,900,854", + "marketCap": "53.59B", + "rating": 4.7, + "status": "Bearish" + }, + { + "company": "Microsoft Corp.", + "symbol": "MSFT", + "price": 408.9, + "change": -3.76, + "volume": "5,714,994", + "marketCap": "927.77B", + "rating": 3.8, + "status": "Bearish" + }, + { + "company": "Alphabet Inc.", + "symbol": "GOOGL", + "price": 2787.28, + "change": 0.43, + "volume": "7,698,249", + "marketCap": "1.88T", + "rating": 4.6, + "status": "Bearish" + }, + { + "company": "Tesla Inc.", + "symbol": "TSLA", + "price": 701.63, + "change": -3.26, + "volume": "7,024,386", + "marketCap": "701.98B", + "rating": 4.5, + "status": "Bearish" + }, + { + "company": "Amazon.com Inc.", + "symbol": "AMZN", + "price": 3363.58, + "change": 0.04, + "volume": "4,466,395", + "marketCap": "1.72T", + "rating": 4.3, + "status": "Bearish" + }, + { + "company": "Meta Platforms, Inc.", + "symbol": "META", + "price": 279.44, + "change": -1.18, + "volume": "2,546,904", + "marketCap": "752.91B", + "rating": 4.1, + "status": "Bullish" + }, + { + "company": "NVIDIA Corporation", + "symbol": "NVDA", + "price": 742.44, + "change": -1.44, + "volume": "5,438,252", + "marketCap": "1.88T", + "rating": 4.9, + "status": "Bullish" + }, + { + "company": "Berkshire Hathaway", + "symbol": "BRK.A", + "price": 419247.03, + "change": 0.24, + "volume": "1,054,720", + "marketCap": "828.66B", + "rating": 4.8, + "status": "Bearish" + }, + { + "company": "Walmart Inc.", + "symbol": "WMT", + "price": 142.11, + "change": -1.53, + "volume": "6,017,907", + "marketCap": "398.24B", + "rating": 4.0, + "status": "Bearish" + }, + { + "company": "Johnson & Johnson", + "symbol": "JNJ", + "price": 136.44, + "change": -2.38, + "volume": "5,224,035", + "marketCap": "442.89B", + "rating": 4.3, + "status": "Bearish" + }, + { + "company": "Procter & Gamble", + "symbol": "PG", + "price": 113.1, + "change": -0.91, + "volume": "2,638,562", + "marketCap": "358.61B", + "rating": 4.4, + "status": "Bearish" + }, + { + "company": "Visa Inc.", + "symbol": "V", + "price": 201.0, + "change": 3.73, + "volume": "8,994,343", + "marketCap": "495.51B", + "rating": 4.7, + "status": "Bullish" + }, + { + "company": "Home Depot", + "symbol": "HD", + "price": 374.05, + "change": 3.05, + "volume": "8,927,428", + "marketCap": "381.73B", + "rating": 4.6, + "status": "Bullish" + }, + { + "company": "Coca-Cola Company", + "symbol": "KO", + "price": 90.54, + "change": 0.38, + "volume": "5,637,126", + "marketCap": "274.17B", + "rating": 4.2, + "status": "Bullish" + }, + { + "company": "PepsiCo", + "symbol": "PEP", + "price": 218.61, + "change": 2.58, + "volume": "7,528,757", + "marketCap": "259.61B", + "rating": 4.5, + "status": "Bearish" + }, + { + "company": "Intel Corporation", + "symbol": "INTC", + "price": 50.74, + "change": -0.13, + "volume": "2,566,225", + "marketCap": "213.76B", + "rating": 3.9, + "status": "Bearish" + }, + { + "company": "Cisco Systems", + "symbol": "CSCO", + "price": 32.49, + "change": -2.94, + "volume": "1,107,843", + "marketCap": "238.17B", + "rating": 4.1, + "status": "Bearish" + }, + { + "company": "Pfizer Inc.", + "symbol": "PFE", + "price": 48.31, + "change": -1.06, + "volume": "2,699,320", + "marketCap": "246.69B", + "rating": 4.3, + "status": "Bullish" + }, + { + "company": "AbbVie Inc.", + "symbol": "ABBV", + "price": 113.84, + "change": -3.39, + "volume": "5,054,850", + "marketCap": "286.97B", + "rating": 4.4, + "status": "Bearish" + }, + { + "company": "UnitedHealth Group", + "symbol": "UNH", + "price": 446.07, + "change": -1.84, + "volume": "5,401,283", + "marketCap": "696.69B", + "rating": 4.7, + "status": "Bearish" + }, + { + "company": "Mastercard Inc.", + "symbol": "MA", + "price": 437.2, + "change": 0.88, + "volume": "797,545", + "marketCap": "396.98B", + "rating": 4.8, + "status": "Bearish" + }, + { + "company": "Oracle Corporation", + "symbol": "ORCL", + "price": 155.87, + "change": 1.15, + "volume": "6,380,239", + "marketCap": "314.26B", + "rating": 4.0, + "status": "Bullish" + }, + { + "company": "McDonald's Corporation", + "symbol": "MCD", + "price": 203.74, + "change": -2.22, + "volume": "6,741,885", + "marketCap": "367.83B", + "rating": 4.5, + "status": "Bearish" + }, + { + "company": "Walt Disney Company", + "symbol": "DIS", + "price": 150.55, + "change": -4.19, + "volume": "6,917,234", + "marketCap": "203.93B", + "rating": 3.8, + "status": "Bullish" + }, + { + "company": "Tesla Inc.", + "symbol": "TSLA", + "price": 723.57, + "change": -1.39, + "volume": "2,686,353", + "marketCap": "701.98B", + "rating": 4.5, + "status": "Bearish" + }, + { + "company": "Chevron Corporation", + "symbol": "CVX", + "price": 154.16, + "change": 1.19, + "volume": "7,894,254", + "marketCap": "342.54B", + "rating": 4.3, + "status": "Bearish" + }, + { + "company": "ExxonMobil", + "symbol": "XOM", + "price": 141.18, + "change": -1.28, + "volume": "3,941,144", + "marketCap": "440.32B", + "rating": 4.6, + "status": "Bullish" + }, + { + "company": "Abbott Laboratories", + "symbol": "ABT", + "price": 125.2, + "change": -3.47, + "volume": "7,556,855", + "marketCap": "185.85B", + "rating": 4.4, + "status": "Bearish" + }, + { + "company": "Lowe's Companies", + "symbol": "LOW", + "price": 173.94, + "change": -0.45, + "volume": "9,981,740", + "marketCap": "152.93B", + "rating": 4.3, + "status": "Bearish" + }, + { + "company": "Lockheed Martin", + "symbol": "LMT", + "price": 473.21, + "change": 3.33, + "volume": "9,994,118", + "marketCap": "121.98B", + "rating": 4.6, + "status": "Bearish" + }, + { + "company": "3M Company", + "symbol": "MMM", + "price": 113.95, + "change": 0.48, + "volume": "518,654", + "marketCap": "66.17B", + "rating": 4.1, + "status": "Bearish" + }, + { + "company": "Bristol-Myers Squibb", + "symbol": "BMY", + "price": 36.21, + "change": -4.2, + "volume": "3,466,547", + "marketCap": "142.71B", + "rating": 4.2, + "status": "Bearish" + }, + { + "company": "Raytheon Technologies", + "symbol": "RTX", + "price": 46.13, + "change": -3.05, + "volume": "6,408,052", + "marketCap": "134.39B", + "rating": 4.5, + "status": "Bullish" + }, + { + "company": "General Electric", + "symbol": "GE", + "price": 159.81, + "change": 0.13, + "volume": "9,911,255", + "marketCap": "101.36B", + "rating": 4.3, + "status": "Bullish" + }, + { + "company": "American Express", + "symbol": "AXP", + "price": 133.04, + "change": -0.29, + "volume": "2,360,835", + "marketCap": "155.83B", + "rating": 4.4, + "status": "Bullish" + }, + { + "company": "Colgate-Palmolive", + "symbol": "CL", + "price": 73.57, + "change": 2.9, + "volume": "7,251,531", + "marketCap": "68.45B", + "rating": 4.2, + "status": "Bullish" + }, + { + "company": "Johnson Controls", + "symbol": "JCI", + "price": 17.16, + "change": 3.67, + "volume": "3,667,577", + "marketCap": "41.42B", + "rating": 4.3, + "status": "Bullish" + }, + { + "company": "Target Corporation", + "symbol": "TGT", + "price": 151.18, + "change": 4.61, + "volume": "8,009,736", + "marketCap": "83.32B", + "rating": 4.4, + "status": "Bearish" + }, + { + "company": "Citigroup", + "symbol": "C", + "price": 41.73, + "change": -0.68, + "volume": "252,870", + "marketCap": "97.68B", + "rating": 4.2, + "status": "Bullish" + }, + { + "company": "Qualcomm", + "symbol": "QCOM", + "price": 117.77, + "change": -2.7, + "volume": "4,310,986", + "marketCap": "130.85B", + "rating": 4.4, + "status": "Bearish" + }, + { + "company": "Morgan Stanley", + "symbol": "MS", + "price": 100.68, + "change": -3.07, + "volume": "8,514,285", + "marketCap": "180.71B", + "rating": 4.5, + "status": "Bearish" + }, + { + "company": "Adobe Inc.", + "symbol": "ADBE", + "price": 503.46, + "change": 2.7, + "volume": "4,521,395", + "marketCap": "240.23B", + "rating": 4.8, + "status": "Bearish" + }, + { + "company": "Salesforce", + "symbol": "CRM", + "price": 166.64, + "change": 4.19, + "volume": "1,096,384", + "marketCap": "213.48B", + "rating": 4.6, + "status": "Bullish" + }, + { + "company": "PayPal", + "symbol": "PYPL", + "price": 197.52, + "change": 1.68, + "volume": "8,717,514", + "marketCap": "213.42B", + "rating": 4.2, + "status": "Bearish" + }, + { + "company": "IBM", + "symbol": "IBM", + "price": 171.71, + "change": -3.11, + "volume": "1,687,819", + "marketCap": "124.75B", + "rating": 4.1, + "status": "Bearish" + }, + { + "company": "Tesla", + "symbol": "TSLA", + "price": 920.23, + "change": -0.99, + "volume": "6,075,086", + "marketCap": "400B", + "rating": 4.6, + "status": "Bullish" + }, + { + "company": "Ford Motor Company", + "symbol": "F", + "price": -23.24, + "change": -0.67, + "volume": "5,274,075", + "marketCap": "45.87B", + "rating": 3.7, + "status": "Bearish" + }, + { + "company": "General Motors", + "symbol": "GM", + "price": 60.32, + "change": -2.23, + "volume": "4,477,483", + "marketCap": "51.91B", + "rating": 3.9, + "status": "Bearish" + }, + { + "company": "Boeing Company", + "symbol": "BA", + "price": 217.56, + "change": 1.75, + "volume": "4,681,504", + "marketCap": "117.92B", + "rating": 4.4, + "status": "Bearish" + }, + { + "company": "Caterpillar Inc.", + "symbol": "CAT", + "price": 314.04, + "change": 0.2, + "volume": "8,014,308", + "marketCap": "147.56B", + "rating": 4.7, + "status": "Bearish" + } + ] +} \ No newline at end of file diff --git a/public/data/treeview-data.json b/public/data/treeview-data.json new file mode 100644 index 0000000..a484ab4 --- /dev/null +++ b/public/data/treeview-data.json @@ -0,0 +1,116 @@ +[ + { + "id": "node_1", + "icon": "ti ti-folder-filled text-warning fs-lg", + "text": "Projects", + "children": [ + { + "id": "node_4", + "icon": "ti ti-file-text text-primary fs-lg", + "text": "Project Proposal", + "children": false + }, + { + "id": "node_5", + "icon": "ti ti-file-text text-primary fs-lg", + "text": "Requirements Doc", + "children": false + }, + { + "id": "node_6", + "icon": "ti ti-folder-filled text-warning fs-lg", + "text": "Designs", + "children": [ + { + "id": "node_13", + "icon": "ti ti-layout text-warning fs-lg", + "text": "Wireframes", + "children": false + }, + { + "id": "node_15", + "icon": "ti ti-layout text-warning fs-lg", + "text": "Mockups", + "children": false + } + ] + } + ] + }, + { + "id": "node_2", + "icon": "ti ti-folder-filled text-warning fs-lg", + "text": "Reports", + "children": [ + { + "id": "node_7", + "icon": "ti ti-report text-danger fs-lg", + "text": "Q1 Report", + "children": false + }, + { + "id": "node_8", + "icon": "ti ti-report text-danger fs-lg", + "text": "Q2 Report", + "children": false + }, + { + "id": "node_9", + "icon": "ti ti-folder-filled text-warning fs-lg", + "text": "Annual Reports", + "children": [ + { + "id": "node_16", + "icon": "ti ti-file-description text-info fs-lg", + "text": "2023 Summary", + "children": false + }, + { + "id": "node_17", + "icon": "ti ti-file-description text-info fs-lg", + "text": "2024 Summary", + "children": false + } + ] + } + ] + }, + { + "id": "node_3", + "icon": "ti ti-folder-filled text-warning fs-lg", + "text": "Documents", + "children": [ + { + "id": "node_10", + "icon": "ti ti-file-text text-secondary fs-lg", + "text": "Resume", + "children": false + }, + { + "id": "node_11", + "icon": "ti ti-file-text text-secondary fs-lg", + "text": "Cover Letter", + "children": false + }, + { + "id": "node_12", + "icon": "ti ti-folder-filled text-warning fs-lg", + "text": "Certificates", + "children": [ + { + "id": "node_18", + "icon": "ti ti-certificate text-warning fs-lg", + "text": "Completion Cert", + "children": false + }, + { + "id": "node_19", + "icon": "ti ti-certificate text-warning fs-lg", + "text": "Achievement Cert", + "children": false + } + ] + } + ] + } +] diff --git a/public/data/typeahead-data-2.json b/public/data/typeahead-data-2.json new file mode 100644 index 0000000..8d440c3 --- /dev/null +++ b/public/data/typeahead-data-2.json @@ -0,0 +1,452 @@ +[ + { + "year": "1961", + "value": "West Side Story", + "tokens": [ + "West", + "Side", + "Story" + ] + }, + { + "year": "1962", + "value": "Lawrence of Arabia", + "tokens": [ + "Lawrence", + "of", + "Arabia" + ] + }, + { + "year": "1963", + "value": "Tom Jones", + "tokens": [ + "Tom", + "Jones" + ] + }, + { + "year": "1964", + "value": "My Fair Lady", + "tokens": [ + "My", + "Fair", + "Lady" + ] + }, + { + "year": "1965", + "value": "The Sound of Music", + "tokens": [ + "The", + "Sound", + "of", + "Music" + ] + }, + { + "year": "1966", + "value": "A Man for All Seasons", + "tokens": [ + "A", + "Man", + "for", + "All", + "Seasons" + ] + }, + { + "year": "1967", + "value": "In the Heat of the Night", + "tokens": [ + "In", + "the", + "Heat", + "of", + "the", + "Night" + ] + }, + { + "year": "1968", + "value": "Oliver!", + "tokens": [ + "Oliver!" + ] + }, + { + "year": "1969", + "value": "Midnight Cowboy", + "tokens": [ + "Midnight", + "Cowboy" + ] + }, + { + "year": "1970", + "value": "Patton", + "tokens": [ + "Patton" + ] + }, + { + "year": "1971", + "value": "The French Connection", + "tokens": [ + "The", + "French", + "Connection" + ] + }, + { + "year": "1972", + "value": "The Godfather", + "tokens": [ + "The", + "Godfather" + ] + }, + { + "year": "1973", + "value": "The Sting", + "tokens": [ + "The", + "Sting" + ] + }, + { + "year": "1974", + "value": "The Godfather Part II", + "tokens": [ + "The", + "Godfather", + "Part", + "II" + ] + }, + { + "year": "1975", + "value": "One Flew over the Cuckoo's Nest", + "tokens": [ + "One", + "Flew", + "over", + "the", + "Cuckoo's", + "Nest" + ] + }, + { + "year": "1976", + "value": "Rocky", + "tokens": [ + "Rocky" + ] + }, + { + "year": "1977", + "value": "Annie Hall", + "tokens": [ + "Annie", + "Hall" + ] + }, + { + "year": "1978", + "value": "The Deer Hunter", + "tokens": [ + "The", + "Deer", + "Hunter" + ] + }, + { + "year": "1979", + "value": "Kramer vs. Kramer", + "tokens": [ + "Kramer", + "vs.", + "Kramer" + ] + }, + { + "year": "1980", + "value": "Ordinary People", + "tokens": [ + "Ordinary", + "People" + ] + }, + { + "year": "1981", + "value": "Chariots of Fire", + "tokens": [ + "Chariots", + "of", + "Fire" + ] + }, + { + "year": "1982", + "value": "Gandhi", + "tokens": [ + "Gandhi" + ] + }, + { + "year": "1983", + "value": "Terms of Endearment", + "tokens": [ + "Terms", + "of", + "Endearment" + ] + }, + { + "year": "1984", + "value": "Amadeus", + "tokens": [ + "Amadeus" + ] + }, + { + "year": "1985", + "value": "Out of Africa", + "tokens": [ + "Out", + "of", + "Africa" + ] + }, + { + "year": "1986", + "value": "Platoon", + "tokens": [ + "Platoon" + ] + }, + { + "year": "1987", + "value": "The Last Emperor", + "tokens": [ + "The", + "Last", + "Emperor" + ] + }, + { + "year": "1988", + "value": "Rain Man", + "tokens": [ + "Rain", + "Man" + ] + }, + { + "year": "1989", + "value": "Driving Miss Daisy", + "tokens": [ + "Driving", + "Miss", + "Daisy" + ] + }, + { + "year": "1990", + "value": "Dances With Wolves", + "tokens": [ + "Dances", + "With", + "Wolves" + ] + }, + { + "year": "1991", + "value": "The Silence of the Lambs", + "tokens": [ + "The", + "Silence", + "of", + "the", + "Lambs" + ] + }, + { + "year": "1992", + "value": "Unforgiven", + "tokens": [ + "Unforgiven" + ] + }, + { + "year": "1993", + "value": "Schindler’s List", + "tokens": [ + "Schindler’s", + "List" + ] + }, + { + "year": "1994", + "value": "Forrest Gump", + "tokens": [ + "Forrest", + "Gump" + ] + }, + { + "year": "1995", + "value": "Braveheart", + "tokens": [ + "Braveheart" + ] + }, + { + "year": "1996", + "value": "The English Patient", + "tokens": [ + "The", + "English", + "Patient" + ] + }, + { + "year": "1997", + "value": "Titanic", + "tokens": [ + "Titanic" + ] + }, + { + "year": "1998", + "value": "Shakespeare in Love", + "tokens": [ + "Shakespeare", + "in", + "Love" + ] + }, + { + "year": "1999", + "value": "American Beauty", + "tokens": [ + "American", + "Beauty" + ] + }, + { + "year": "2000", + "value": "Gladiator", + "tokens": [ + "Gladiator" + ] + }, + { + "year": "2001", + "value": "A Beautiful Mind", + "tokens": [ + "A", + "Beautiful", + "Mind" + ] + }, + { + "year": "2002", + "value": "Chicago", + "tokens": [ + "Chicago" + ] + }, + { + "year": "2003", + "value": "The Lord of the Rings: The Return of the King", + "tokens": [ + "The", + "Lord", + "of", + "the", + "Rings:", + "The", + "Return", + "of", + "the", + "King" + ] + }, + { + "year": "2004", + "value": "Million Dollar Baby", + "tokens": [ + "Million", + "Dollar", + "Baby" + ] + }, + { + "year": "2005", + "value": "Crash", + "tokens": [ + "Crash" + ] + }, + { + "year": "2006", + "value": "The Departed", + "tokens": [ + "The", + "Departed" + ] + }, + { + "year": "2007", + "value": "No Country for Old Men", + "tokens": [ + "No", + "Country", + "for", + "Old", + "Men" + ] + }, + { + "year": "2008", + "value": "Slumdog Millionaire", + "tokens": [ + "Slumdog", + "Millionaire" + ] + }, + { + "year": "2009", + "value": "The Hurt Locker", + "tokens": [ + "The", + "Hurt", + "Locker" + ] + }, + { + "year": "2010", + "value": "The King's Speech", + "tokens": [ + "The", + "King's", + "Speech" + ] + }, + { + "year": "2011", + "value": "The Artist", + "tokens": [ + "The", + "Artist" + ] + }, + { + "year": "2012", + "value": "Argo", + "tokens": [ + "Argo" + ] + } +] \ No newline at end of file diff --git a/public/data/typeahead.json b/public/data/typeahead.json new file mode 100644 index 0000000..956da17 --- /dev/null +++ b/public/data/typeahead.json @@ -0,0 +1,52 @@ +[ + "Alabama", + "Alaska", + "Arizona", + "Arkansas", + "California", + "Colorado", + "Connecticut", + "Delaware", + "Florida", + "Georgia", + "Hawaii", + "Idaho", + "Illinois", + "Indiana", + "Iowa", + "Kansas", + "Kentucky", + "Louisiana", + "Maine", + "Maryland", + "Massachusetts", + "Michigan", + "Minnesota", + "Mississippi", + "Missouri", + "Montana", + "Nebraska", + "Nevada", + "New Hampshire", + "New Jersey", + "New Mexico", + "New York", + "North Carolina", + "North Dakota", + "Ohio", + "Oklahoma", + "Oregon", + "Pennsylvania", + "Rhode Island", + "South Carolina", + "South Dakota", + "Tennessee", + "Texas", + "Utah", + "Vermont", + "Virginia", + "Washington", + "West Virginia", + "Wisconsin", + "Wyoming" +] \ No newline at end of file diff --git a/public/data/usa_geo.json b/public/data/usa_geo.json new file mode 100644 index 0000000..ef1a61d --- /dev/null +++ b/public/data/usa_geo.json @@ -0,0 +1,15107 @@ +{ + "type": "FeatureCollection", + "features": [ + { + "type": "Feature", + "id": "01", + "properties": { + "name": "Alabama" + }, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -87.359296, + 35.00118 + ], + [ + -85.606675, + 34.984749 + ], + [ + -85.431413, + 34.124869 + ], + [ + -85.184951, + 32.859696 + ], + [ + -85.069935, + 32.580372 + ], + [ + -84.960397, + 32.421541 + ], + [ + -85.004212, + 32.322956 + ], + [ + -84.889196, + 32.262709 + ], + [ + -85.058981, + 32.13674 + ], + [ + -85.053504, + 32.01077 + ], + [ + -85.141136, + 31.840985 + ], + [ + -85.042551, + 31.539753 + ], + [ + -85.113751, + 31.27686 + ], + [ + -85.004212, + 31.003013 + ], + [ + -85.497137, + 30.997536 + ], + [ + -87.600282, + 30.997536 + ], + [ + -87.633143, + 30.86609 + ], + [ + -87.408589, + 30.674397 + ], + [ + -87.446927, + 30.510088 + ], + [ + -87.37025, + 30.427934 + ], + [ + -87.518128, + 30.280057 + ], + [ + -87.655051, + 30.247195 + ], + [ + -87.90699, + 30.411504 + ], + [ + -87.934375, + 30.657966 + ], + [ + -88.011052, + 30.685351 + ], + [ + -88.10416, + 30.499135 + ], + [ + -88.137022, + 30.318396 + ], + [ + -88.394438, + 30.367688 + ], + [ + -88.471115, + 31.895754 + ], + [ + -88.241084, + 33.796253 + ], + [ + -88.098683, + 34.891641 + ], + [ + -88.202745, + 34.995703 + ], + [ + -87.359296, + 35.00118 + ] + ] + ] + } + }, + { + "type": "Feature", + "id": "02", + "properties": { + "name": "Alaska" + }, + "geometry": { + "type": "MultiPolygon", + "coordinates": [ + [ + [ + [ + -131.602021, + 55.117982 + ], + [ + -131.569159, + 55.28229 + ], + [ + -131.355558, + 55.183705 + ], + [ + -131.38842, + 55.01392 + ], + [ + -131.645836, + 55.035827 + ], + [ + -131.602021, + 55.117982 + ] + ] + ], + [ + [ + [ + -131.832052, + 55.42469 + ], + [ + -131.645836, + 55.304197 + ], + [ + -131.749898, + 55.128935 + ], + [ + -131.832052, + 55.189182 + ], + [ + -131.832052, + 55.42469 + ] + ] + ], + [ + [ + [ + -132.976733, + 56.437924 + ], + [ + -132.735747, + 56.459832 + ], + [ + -132.631685, + 56.421493 + ], + [ + -132.664547, + 56.273616 + ], + [ + -132.878148, + 56.240754 + ], + [ + -133.069841, + 56.333862 + ], + [ + -132.976733, + 56.437924 + ] + ] + ], + [ + [ + [ + -133.595627, + 56.350293 + ], + [ + -133.162949, + 56.317431 + ], + [ + -133.05341, + 56.125739 + ], + [ + -132.620732, + 55.912138 + ], + [ + -132.472854, + 55.780691 + ], + [ + -132.4619, + 55.671152 + ], + [ + -132.357838, + 55.649245 + ], + [ + -132.341408, + 55.506844 + ], + [ + -132.166146, + 55.364444 + ], + [ + -132.144238, + 55.238474 + ], + [ + -132.029222, + 55.276813 + ], + [ + -131.97993, + 55.178228 + ], + [ + -131.958022, + 54.789365 + ], + [ + -132.029222, + 54.701734 + ], + [ + -132.308546, + 54.718165 + ], + [ + -132.385223, + 54.915335 + ], + [ + -132.483808, + 54.898904 + ], + [ + -132.686455, + 55.046781 + ], + [ + -132.746701, + 54.997489 + ], + [ + -132.916486, + 55.046781 + ], + [ + -132.889102, + 54.898904 + ], + [ + -132.73027, + 54.937242 + ], + [ + -132.626209, + 54.882473 + ], + [ + -132.675501, + 54.679826 + ], + [ + -132.867194, + 54.701734 + ], + [ + -133.157472, + 54.95915 + ], + [ + -133.239626, + 55.090597 + ], + [ + -133.223195, + 55.22752 + ], + [ + -133.453227, + 55.216566 + ], + [ + -133.453227, + 55.320628 + ], + [ + -133.277964, + 55.331582 + ], + [ + -133.102702, + 55.42469 + ], + [ + -133.17938, + 55.588998 + ], + [ + -133.387503, + 55.62186 + ], + [ + -133.420365, + 55.884753 + ], + [ + -133.497042, + 56.0162 + ], + [ + -133.639442, + 55.923092 + ], + [ + -133.694212, + 56.070969 + ], + [ + -133.546335, + 56.142169 + ], + [ + -133.666827, + 56.311955 + ], + [ + -133.595627, + 56.350293 + ] + ] + ], + [ + [ + [ + -133.738027, + 55.556137 + ], + [ + -133.546335, + 55.490413 + ], + [ + -133.414888, + 55.572568 + ], + [ + -133.283441, + 55.534229 + ], + [ + -133.420365, + 55.386352 + ], + [ + -133.633966, + 55.430167 + ], + [ + -133.738027, + 55.556137 + ] + ] + ], + [ + [ + [ + -133.907813, + 56.930849 + ], + [ + -134.050213, + 57.029434 + ], + [ + -133.885905, + 57.095157 + ], + [ + -133.343688, + 57.002049 + ], + [ + -133.102702, + 57.007526 + ], + [ + -132.932917, + 56.82131 + ], + [ + -132.620732, + 56.667956 + ], + [ + -132.653593, + 56.55294 + ], + [ + -132.817901, + 56.492694 + ], + [ + -133.042456, + 56.520078 + ], + [ + -133.201287, + 56.448878 + ], + [ + -133.420365, + 56.492694 + ], + [ + -133.66135, + 56.448878 + ], + [ + -133.710643, + 56.684386 + ], + [ + -133.688735, + 56.837741 + ], + [ + -133.869474, + 56.843218 + ], + [ + -133.907813, + 56.930849 + ] + ] + ], + [ + [ + [ + -134.115936, + 56.48174 + ], + [ + -134.25286, + 56.558417 + ], + [ + -134.400737, + 56.722725 + ], + [ + -134.417168, + 56.848695 + ], + [ + -134.296675, + 56.908941 + ], + [ + -134.170706, + 56.848695 + ], + [ + -134.143321, + 56.952757 + ], + [ + -133.748981, + 56.772017 + ], + [ + -133.710643, + 56.596755 + ], + [ + -133.847566, + 56.574848 + ], + [ + -133.935197, + 56.377678 + ], + [ + -133.836612, + 56.322908 + ], + [ + -133.957105, + 56.092877 + ], + [ + -134.110459, + 56.142169 + ], + [ + -134.132367, + 55.999769 + ], + [ + -134.230952, + 56.070969 + ], + [ + -134.291198, + 56.350293 + ], + [ + -134.115936, + 56.48174 + ] + ] + ], + [ + [ + [ + -134.636246, + 56.28457 + ], + [ + -134.669107, + 56.169554 + ], + [ + -134.806031, + 56.235277 + ], + [ + -135.178463, + 56.67891 + ], + [ + -135.413971, + 56.810356 + ], + [ + -135.331817, + 56.914418 + ], + [ + -135.424925, + 57.166357 + ], + [ + -135.687818, + 57.369004 + ], + [ + -135.419448, + 57.566174 + ], + [ + -135.298955, + 57.48402 + ], + [ + -135.063447, + 57.418296 + ], + [ + -134.849846, + 57.407343 + ], + [ + -134.844369, + 57.248511 + ], + [ + -134.636246, + 56.728202 + ], + [ + -134.636246, + 56.28457 + ] + ] + ], + [ + [ + [ + -134.712923, + 58.223407 + ], + [ + -134.373353, + 58.14673 + ], + [ + -134.176183, + 58.157683 + ], + [ + -134.187137, + 58.081006 + ], + [ + -133.902336, + 57.807159 + ], + [ + -134.099505, + 57.850975 + ], + [ + -134.148798, + 57.757867 + ], + [ + -133.935197, + 57.615466 + ], + [ + -133.869474, + 57.363527 + ], + [ + -134.083075, + 57.297804 + ], + [ + -134.154275, + 57.210173 + ], + [ + -134.499322, + 57.029434 + ], + [ + -134.603384, + 57.034911 + ], + [ + -134.6472, + 57.226604 + ], + [ + -134.575999, + 57.341619 + ], + [ + -134.608861, + 57.511404 + ], + [ + -134.729354, + 57.719528 + ], + [ + -134.707446, + 57.829067 + ], + [ + -134.784123, + 58.097437 + ], + [ + -134.91557, + 58.212453 + ], + [ + -134.953908, + 58.409623 + ], + [ + -134.712923, + 58.223407 + ] + ] + ], + [ + [ + [ + -135.857603, + 57.330665 + ], + [ + -135.715203, + 57.330665 + ], + [ + -135.567326, + 57.149926 + ], + [ + -135.633049, + 57.023957 + ], + [ + -135.857603, + 56.996572 + ], + [ + -135.824742, + 57.193742 + ], + [ + -135.857603, + 57.330665 + ] + ] + ], + [ + [ + [ + -136.279328, + 58.206976 + ], + [ + -135.978096, + 58.201499 + ], + [ + -135.780926, + 58.28913 + ], + [ + -135.496125, + 58.168637 + ], + [ + -135.64948, + 58.037191 + ], + [ + -135.59471, + 57.987898 + ], + [ + -135.45231, + 58.135776 + ], + [ + -135.107263, + 58.086483 + ], + [ + -134.91557, + 57.976944 + ], + [ + -135.025108, + 57.779775 + ], + [ + -134.937477, + 57.763344 + ], + [ + -134.822462, + 57.500451 + ], + [ + -135.085355, + 57.462112 + ], + [ + -135.572802, + 57.675713 + ], + [ + -135.556372, + 57.456635 + ], + [ + -135.709726, + 57.369004 + ], + [ + -135.890465, + 57.407343 + ], + [ + -136.000004, + 57.544266 + ], + [ + -136.208128, + 57.637374 + ], + [ + -136.366959, + 57.829067 + ], + [ + -136.569606, + 57.916698 + ], + [ + -136.558652, + 58.075529 + ], + [ + -136.421728, + 58.130299 + ], + [ + -136.377913, + 58.267222 + ], + [ + -136.279328, + 58.206976 + ] + ] + ], + [ + [ + [ + -147.079854, + 60.200582 + ], + [ + -147.501579, + 59.948643 + ], + [ + -147.53444, + 59.850058 + ], + [ + -147.874011, + 59.784335 + ], + [ + -147.80281, + 59.937689 + ], + [ + -147.435855, + 60.09652 + ], + [ + -147.205824, + 60.271782 + ], + [ + -147.079854, + 60.200582 + ] + ] + ], + [ + [ + [ + -147.561825, + 60.578491 + ], + [ + -147.616594, + 60.370367 + ], + [ + -147.758995, + 60.156767 + ], + [ + -147.956165, + 60.227967 + ], + [ + -147.791856, + 60.474429 + ], + [ + -147.561825, + 60.578491 + ] + ] + ], + [ + [ + [ + -147.786379, + 70.245291 + ], + [ + -147.682318, + 70.201475 + ], + [ + -147.162008, + 70.15766 + ], + [ + -146.888161, + 70.185044 + ], + [ + -146.510252, + 70.185044 + ], + [ + -146.099482, + 70.146706 + ], + [ + -145.858496, + 70.168614 + ], + [ + -145.622988, + 70.08646 + ], + [ + -145.195787, + 69.993352 + ], + [ + -144.620708, + 69.971444 + ], + [ + -144.461877, + 70.026213 + ], + [ + -144.078491, + 70.059075 + ], + [ + -143.914183, + 70.130275 + ], + [ + -143.497935, + 70.141229 + ], + [ + -143.503412, + 70.091936 + ], + [ + -143.25695, + 70.119321 + ], + [ + -142.747594, + 70.042644 + ], + [ + -142.402547, + 69.916674 + ], + [ + -142.079408, + 69.856428 + ], + [ + -142.008207, + 69.801659 + ], + [ + -141.712453, + 69.790705 + ], + [ + -141.433129, + 69.697597 + ], + [ + -141.378359, + 69.63735 + ], + [ + -141.208574, + 69.686643 + ], + [ + -141.00045, + 69.648304 + ], + [ + -141.00045, + 60.304644 + ], + [ + -140.53491, + 60.22249 + ], + [ + -140.474664, + 60.310121 + ], + [ + -139.987216, + 60.184151 + ], + [ + -139.696939, + 60.342983 + ], + [ + -139.088998, + 60.359413 + ], + [ + -139.198537, + 60.091043 + ], + [ + -139.045183, + 59.997935 + ], + [ + -138.700135, + 59.910304 + ], + [ + -138.623458, + 59.767904 + ], + [ + -137.604747, + 59.242118 + ], + [ + -137.445916, + 58.908024 + ], + [ + -137.265177, + 59.001132 + ], + [ + -136.827022, + 59.159963 + ], + [ + -136.580559, + 59.16544 + ], + [ + -136.465544, + 59.285933 + ], + [ + -136.476498, + 59.466672 + ], + [ + -136.301236, + 59.466672 + ], + [ + -136.25742, + 59.625503 + ], + [ + -135.945234, + 59.663842 + ], + [ + -135.479694, + 59.800766 + ], + [ + -135.025108, + 59.565257 + ], + [ + -135.068924, + 59.422857 + ], + [ + -134.959385, + 59.280456 + ], + [ + -134.701969, + 59.247595 + ], + [ + -134.378829, + 59.033994 + ], + [ + -134.400737, + 58.973748 + ], + [ + -134.25286, + 58.858732 + ], + [ + -133.842089, + 58.727285 + ], + [ + -133.173903, + 58.152206 + ], + [ + -133.075318, + 57.998852 + ], + [ + -132.867194, + 57.845498 + ], + [ + -132.560485, + 57.505928 + ], + [ + -132.253777, + 57.21565 + ], + [ + -132.368792, + 57.095157 + ], + [ + -132.05113, + 57.051341 + ], + [ + -132.127807, + 56.876079 + ], + [ + -131.870391, + 56.804879 + ], + [ + -131.837529, + 56.602232 + ], + [ + -131.580113, + 56.613186 + ], + [ + -131.087188, + 56.405062 + ], + [ + -130.78048, + 56.366724 + ], + [ + -130.621648, + 56.268139 + ], + [ + -130.468294, + 56.240754 + ], + [ + -130.424478, + 56.142169 + ], + [ + -130.101339, + 56.114785 + ], + [ + -130.002754, + 55.994292 + ], + [ + -130.150631, + 55.769737 + ], + [ + -130.128724, + 55.583521 + ], + [ + -129.986323, + 55.276813 + ], + [ + -130.095862, + 55.200136 + ], + [ + -130.336847, + 54.920812 + ], + [ + -130.687372, + 54.718165 + ], + [ + -130.785957, + 54.822227 + ], + [ + -130.917403, + 54.789365 + ], + [ + -131.010511, + 54.997489 + ], + [ + -130.983126, + 55.08512 + ], + [ + -131.092665, + 55.189182 + ], + [ + -130.862634, + 55.298721 + ], + [ + -130.928357, + 55.337059 + ], + [ + -131.158389, + 55.200136 + ], + [ + -131.284358, + 55.287767 + ], + [ + -131.426759, + 55.238474 + ], + [ + -131.843006, + 55.457552 + ], + [ + -131.700606, + 55.698537 + ], + [ + -131.963499, + 55.616383 + ], + [ + -131.974453, + 55.49589 + ], + [ + -132.182576, + 55.588998 + ], + [ + -132.226392, + 55.704014 + ], + [ + -132.083991, + 55.829984 + ], + [ + -132.127807, + 55.955953 + ], + [ + -132.324977, + 55.851892 + ], + [ + -132.522147, + 56.076446 + ], + [ + -132.642639, + 56.032631 + ], + [ + -132.719317, + 56.218847 + ], + [ + -132.527624, + 56.339339 + ], + [ + -132.341408, + 56.339339 + ], + [ + -132.396177, + 56.487217 + ], + [ + -132.297592, + 56.67891 + ], + [ + -132.450946, + 56.673433 + ], + [ + -132.768609, + 56.837741 + ], + [ + -132.993164, + 57.034911 + ], + [ + -133.51895, + 57.177311 + ], + [ + -133.507996, + 57.577128 + ], + [ + -133.677781, + 57.62642 + ], + [ + -133.639442, + 57.790728 + ], + [ + -133.814705, + 57.834544 + ], + [ + -134.072121, + 58.053622 + ], + [ + -134.143321, + 58.168637 + ], + [ + -134.586953, + 58.206976 + ], + [ + -135.074401, + 58.502731 + ], + [ + -135.282525, + 59.192825 + ], + [ + -135.38111, + 59.033994 + ], + [ + -135.337294, + 58.891593 + ], + [ + -135.140124, + 58.617746 + ], + [ + -135.189417, + 58.573931 + ], + [ + -135.05797, + 58.349376 + ], + [ + -135.085355, + 58.201499 + ], + [ + -135.277048, + 58.234361 + ], + [ + -135.430402, + 58.398669 + ], + [ + -135.633049, + 58.426053 + ], + [ + -135.91785, + 58.382238 + ], + [ + -135.912373, + 58.617746 + ], + [ + -136.087635, + 58.814916 + ], + [ + -136.246466, + 58.75467 + ], + [ + -136.876314, + 58.962794 + ], + [ + -136.931084, + 58.902547 + ], + [ + -136.586036, + 58.836824 + ], + [ + -136.317666, + 58.672516 + ], + [ + -136.213604, + 58.667039 + ], + [ + -136.180743, + 58.535592 + ], + [ + -136.043819, + 58.382238 + ], + [ + -136.388867, + 58.294607 + ], + [ + -136.591513, + 58.349376 + ], + [ + -136.59699, + 58.212453 + ], + [ + -136.859883, + 58.316515 + ], + [ + -136.947514, + 58.393192 + ], + [ + -137.111823, + 58.393192 + ], + [ + -137.566409, + 58.590362 + ], + [ + -137.900502, + 58.765624 + ], + [ + -137.933364, + 58.869686 + ], + [ + -138.11958, + 59.02304 + ], + [ + -138.634412, + 59.132579 + ], + [ + -138.919213, + 59.247595 + ], + [ + -139.417615, + 59.379041 + ], + [ + -139.746231, + 59.505011 + ], + [ + -139.718846, + 59.641934 + ], + [ + -139.625738, + 59.598119 + ], + [ + -139.5162, + 59.68575 + ], + [ + -139.625738, + 59.88292 + ], + [ + -139.488815, + 59.992458 + ], + [ + -139.554538, + 60.041751 + ], + [ + -139.801, + 59.833627 + ], + [ + -140.315833, + 59.696704 + ], + [ + -140.92925, + 59.745996 + ], + [ + -141.444083, + 59.871966 + ], + [ + -141.46599, + 59.970551 + ], + [ + -141.706976, + 59.948643 + ], + [ + -141.964392, + 60.019843 + ], + [ + -142.539471, + 60.085566 + ], + [ + -142.873564, + 60.091043 + ], + [ + -143.623905, + 60.036274 + ], + [ + -143.892275, + 59.997935 + ], + [ + -144.231845, + 60.140336 + ], + [ + -144.65357, + 60.206059 + ], + [ + -144.785016, + 60.29369 + ], + [ + -144.834309, + 60.441568 + ], + [ + -145.124586, + 60.430614 + ], + [ + -145.223171, + 60.299167 + ], + [ + -145.738004, + 60.474429 + ], + [ + -145.820158, + 60.551106 + ], + [ + -146.351421, + 60.408706 + ], + [ + -146.608837, + 60.238921 + ], + [ + -146.718376, + 60.397752 + ], + [ + -146.608837, + 60.485383 + ], + [ + -146.455483, + 60.463475 + ], + [ + -145.951604, + 60.578491 + ], + [ + -146.017328, + 60.666122 + ], + [ + -146.252836, + 60.622307 + ], + [ + -146.345944, + 60.737322 + ], + [ + -146.565022, + 60.753753 + ], + [ + -146.784099, + 61.044031 + ], + [ + -146.866253, + 60.972831 + ], + [ + -147.172962, + 60.934492 + ], + [ + -147.271547, + 60.972831 + ], + [ + -147.375609, + 60.879723 + ], + [ + -147.758995, + 60.912584 + ], + [ + -147.775426, + 60.808523 + ], + [ + -148.032842, + 60.781138 + ], + [ + -148.153334, + 60.819476 + ], + [ + -148.065703, + 61.005692 + ], + [ + -148.175242, + 61.000215 + ], + [ + -148.350504, + 60.803046 + ], + [ + -148.109519, + 60.737322 + ], + [ + -148.087611, + 60.594922 + ], + [ + -147.939734, + 60.441568 + ], + [ + -148.027365, + 60.277259 + ], + [ + -148.219058, + 60.332029 + ], + [ + -148.273827, + 60.249875 + ], + [ + -148.087611, + 60.217013 + ], + [ + -147.983549, + 59.997935 + ], + [ + -148.251919, + 59.95412 + ], + [ + -148.399797, + 59.997935 + ], + [ + -148.635305, + 59.937689 + ], + [ + -148.755798, + 59.986981 + ], + [ + -149.067984, + 59.981505 + ], + [ + -149.05703, + 60.063659 + ], + [ + -149.204907, + 60.008889 + ], + [ + -149.287061, + 59.904827 + ], + [ + -149.418508, + 59.997935 + ], + [ + -149.582816, + 59.866489 + ], + [ + -149.511616, + 59.806242 + ], + [ + -149.741647, + 59.729565 + ], + [ + -149.949771, + 59.718611 + ], + [ + -150.031925, + 59.61455 + ], + [ + -150.25648, + 59.521442 + ], + [ + -150.409834, + 59.554303 + ], + [ + -150.579619, + 59.444764 + ], + [ + -150.716543, + 59.450241 + ], + [ + -151.001343, + 59.225687 + ], + [ + -151.308052, + 59.209256 + ], + [ + -151.406637, + 59.280456 + ], + [ + -151.592853, + 59.159963 + ], + [ + -151.976239, + 59.253071 + ], + [ + -151.888608, + 59.422857 + ], + [ + -151.636669, + 59.483103 + ], + [ + -151.47236, + 59.472149 + ], + [ + -151.423068, + 59.537872 + ], + [ + -151.127313, + 59.669319 + ], + [ + -151.116359, + 59.778858 + ], + [ + -151.505222, + 59.63098 + ], + [ + -151.828361, + 59.718611 + ], + [ + -151.8667, + 59.778858 + ], + [ + -151.702392, + 60.030797 + ], + [ + -151.423068, + 60.211536 + ], + [ + -151.379252, + 60.359413 + ], + [ + -151.297098, + 60.386798 + ], + [ + -151.264237, + 60.545629 + ], + [ + -151.406637, + 60.720892 + ], + [ + -151.06159, + 60.786615 + ], + [ + -150.404357, + 61.038554 + ], + [ + -150.245526, + 60.939969 + ], + [ + -150.042879, + 60.912584 + ], + [ + -149.741647, + 61.016646 + ], + [ + -150.075741, + 61.15357 + ], + [ + -150.207187, + 61.257632 + ], + [ + -150.47008, + 61.246678 + ], + [ + -150.656296, + 61.29597 + ], + [ + -150.711066, + 61.252155 + ], + [ + -151.023251, + 61.180954 + ], + [ + -151.165652, + 61.044031 + ], + [ + -151.477837, + 61.011169 + ], + [ + -151.800977, + 60.852338 + ], + [ + -151.833838, + 60.748276 + ], + [ + -152.080301, + 60.693507 + ], + [ + -152.13507, + 60.578491 + ], + [ + -152.310332, + 60.507291 + ], + [ + -152.392486, + 60.304644 + ], + [ + -152.732057, + 60.173197 + ], + [ + -152.567748, + 60.069136 + ], + [ + -152.704672, + 59.915781 + ], + [ + -153.022334, + 59.888397 + ], + [ + -153.049719, + 59.691227 + ], + [ + -153.345474, + 59.620026 + ], + [ + -153.438582, + 59.702181 + ], + [ + -153.586459, + 59.548826 + ], + [ + -153.761721, + 59.543349 + ], + [ + -153.72886, + 59.433811 + ], + [ + -154.117723, + 59.368087 + ], + [ + -154.1944, + 59.066856 + ], + [ + -153.750768, + 59.050425 + ], + [ + -153.400243, + 58.968271 + ], + [ + -153.301658, + 58.869686 + ], + [ + -153.444059, + 58.710854 + ], + [ + -153.679567, + 58.612269 + ], + [ + -153.898645, + 58.606793 + ], + [ + -153.920553, + 58.519161 + ], + [ + -154.062953, + 58.4863 + ], + [ + -153.99723, + 58.376761 + ], + [ + -154.145107, + 58.212453 + ], + [ + -154.46277, + 58.059098 + ], + [ + -154.643509, + 58.059098 + ], + [ + -154.818771, + 58.004329 + ], + [ + -154.988556, + 58.015283 + ], + [ + -155.120003, + 57.955037 + ], + [ + -155.081664, + 57.872883 + ], + [ + -155.328126, + 57.829067 + ], + [ + -155.377419, + 57.708574 + ], + [ + -155.547204, + 57.785251 + ], + [ + -155.73342, + 57.549743 + ], + [ + -156.045606, + 57.566174 + ], + [ + -156.023698, + 57.440204 + ], + [ + -156.209914, + 57.473066 + ], + [ + -156.34136, + 57.418296 + ], + [ + -156.34136, + 57.248511 + ], + [ + -156.549484, + 56.985618 + ], + [ + -156.883577, + 56.952757 + ], + [ + -157.157424, + 56.832264 + ], + [ + -157.20124, + 56.766541 + ], + [ + -157.376502, + 56.859649 + ], + [ + -157.672257, + 56.607709 + ], + [ + -157.754411, + 56.67891 + ], + [ + -157.918719, + 56.657002 + ], + [ + -157.957058, + 56.514601 + ], + [ + -158.126843, + 56.459832 + ], + [ + -158.32949, + 56.48174 + ], + [ + -158.488321, + 56.339339 + ], + [ + -158.208997, + 56.295524 + ], + [ + -158.510229, + 55.977861 + ], + [ + -159.375585, + 55.873799 + ], + [ + -159.616571, + 55.594475 + ], + [ + -159.676817, + 55.654722 + ], + [ + -159.643955, + 55.829984 + ], + [ + -159.813741, + 55.857368 + ], + [ + -160.027341, + 55.791645 + ], + [ + -160.060203, + 55.720445 + ], + [ + -160.394296, + 55.605429 + ], + [ + -160.536697, + 55.473983 + ], + [ + -160.580512, + 55.567091 + ], + [ + -160.668143, + 55.457552 + ], + [ + -160.865313, + 55.528752 + ], + [ + -161.232268, + 55.358967 + ], + [ + -161.506115, + 55.364444 + ], + [ + -161.467776, + 55.49589 + ], + [ + -161.588269, + 55.62186 + ], + [ + -161.697808, + 55.517798 + ], + [ + -161.686854, + 55.408259 + ], + [ + -162.053809, + 55.074166 + ], + [ + -162.179779, + 55.15632 + ], + [ + -162.218117, + 55.03035 + ], + [ + -162.470057, + 55.052258 + ], + [ + -162.508395, + 55.249428 + ], + [ + -162.661749, + 55.293244 + ], + [ + -162.716519, + 55.222043 + ], + [ + -162.579595, + 55.134412 + ], + [ + -162.645319, + 54.997489 + ], + [ + -162.847965, + 54.926289 + ], + [ + -163.00132, + 55.079643 + ], + [ + -163.187536, + 55.090597 + ], + [ + -163.220397, + 55.03035 + ], + [ + -163.034181, + 54.942719 + ], + [ + -163.373752, + 54.800319 + ], + [ + -163.14372, + 54.76198 + ], + [ + -163.138243, + 54.696257 + ], + [ + -163.329936, + 54.74555 + ], + [ + -163.587352, + 54.614103 + ], + [ + -164.085754, + 54.61958 + ], + [ + -164.332216, + 54.531949 + ], + [ + -164.354124, + 54.466226 + ], + [ + -164.638925, + 54.389548 + ], + [ + -164.847049, + 54.416933 + ], + [ + -164.918249, + 54.603149 + ], + [ + -164.710125, + 54.663395 + ], + [ + -164.551294, + 54.88795 + ], + [ + -164.34317, + 54.893427 + ], + [ + -163.894061, + 55.041304 + ], + [ + -163.532583, + 55.046781 + ], + [ + -163.39566, + 54.904381 + ], + [ + -163.291598, + 55.008443 + ], + [ + -163.313505, + 55.128935 + ], + [ + -163.105382, + 55.183705 + ], + [ + -162.880827, + 55.183705 + ], + [ + -162.579595, + 55.446598 + ], + [ + -162.245502, + 55.682106 + ], + [ + -161.807347, + 55.89023 + ], + [ + -161.292514, + 55.983338 + ], + [ + -161.078914, + 55.939523 + ], + [ + -160.87079, + 55.999769 + ], + [ + -160.816021, + 55.912138 + ], + [ + -160.931036, + 55.813553 + ], + [ + -160.805067, + 55.736876 + ], + [ + -160.766728, + 55.857368 + ], + [ + -160.509312, + 55.868322 + ], + [ + -160.438112, + 55.791645 + ], + [ + -160.27928, + 55.76426 + ], + [ + -160.273803, + 55.857368 + ], + [ + -160.536697, + 55.939523 + ], + [ + -160.558604, + 55.994292 + ], + [ + -160.383342, + 56.251708 + ], + [ + -160.147834, + 56.399586 + ], + [ + -159.830171, + 56.541986 + ], + [ + -159.326293, + 56.667956 + ], + [ + -158.959338, + 56.848695 + ], + [ + -158.784076, + 56.782971 + ], + [ + -158.641675, + 56.810356 + ], + [ + -158.701922, + 56.925372 + ], + [ + -158.658106, + 57.034911 + ], + [ + -158.378782, + 57.264942 + ], + [ + -157.995396, + 57.41282 + ], + [ + -157.688688, + 57.609989 + ], + [ + -157.705118, + 57.719528 + ], + [ + -157.458656, + 58.497254 + ], + [ + -157.07527, + 58.705377 + ], + [ + -157.119086, + 58.869686 + ], + [ + -158.039212, + 58.634177 + ], + [ + -158.32949, + 58.661562 + ], + [ + -158.40069, + 58.760147 + ], + [ + -158.564998, + 58.803962 + ], + [ + -158.619768, + 58.913501 + ], + [ + -158.767645, + 58.864209 + ], + [ + -158.860753, + 58.694424 + ], + [ + -158.701922, + 58.480823 + ], + [ + -158.893615, + 58.387715 + ], + [ + -159.0634, + 58.420577 + ], + [ + -159.392016, + 58.760147 + ], + [ + -159.616571, + 58.929932 + ], + [ + -159.731586, + 58.929932 + ], + [ + -159.808264, + 58.803962 + ], + [ + -159.906848, + 58.782055 + ], + [ + -160.054726, + 58.886116 + ], + [ + -160.235465, + 58.902547 + ], + [ + -160.317619, + 59.072332 + ], + [ + -160.854359, + 58.88064 + ], + [ + -161.33633, + 58.743716 + ], + [ + -161.374669, + 58.667039 + ], + [ + -161.752577, + 58.552023 + ], + [ + -161.938793, + 58.656085 + ], + [ + -161.769008, + 58.776578 + ], + [ + -161.829255, + 59.061379 + ], + [ + -161.955224, + 59.36261 + ], + [ + -161.703285, + 59.48858 + ], + [ + -161.911409, + 59.740519 + ], + [ + -162.092148, + 59.88292 + ], + [ + -162.234548, + 60.091043 + ], + [ + -162.448149, + 60.178674 + ], + [ + -162.502918, + 59.997935 + ], + [ + -162.760334, + 59.959597 + ], + [ + -163.171105, + 59.844581 + ], + [ + -163.66403, + 59.795289 + ], + [ + -163.9324, + 59.806242 + ], + [ + -164.162431, + 59.866489 + ], + [ + -164.189816, + 60.02532 + ], + [ + -164.386986, + 60.074613 + ], + [ + -164.699171, + 60.29369 + ], + [ + -164.962064, + 60.337506 + ], + [ + -165.268773, + 60.578491 + ], + [ + -165.060649, + 60.68803 + ], + [ + -165.016834, + 60.890677 + ], + [ + -165.175665, + 60.846861 + ], + [ + -165.197573, + 60.972831 + ], + [ + -165.120896, + 61.076893 + ], + [ + -165.323543, + 61.170001 + ], + [ + -165.34545, + 61.071416 + ], + [ + -165.591913, + 61.109754 + ], + [ + -165.624774, + 61.279539 + ], + [ + -165.816467, + 61.301447 + ], + [ + -165.920529, + 61.416463 + ], + [ + -165.915052, + 61.558863 + ], + [ + -166.106745, + 61.49314 + ], + [ + -166.139607, + 61.630064 + ], + [ + -165.904098, + 61.662925 + ], + [ + -166.095791, + 61.81628 + ], + [ + -165.756221, + 61.827233 + ], + [ + -165.756221, + 62.013449 + ], + [ + -165.674067, + 62.139419 + ], + [ + -165.044219, + 62.539236 + ], + [ + -164.912772, + 62.659728 + ], + [ + -164.819664, + 62.637821 + ], + [ + -164.874433, + 62.807606 + ], + [ + -164.633448, + 63.097884 + ], + [ + -164.425324, + 63.212899 + ], + [ + -164.036462, + 63.262192 + ], + [ + -163.73523, + 63.212899 + ], + [ + -163.313505, + 63.037637 + ], + [ + -163.039658, + 63.059545 + ], + [ + -162.661749, + 63.22933 + ], + [ + -162.272887, + 63.486746 + ], + [ + -162.075717, + 63.514131 + ], + [ + -162.026424, + 63.448408 + ], + [ + -161.555408, + 63.448408 + ], + [ + -161.13916, + 63.503177 + ], + [ + -160.766728, + 63.771547 + ], + [ + -160.766728, + 63.837271 + ], + [ + -160.952944, + 64.08921 + ], + [ + -160.974852, + 64.237087 + ], + [ + -161.26513, + 64.395918 + ], + [ + -161.374669, + 64.532842 + ], + [ + -161.078914, + 64.494503 + ], + [ + -160.79959, + 64.609519 + ], + [ + -160.783159, + 64.719058 + ], + [ + -161.144637, + 64.921705 + ], + [ + -161.413007, + 64.762873 + ], + [ + -161.664946, + 64.790258 + ], + [ + -161.900455, + 64.702627 + ], + [ + -162.168825, + 64.680719 + ], + [ + -162.234548, + 64.620473 + ], + [ + -162.541257, + 64.532842 + ], + [ + -162.634365, + 64.384965 + ], + [ + -162.787719, + 64.324718 + ], + [ + -162.858919, + 64.49998 + ], + [ + -163.045135, + 64.538319 + ], + [ + -163.176582, + 64.401395 + ], + [ + -163.253259, + 64.467119 + ], + [ + -163.598306, + 64.565704 + ], + [ + -164.304832, + 64.560227 + ], + [ + -164.80871, + 64.450688 + ], + [ + -165.000403, + 64.434257 + ], + [ + -165.411174, + 64.49998 + ], + [ + -166.188899, + 64.576658 + ], + [ + -166.391546, + 64.636904 + ], + [ + -166.484654, + 64.735489 + ], + [ + -166.413454, + 64.872412 + ], + [ + -166.692778, + 64.987428 + ], + [ + -166.638008, + 65.113398 + ], + [ + -166.462746, + 65.179121 + ], + [ + -166.517516, + 65.337952 + ], + [ + -166.796839, + 65.337952 + ], + [ + -167.026871, + 65.381768 + ], + [ + -167.47598, + 65.414629 + ], + [ + -167.711489, + 65.496784 + ], + [ + -168.072967, + 65.578938 + ], + [ + -168.105828, + 65.682999 + ], + [ + -167.541703, + 65.819923 + ], + [ + -166.829701, + 66.049954 + ], + [ + -166.3313, + 66.186878 + ], + [ + -166.046499, + 66.110201 + ], + [ + -165.756221, + 66.09377 + ], + [ + -165.690498, + 66.203309 + ], + [ + -165.86576, + 66.21974 + ], + [ + -165.88219, + 66.312848 + ], + [ + -165.186619, + 66.466202 + ], + [ + -164.403417, + 66.581218 + ], + [ + -163.981692, + 66.592172 + ], + [ + -163.751661, + 66.553833 + ], + [ + -163.872153, + 66.389525 + ], + [ + -163.828338, + 66.274509 + ], + [ + -163.915969, + 66.192355 + ], + [ + -163.768091, + 66.060908 + ], + [ + -163.494244, + 66.082816 + ], + [ + -163.149197, + 66.060908 + ], + [ + -162.749381, + 66.088293 + ], + [ + -162.634365, + 66.039001 + ], + [ + -162.371472, + 66.028047 + ], + [ + -162.14144, + 66.077339 + ], + [ + -161.840208, + 66.02257 + ], + [ + -161.549931, + 66.241647 + ], + [ + -161.341807, + 66.252601 + ], + [ + -161.199406, + 66.208786 + ], + [ + -161.128206, + 66.334755 + ], + [ + -161.528023, + 66.395002 + ], + [ + -161.911409, + 66.345709 + ], + [ + -161.87307, + 66.510017 + ], + [ + -162.174302, + 66.68528 + ], + [ + -162.502918, + 66.740049 + ], + [ + -162.601503, + 66.89888 + ], + [ + -162.344087, + 66.937219 + ], + [ + -162.015471, + 66.778388 + ], + [ + -162.075717, + 66.652418 + ], + [ + -161.916886, + 66.553833 + ], + [ + -161.571838, + 66.438817 + ], + [ + -161.489684, + 66.55931 + ], + [ + -161.884024, + 66.718141 + ], + [ + -161.714239, + 67.002942 + ], + [ + -161.851162, + 67.052235 + ], + [ + -162.240025, + 66.991988 + ], + [ + -162.639842, + 67.008419 + ], + [ + -162.700088, + 67.057712 + ], + [ + -162.902735, + 67.008419 + ], + [ + -163.740707, + 67.128912 + ], + [ + -163.757138, + 67.254881 + ], + [ + -164.009077, + 67.534205 + ], + [ + -164.211724, + 67.638267 + ], + [ + -164.534863, + 67.725898 + ], + [ + -165.192096, + 67.966884 + ], + [ + -165.493328, + 68.059992 + ], + [ + -165.794559, + 68.081899 + ], + [ + -166.243668, + 68.246208 + ], + [ + -166.681824, + 68.339316 + ], + [ + -166.703731, + 68.372177 + ], + [ + -166.375115, + 68.42147 + ], + [ + -166.227238, + 68.574824 + ], + [ + -166.216284, + 68.881533 + ], + [ + -165.329019, + 68.859625 + ], + [ + -164.255539, + 68.930825 + ], + [ + -163.976215, + 68.985595 + ], + [ + -163.532583, + 69.138949 + ], + [ + -163.110859, + 69.374457 + ], + [ + -163.023228, + 69.609966 + ], + [ + -162.842489, + 69.812613 + ], + [ + -162.470057, + 69.982398 + ], + [ + -162.311225, + 70.108367 + ], + [ + -161.851162, + 70.311014 + ], + [ + -161.779962, + 70.256245 + ], + [ + -161.396576, + 70.239814 + ], + [ + -160.837928, + 70.343876 + ], + [ + -160.487404, + 70.453415 + ], + [ + -159.649432, + 70.792985 + ], + [ + -159.33177, + 70.809416 + ], + [ + -159.298908, + 70.760123 + ], + [ + -158.975769, + 70.798462 + ], + [ + -158.658106, + 70.787508 + ], + [ + -158.033735, + 70.831323 + ], + [ + -157.420318, + 70.979201 + ], + [ + -156.812377, + 71.285909 + ], + [ + -156.565915, + 71.351633 + ], + [ + -156.522099, + 71.296863 + ], + [ + -155.585543, + 71.170894 + ], + [ + -155.508865, + 71.083263 + ], + [ + -155.832005, + 70.968247 + ], + [ + -155.979882, + 70.96277 + ], + [ + -155.974405, + 70.809416 + ], + [ + -155.503388, + 70.858708 + ], + [ + -155.476004, + 70.940862 + ], + [ + -155.262403, + 71.017539 + ], + [ + -155.191203, + 70.973724 + ], + [ + -155.032372, + 71.148986 + ], + [ + -154.566832, + 70.990155 + ], + [ + -154.643509, + 70.869662 + ], + [ + -154.353231, + 70.8368 + ], + [ + -154.183446, + 70.7656 + ], + [ + -153.931507, + 70.880616 + ], + [ + -153.487874, + 70.886093 + ], + [ + -153.235935, + 70.924431 + ], + [ + -152.589656, + 70.886093 + ], + [ + -152.26104, + 70.842277 + ], + [ + -152.419871, + 70.606769 + ], + [ + -151.817408, + 70.546523 + ], + [ + -151.773592, + 70.486276 + ], + [ + -151.187559, + 70.382214 + ], + [ + -151.182082, + 70.431507 + ], + [ + -150.760358, + 70.49723 + ], + [ + -150.355064, + 70.491753 + ], + [ + -150.349588, + 70.436984 + ], + [ + -150.114079, + 70.431507 + ], + [ + -149.867617, + 70.508184 + ], + [ + -149.462323, + 70.519138 + ], + [ + -149.177522, + 70.486276 + ], + [ + -148.78866, + 70.404122 + ], + [ + -148.607921, + 70.420553 + ], + [ + -148.350504, + 70.305537 + ], + [ + -148.202627, + 70.349353 + ], + [ + -147.961642, + 70.316491 + ], + [ + -147.786379, + 70.245291 + ] + ] + ], + [ + [ + [ + -152.94018, + 58.026237 + ], + [ + -152.945657, + 57.982421 + ], + [ + -153.290705, + 58.048145 + ], + [ + -153.044242, + 58.305561 + ], + [ + -152.819688, + 58.327469 + ], + [ + -152.666333, + 58.562977 + ], + [ + -152.496548, + 58.354853 + ], + [ + -152.354148, + 58.426053 + ], + [ + -152.080301, + 58.311038 + ], + [ + -152.080301, + 58.152206 + ], + [ + -152.480117, + 58.130299 + ], + [ + -152.655379, + 58.059098 + ], + [ + -152.94018, + 58.026237 + ] + ] + ], + [ + [ + [ + -153.958891, + 57.538789 + ], + [ + -153.67409, + 57.670236 + ], + [ + -153.931507, + 57.69762 + ], + [ + -153.936983, + 57.812636 + ], + [ + -153.723383, + 57.889313 + ], + [ + -153.570028, + 57.834544 + ], + [ + -153.548121, + 57.719528 + ], + [ + -153.46049, + 57.796205 + ], + [ + -153.455013, + 57.96599 + ], + [ + -153.268797, + 57.889313 + ], + [ + -153.235935, + 57.998852 + ], + [ + -153.071627, + 57.933129 + ], + [ + -152.874457, + 57.933129 + ], + [ + -152.721103, + 57.993375 + ], + [ + -152.469163, + 57.889313 + ], + [ + -152.469163, + 57.599035 + ], + [ + -152.151501, + 57.620943 + ], + [ + -152.359625, + 57.42925 + ], + [ + -152.74301, + 57.505928 + ], + [ + -152.60061, + 57.379958 + ], + [ + -152.710149, + 57.275896 + ], + [ + -152.907319, + 57.325188 + ], + [ + -152.912796, + 57.128019 + ], + [ + -153.214027, + 57.073249 + ], + [ + -153.312612, + 56.991095 + ], + [ + -153.498828, + 57.067772 + ], + [ + -153.695998, + 56.859649 + ], + [ + -153.849352, + 56.837741 + ], + [ + -154.013661, + 56.744633 + ], + [ + -154.073907, + 56.969187 + ], + [ + -154.303938, + 56.848695 + ], + [ + -154.314892, + 56.919895 + ], + [ + -154.523016, + 56.991095 + ], + [ + -154.539447, + 57.193742 + ], + [ + -154.742094, + 57.275896 + ], + [ + -154.627078, + 57.511404 + ], + [ + -154.227261, + 57.659282 + ], + [ + -153.980799, + 57.648328 + ], + [ + -153.958891, + 57.538789 + ] + ] + ], + [ + [ + [ + -154.53397, + 56.602232 + ], + [ + -154.742094, + 56.399586 + ], + [ + -154.807817, + 56.432447 + ], + [ + -154.53397, + 56.602232 + ] + ] + ], + [ + [ + [ + -155.634835, + 55.923092 + ], + [ + -155.476004, + 55.912138 + ], + [ + -155.530773, + 55.704014 + ], + [ + -155.793666, + 55.731399 + ], + [ + -155.837482, + 55.802599 + ], + [ + -155.634835, + 55.923092 + ] + ] + ], + [ + [ + [ + -159.890418, + 55.28229 + ], + [ + -159.950664, + 55.068689 + ], + [ + -160.257373, + 54.893427 + ], + [ + -160.109495, + 55.161797 + ], + [ + -160.005433, + 55.134412 + ], + [ + -159.890418, + 55.28229 + ] + ] + ], + [ + [ + [ + -160.520266, + 55.358967 + ], + [ + -160.33405, + 55.358967 + ], + [ + -160.339527, + 55.249428 + ], + [ + -160.525743, + 55.128935 + ], + [ + -160.690051, + 55.211089 + ], + [ + -160.794113, + 55.134412 + ], + [ + -160.854359, + 55.320628 + ], + [ + -160.79959, + 55.380875 + ], + [ + -160.520266, + 55.358967 + ] + ] + ], + [ + [ + [ + -162.256456, + 54.981058 + ], + [ + -162.234548, + 54.893427 + ], + [ + -162.349564, + 54.838658 + ], + [ + -162.437195, + 54.931766 + ], + [ + -162.256456, + 54.981058 + ] + ] + ], + [ + [ + [ + -162.415287, + 63.634624 + ], + [ + -162.563165, + 63.536039 + ], + [ + -162.612457, + 63.62367 + ], + [ + -162.415287, + 63.634624 + ] + ] + ], + [ + [ + [ + -162.80415, + 54.488133 + ], + [ + -162.590549, + 54.449795 + ], + [ + -162.612457, + 54.367641 + ], + [ + -162.782242, + 54.373118 + ], + [ + -162.80415, + 54.488133 + ] + ] + ], + [ + [ + [ + -165.548097, + 54.29644 + ], + [ + -165.476897, + 54.181425 + ], + [ + -165.630251, + 54.132132 + ], + [ + -165.685021, + 54.252625 + ], + [ + -165.548097, + 54.29644 + ] + ] + ], + [ + [ + [ + -165.73979, + 54.15404 + ], + [ + -166.046499, + 54.044501 + ], + [ + -166.112222, + 54.121178 + ], + [ + -165.980775, + 54.219763 + ], + [ + -165.73979, + 54.15404 + ] + ] + ], + [ + [ + [ + -166.364161, + 60.359413 + ], + [ + -166.13413, + 60.397752 + ], + [ + -166.084837, + 60.326552 + ], + [ + -165.88219, + 60.342983 + ], + [ + -165.685021, + 60.277259 + ], + [ + -165.646682, + 59.992458 + ], + [ + -165.750744, + 59.89935 + ], + [ + -166.00816, + 59.844581 + ], + [ + -166.062929, + 59.745996 + ], + [ + -166.440838, + 59.855535 + ], + [ + -166.6161, + 59.850058 + ], + [ + -166.994009, + 59.992458 + ], + [ + -167.125456, + 59.992458 + ], + [ + -167.344534, + 60.074613 + ], + [ + -167.421211, + 60.206059 + ], + [ + -167.311672, + 60.238921 + ], + [ + -166.93924, + 60.206059 + ], + [ + -166.763978, + 60.310121 + ], + [ + -166.577762, + 60.321075 + ], + [ + -166.495608, + 60.392275 + ], + [ + -166.364161, + 60.359413 + ] + ] + ], + [ + [ + [ + -166.375115, + 54.01164 + ], + [ + -166.210807, + 53.934962 + ], + [ + -166.5449, + 53.748746 + ], + [ + -166.539423, + 53.715885 + ], + [ + -166.117699, + 53.852808 + ], + [ + -166.112222, + 53.776131 + ], + [ + -166.282007, + 53.683023 + ], + [ + -166.555854, + 53.622777 + ], + [ + -166.583239, + 53.529669 + ], + [ + -166.878994, + 53.431084 + ], + [ + -167.13641, + 53.425607 + ], + [ + -167.306195, + 53.332499 + ], + [ + -167.623857, + 53.250345 + ], + [ + -167.793643, + 53.337976 + ], + [ + -167.459549, + 53.442038 + ], + [ + -167.355487, + 53.425607 + ], + [ + -167.103548, + 53.513238 + ], + [ + -167.163794, + 53.611823 + ], + [ + -167.021394, + 53.715885 + ], + [ + -166.807793, + 53.666592 + ], + [ + -166.785886, + 53.732316 + ], + [ + -167.015917, + 53.754223 + ], + [ + -167.141887, + 53.825424 + ], + [ + -167.032348, + 53.945916 + ], + [ + -166.643485, + 54.017116 + ], + [ + -166.561331, + 53.880193 + ], + [ + -166.375115, + 54.01164 + ] + ] + ], + [ + [ + [ + -168.790446, + 53.157237 + ], + [ + -168.40706, + 53.34893 + ], + [ + -168.385152, + 53.431084 + ], + [ + -168.237275, + 53.524192 + ], + [ + -168.007243, + 53.568007 + ], + [ + -167.886751, + 53.518715 + ], + [ + -167.842935, + 53.387268 + ], + [ + -168.270136, + 53.244868 + ], + [ + -168.500168, + 53.036744 + ], + [ + -168.686384, + 52.965544 + ], + [ + -168.790446, + 53.157237 + ] + ] + ], + [ + [ + [ + -169.74891, + 52.894344 + ], + [ + -169.705095, + 52.795759 + ], + [ + -169.962511, + 52.790282 + ], + [ + -169.989896, + 52.856005 + ], + [ + -169.74891, + 52.894344 + ] + ] + ], + [ + [ + [ + -170.148727, + 57.221127 + ], + [ + -170.28565, + 57.128019 + ], + [ + -170.313035, + 57.221127 + ], + [ + -170.148727, + 57.221127 + ] + ] + ], + [ + [ + [ + -170.669036, + 52.697174 + ], + [ + -170.603313, + 52.604066 + ], + [ + -170.789529, + 52.538343 + ], + [ + -170.816914, + 52.636928 + ], + [ + -170.669036, + 52.697174 + ] + ] + ], + [ + [ + [ + -171.742517, + 63.716778 + ], + [ + -170.94836, + 63.5689 + ], + [ + -170.488297, + 63.69487 + ], + [ + -170.280174, + 63.683916 + ], + [ + -170.093958, + 63.612716 + ], + [ + -170.044665, + 63.492223 + ], + [ + -169.644848, + 63.4265 + ], + [ + -169.518879, + 63.366254 + ], + [ + -168.99857, + 63.338869 + ], + [ + -168.686384, + 63.295053 + ], + [ + -168.856169, + 63.147176 + ], + [ + -169.108108, + 63.180038 + ], + [ + -169.376478, + 63.152653 + ], + [ + -169.513402, + 63.08693 + ], + [ + -169.639372, + 62.939052 + ], + [ + -169.831064, + 63.075976 + ], + [ + -170.055619, + 63.169084 + ], + [ + -170.263743, + 63.180038 + ], + [ + -170.362328, + 63.2841 + ], + [ + -170.866206, + 63.415546 + ], + [ + -171.101715, + 63.421023 + ], + [ + -171.463193, + 63.306007 + ], + [ + -171.73704, + 63.366254 + ], + [ + -171.852055, + 63.486746 + ], + [ + -171.742517, + 63.716778 + ] + ] + ], + [ + [ + [ + -172.432611, + 52.390465 + ], + [ + -172.41618, + 52.275449 + ], + [ + -172.607873, + 52.253542 + ], + [ + -172.569535, + 52.352127 + ], + [ + -172.432611, + 52.390465 + ] + ] + ], + [ + [ + [ + -173.626584, + 52.14948 + ], + [ + -173.495138, + 52.105664 + ], + [ + -173.122706, + 52.111141 + ], + [ + -173.106275, + 52.07828 + ], + [ + -173.549907, + 52.028987 + ], + [ + -173.626584, + 52.14948 + ] + ] + ], + [ + [ + [ + -174.322156, + 52.280926 + ], + [ + -174.327632, + 52.379511 + ], + [ + -174.185232, + 52.41785 + ], + [ + -173.982585, + 52.319265 + ], + [ + -174.059262, + 52.226157 + ], + [ + -174.179755, + 52.231634 + ], + [ + -174.141417, + 52.127572 + ], + [ + -174.333109, + 52.116618 + ], + [ + -174.738403, + 52.007079 + ], + [ + -174.968435, + 52.039941 + ], + [ + -174.902711, + 52.116618 + ], + [ + -174.656249, + 52.105664 + ], + [ + -174.322156, + 52.280926 + ] + ] + ], + [ + [ + [ + -176.469116, + 51.853725 + ], + [ + -176.288377, + 51.870156 + ], + [ + -176.288377, + 51.744186 + ], + [ + -176.518409, + 51.760617 + ], + [ + -176.80321, + 51.61274 + ], + [ + -176.912748, + 51.80991 + ], + [ + -176.792256, + 51.815386 + ], + [ + -176.775825, + 51.963264 + ], + [ + -176.627947, + 51.968741 + ], + [ + -176.627947, + 51.859202 + ], + [ + -176.469116, + 51.853725 + ] + ] + ], + [ + [ + [ + -177.153734, + 51.946833 + ], + [ + -177.044195, + 51.897541 + ], + [ + -177.120872, + 51.727755 + ], + [ + -177.274226, + 51.678463 + ], + [ + -177.279703, + 51.782525 + ], + [ + -177.153734, + 51.946833 + ] + ] + ], + [ + [ + [ + -178.123152, + 51.919448 + ], + [ + -177.953367, + 51.913971 + ], + [ + -177.800013, + 51.793479 + ], + [ + -177.964321, + 51.651078 + ], + [ + -178.123152, + 51.919448 + ] + ] + ], + [ + [ + [ + -186.892443, + 52.992929 + ], + [ + -186.706227, + 52.927205 + ], + [ + -186.695274, + 52.823143 + ], + [ + -187.09509, + 52.762897 + ], + [ + -187.357983, + 52.927205 + ], + [ + -187.357983, + 53.003883 + ], + [ + -186.892443, + 52.992929 + ] + ] + ] + ] + } + }, + { + "type": "Feature", + "id": "04", + "properties": { + "name": "Arizona" + }, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -109.042503, + 37.000263 + ], + [ + -109.04798, + 31.331629 + ], + [ + -111.074448, + 31.331629 + ], + [ + -112.246513, + 31.704061 + ], + [ + -114.815198, + 32.492741 + ], + [ + -114.72209, + 32.717295 + ], + [ + -114.524921, + 32.755634 + ], + [ + -114.470151, + 32.843265 + ], + [ + -114.524921, + 33.029481 + ], + [ + -114.661844, + 33.034958 + ], + [ + -114.727567, + 33.40739 + ], + [ + -114.524921, + 33.54979 + ], + [ + -114.497536, + 33.697668 + ], + [ + -114.535874, + 33.933176 + ], + [ + -114.415382, + 34.108438 + ], + [ + -114.256551, + 34.174162 + ], + [ + -114.136058, + 34.305608 + ], + [ + -114.333228, + 34.448009 + ], + [ + -114.470151, + 34.710902 + ], + [ + -114.634459, + 34.87521 + ], + [ + -114.634459, + 35.00118 + ], + [ + -114.574213, + 35.138103 + ], + [ + -114.596121, + 35.324319 + ], + [ + -114.678275, + 35.516012 + ], + [ + -114.738521, + 36.102045 + ], + [ + -114.371566, + 36.140383 + ], + [ + -114.251074, + 36.01989 + ], + [ + -114.152489, + 36.025367 + ], + [ + -114.048427, + 36.195153 + ], + [ + -114.048427, + 37.000263 + ], + [ + -110.499369, + 37.00574 + ], + [ + -109.042503, + 37.000263 + ] + ] + ] + } + }, + { + "type": "Feature", + "id": "05", + "properties": { + "name": "Arkansas" + }, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -94.473842, + 36.501861 + ], + [ + -90.152536, + 36.496384 + ], + [ + -90.064905, + 36.304691 + ], + [ + -90.218259, + 36.184199 + ], + [ + -90.377091, + 35.997983 + ], + [ + -89.730812, + 35.997983 + ], + [ + -89.763673, + 35.811767 + ], + [ + -89.911551, + 35.756997 + ], + [ + -89.944412, + 35.603643 + ], + [ + -90.130628, + 35.439335 + ], + [ + -90.114197, + 35.198349 + ], + [ + -90.212782, + 35.023087 + ], + [ + -90.311367, + 34.995703 + ], + [ + -90.251121, + 34.908072 + ], + [ + -90.409952, + 34.831394 + ], + [ + -90.481152, + 34.661609 + ], + [ + -90.585214, + 34.617794 + ], + [ + -90.568783, + 34.420624 + ], + [ + -90.749522, + 34.365854 + ], + [ + -90.744046, + 34.300131 + ], + [ + -90.952169, + 34.135823 + ], + [ + -90.891923, + 34.026284 + ], + [ + -91.072662, + 33.867453 + ], + [ + -91.231493, + 33.560744 + ], + [ + -91.056231, + 33.429298 + ], + [ + -91.143862, + 33.347144 + ], + [ + -91.089093, + 33.13902 + ], + [ + -91.16577, + 33.002096 + ], + [ + -93.608485, + 33.018527 + ], + [ + -94.041164, + 33.018527 + ], + [ + -94.041164, + 33.54979 + ], + [ + -94.183564, + 33.593606 + ], + [ + -94.380734, + 33.544313 + ], + [ + -94.484796, + 33.637421 + ], + [ + -94.430026, + 35.395519 + ], + [ + -94.616242, + 36.501861 + ], + [ + -94.473842, + 36.501861 + ] + ] + ] + } + }, + { + "type": "Feature", + "id": "06", + "properties": { + "name": "California" + }, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -123.233256, + 42.006186 + ], + [ + -122.378853, + 42.011663 + ], + [ + -121.037003, + 41.995232 + ], + [ + -120.001861, + 41.995232 + ], + [ + -119.996384, + 40.264519 + ], + [ + -120.001861, + 38.999346 + ], + [ + -118.71478, + 38.101128 + ], + [ + -117.498899, + 37.21934 + ], + [ + -116.540435, + 36.501861 + ], + [ + -115.85034, + 35.970598 + ], + [ + -114.634459, + 35.00118 + ], + [ + -114.634459, + 34.87521 + ], + [ + -114.470151, + 34.710902 + ], + [ + -114.333228, + 34.448009 + ], + [ + -114.136058, + 34.305608 + ], + [ + -114.256551, + 34.174162 + ], + [ + -114.415382, + 34.108438 + ], + [ + -114.535874, + 33.933176 + ], + [ + -114.497536, + 33.697668 + ], + [ + -114.524921, + 33.54979 + ], + [ + -114.727567, + 33.40739 + ], + [ + -114.661844, + 33.034958 + ], + [ + -114.524921, + 33.029481 + ], + [ + -114.470151, + 32.843265 + ], + [ + -114.524921, + 32.755634 + ], + [ + -114.72209, + 32.717295 + ], + [ + -116.04751, + 32.624187 + ], + [ + -117.126467, + 32.536556 + ], + [ + -117.24696, + 32.668003 + ], + [ + -117.252437, + 32.876127 + ], + [ + -117.329114, + 33.122589 + ], + [ + -117.471515, + 33.297851 + ], + [ + -117.7837, + 33.538836 + ], + [ + -118.183517, + 33.763391 + ], + [ + -118.260194, + 33.703145 + ], + [ + -118.413548, + 33.741483 + ], + [ + -118.391641, + 33.840068 + ], + [ + -118.566903, + 34.042715 + ], + [ + -118.802411, + 33.998899 + ], + [ + -119.218659, + 34.146777 + ], + [ + -119.278905, + 34.26727 + ], + [ + -119.558229, + 34.415147 + ], + [ + -119.875891, + 34.40967 + ], + [ + -120.138784, + 34.475393 + ], + [ + -120.472878, + 34.448009 + ], + [ + -120.64814, + 34.579455 + ], + [ + -120.609801, + 34.858779 + ], + [ + -120.670048, + 34.902595 + ], + [ + -120.631709, + 35.099764 + ], + [ + -120.894602, + 35.247642 + ], + [ + -120.905556, + 35.450289 + ], + [ + -121.004141, + 35.461243 + ], + [ + -121.168449, + 35.636505 + ], + [ + -121.283465, + 35.674843 + ], + [ + -121.332757, + 35.784382 + ], + [ + -121.716143, + 36.195153 + ], + [ + -121.896882, + 36.315645 + ], + [ + -121.935221, + 36.638785 + ], + [ + -121.858544, + 36.6114 + ], + [ + -121.787344, + 36.803093 + ], + [ + -121.929744, + 36.978355 + ], + [ + -122.105006, + 36.956447 + ], + [ + -122.335038, + 37.115279 + ], + [ + -122.417192, + 37.241248 + ], + [ + -122.400761, + 37.361741 + ], + [ + -122.515777, + 37.520572 + ], + [ + -122.515777, + 37.783465 + ], + [ + -122.329561, + 37.783465 + ], + [ + -122.406238, + 38.15042 + ], + [ + -122.488392, + 38.112082 + ], + [ + -122.504823, + 37.931343 + ], + [ + -122.701993, + 37.893004 + ], + [ + -122.937501, + 38.029928 + ], + [ + -122.97584, + 38.265436 + ], + [ + -123.129194, + 38.451652 + ], + [ + -123.331841, + 38.566668 + ], + [ + -123.44138, + 38.698114 + ], + [ + -123.737134, + 38.95553 + ], + [ + -123.687842, + 39.032208 + ], + [ + -123.824765, + 39.366301 + ], + [ + -123.764519, + 39.552517 + ], + [ + -123.85215, + 39.831841 + ], + [ + -124.109566, + 40.105688 + ], + [ + -124.361506, + 40.259042 + ], + [ + -124.410798, + 40.439781 + ], + [ + -124.158859, + 40.877937 + ], + [ + -124.109566, + 41.025814 + ], + [ + -124.158859, + 41.14083 + ], + [ + -124.065751, + 41.442061 + ], + [ + -124.147905, + 41.715908 + ], + [ + -124.257444, + 41.781632 + ], + [ + -124.213628, + 42.000709 + ], + [ + -123.233256, + 42.006186 + ] + ] + ] + } + }, + { + "type": "Feature", + "id": "08", + "properties": { + "name": "Colorado" + }, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -107.919731, + 41.003906 + ], + [ + -105.728954, + 40.998429 + ], + [ + -104.053011, + 41.003906 + ], + [ + -102.053927, + 41.003906 + ], + [ + -102.053927, + 40.001626 + ], + [ + -102.042974, + 36.994786 + ], + [ + -103.001438, + 37.000263 + ], + [ + -104.337812, + 36.994786 + ], + [ + -106.868158, + 36.994786 + ], + [ + -107.421329, + 37.000263 + ], + [ + -109.042503, + 37.000263 + ], + [ + -109.042503, + 38.166851 + ], + [ + -109.058934, + 38.27639 + ], + [ + -109.053457, + 39.125316 + ], + [ + -109.04798, + 40.998429 + ], + [ + -107.919731, + 41.003906 + ] + ] + ] + } + }, + { + "type": "Feature", + "id": "09", + "properties": { + "name": "Connecticut" + }, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -73.053528, + 42.039048 + ], + [ + -71.799309, + 42.022617 + ], + [ + -71.799309, + 42.006186 + ], + [ + -71.799309, + 41.414677 + ], + [ + -71.859555, + 41.321569 + ], + [ + -71.947186, + 41.338 + ], + [ + -72.385341, + 41.261322 + ], + [ + -72.905651, + 41.28323 + ], + [ + -73.130205, + 41.146307 + ], + [ + -73.371191, + 41.102491 + ], + [ + -73.655992, + 40.987475 + ], + [ + -73.727192, + 41.102491 + ], + [ + -73.48073, + 41.21203 + ], + [ + -73.55193, + 41.294184 + ], + [ + -73.486206, + 42.050002 + ], + [ + -73.053528, + 42.039048 + ] + ] + ] + } + }, + { + "type": "Feature", + "id": "10", + "properties": { + "name": "Delaware" + }, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -75.414089, + 39.804456 + ], + [ + -75.507197, + 39.683964 + ], + [ + -75.611259, + 39.61824 + ], + [ + -75.589352, + 39.459409 + ], + [ + -75.441474, + 39.311532 + ], + [ + -75.403136, + 39.065069 + ], + [ + -75.189535, + 38.807653 + ], + [ + -75.09095, + 38.796699 + ], + [ + -75.047134, + 38.451652 + ], + [ + -75.693413, + 38.462606 + ], + [ + -75.786521, + 39.722302 + ], + [ + -75.616736, + 39.831841 + ], + [ + -75.414089, + 39.804456 + ] + ] + ] + } + }, + { + "type": "Feature", + "id": "11", + "properties": { + "name": "District of Columbia" + }, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -77.035264, + 38.993869 + ], + [ + -76.909294, + 38.895284 + ], + [ + -77.040741, + 38.791222 + ], + [ + -77.117418, + 38.933623 + ], + [ + -77.035264, + 38.993869 + ] + ] + ] + } + }, + { + "type": "Feature", + "id": "12", + "properties": { + "name": "Florida" + }, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -85.497137, + 30.997536 + ], + [ + -85.004212, + 31.003013 + ], + [ + -84.867289, + 30.712735 + ], + [ + -83.498053, + 30.647012 + ], + [ + -82.216449, + 30.570335 + ], + [ + -82.167157, + 30.356734 + ], + [ + -82.046664, + 30.362211 + ], + [ + -82.002849, + 30.564858 + ], + [ + -82.041187, + 30.751074 + ], + [ + -81.948079, + 30.827751 + ], + [ + -81.718048, + 30.745597 + ], + [ + -81.444201, + 30.707258 + ], + [ + -81.383954, + 30.27458 + ], + [ + -81.257985, + 29.787132 + ], + [ + -80.967707, + 29.14633 + ], + [ + -80.524075, + 28.461713 + ], + [ + -80.589798, + 28.41242 + ], + [ + -80.56789, + 28.094758 + ], + [ + -80.381674, + 27.738757 + ], + [ + -80.091397, + 27.021277 + ], + [ + -80.03115, + 26.796723 + ], + [ + -80.036627, + 26.566691 + ], + [ + -80.146166, + 25.739673 + ], + [ + -80.239274, + 25.723243 + ], + [ + -80.337859, + 25.465826 + ], + [ + -80.304997, + 25.383672 + ], + [ + -80.49669, + 25.197456 + ], + [ + -80.573367, + 25.241272 + ], + [ + -80.759583, + 25.164595 + ], + [ + -81.077246, + 25.120779 + ], + [ + -81.170354, + 25.224841 + ], + [ + -81.126538, + 25.378195 + ], + [ + -81.351093, + 25.821827 + ], + [ + -81.526355, + 25.903982 + ], + [ + -81.679709, + 25.843735 + ], + [ + -81.800202, + 26.090198 + ], + [ + -81.833064, + 26.292844 + ], + [ + -82.041187, + 26.517399 + ], + [ + -82.09048, + 26.665276 + ], + [ + -82.057618, + 26.878877 + ], + [ + -82.172634, + 26.917216 + ], + [ + -82.145249, + 26.791246 + ], + [ + -82.249311, + 26.758384 + ], + [ + -82.566974, + 27.300601 + ], + [ + -82.692943, + 27.437525 + ], + [ + -82.391711, + 27.837342 + ], + [ + -82.588881, + 27.815434 + ], + [ + -82.720328, + 27.689464 + ], + [ + -82.851774, + 27.886634 + ], + [ + -82.676512, + 28.434328 + ], + [ + -82.643651, + 28.888914 + ], + [ + -82.764143, + 28.998453 + ], + [ + -82.802482, + 29.14633 + ], + [ + -82.994175, + 29.179192 + ], + [ + -83.218729, + 29.420177 + ], + [ + -83.399469, + 29.518762 + ], + [ + -83.410422, + 29.66664 + ], + [ + -83.536392, + 29.721409 + ], + [ + -83.640454, + 29.885717 + ], + [ + -84.02384, + 30.104795 + ], + [ + -84.357933, + 30.055502 + ], + [ + -84.341502, + 29.902148 + ], + [ + -84.451041, + 29.929533 + ], + [ + -84.867289, + 29.743317 + ], + [ + -85.310921, + 29.699501 + ], + [ + -85.299967, + 29.80904 + ], + [ + -85.404029, + 29.940487 + ], + [ + -85.924338, + 30.236241 + ], + [ + -86.29677, + 30.362211 + ], + [ + -86.630863, + 30.395073 + ], + [ + -86.910187, + 30.373165 + ], + [ + -87.518128, + 30.280057 + ], + [ + -87.37025, + 30.427934 + ], + [ + -87.446927, + 30.510088 + ], + [ + -87.408589, + 30.674397 + ], + [ + -87.633143, + 30.86609 + ], + [ + -87.600282, + 30.997536 + ], + [ + -85.497137, + 30.997536 + ] + ] + ] + } + }, + { + "type": "Feature", + "id": "13", + "properties": { + "name": "Georgia" + }, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -83.109191, + 35.00118 + ], + [ + -83.322791, + 34.787579 + ], + [ + -83.339222, + 34.683517 + ], + [ + -83.005129, + 34.469916 + ], + [ + -82.901067, + 34.486347 + ], + [ + -82.747713, + 34.26727 + ], + [ + -82.714851, + 34.152254 + ], + [ + -82.55602, + 33.94413 + ], + [ + -82.325988, + 33.81816 + ], + [ + -82.194542, + 33.631944 + ], + [ + -81.926172, + 33.462159 + ], + [ + -81.937125, + 33.347144 + ], + [ + -81.761863, + 33.160928 + ], + [ + -81.493493, + 33.007573 + ], + [ + -81.42777, + 32.843265 + ], + [ + -81.416816, + 32.629664 + ], + [ + -81.279893, + 32.558464 + ], + [ + -81.121061, + 32.290094 + ], + [ + -81.115584, + 32.120309 + ], + [ + -80.885553, + 32.032678 + ], + [ + -81.132015, + 31.693108 + ], + [ + -81.175831, + 31.517845 + ], + [ + -81.279893, + 31.364491 + ], + [ + -81.290846, + 31.20566 + ], + [ + -81.400385, + 31.13446 + ], + [ + -81.444201, + 30.707258 + ], + [ + -81.718048, + 30.745597 + ], + [ + -81.948079, + 30.827751 + ], + [ + -82.041187, + 30.751074 + ], + [ + -82.002849, + 30.564858 + ], + [ + -82.046664, + 30.362211 + ], + [ + -82.167157, + 30.356734 + ], + [ + -82.216449, + 30.570335 + ], + [ + -83.498053, + 30.647012 + ], + [ + -84.867289, + 30.712735 + ], + [ + -85.004212, + 31.003013 + ], + [ + -85.113751, + 31.27686 + ], + [ + -85.042551, + 31.539753 + ], + [ + -85.141136, + 31.840985 + ], + [ + -85.053504, + 32.01077 + ], + [ + -85.058981, + 32.13674 + ], + [ + -84.889196, + 32.262709 + ], + [ + -85.004212, + 32.322956 + ], + [ + -84.960397, + 32.421541 + ], + [ + -85.069935, + 32.580372 + ], + [ + -85.184951, + 32.859696 + ], + [ + -85.431413, + 34.124869 + ], + [ + -85.606675, + 34.984749 + ], + [ + -84.319594, + 34.990226 + ], + [ + -83.618546, + 34.984749 + ], + [ + -83.109191, + 35.00118 + ] + ] + ] + } + }, + { + "type": "Feature", + "id": "15", + "properties": { + "name": "Hawaii" + }, + "geometry": { + "type": "MultiPolygon", + "coordinates": [ + [ + [ + [ + -155.634835, + 18.948267 + ], + [ + -155.881297, + 19.035898 + ], + [ + -155.919636, + 19.123529 + ], + [ + -155.886774, + 19.348084 + ], + [ + -156.062036, + 19.73147 + ], + [ + -155.925113, + 19.857439 + ], + [ + -155.826528, + 20.032702 + ], + [ + -155.897728, + 20.147717 + ], + [ + -155.87582, + 20.26821 + ], + [ + -155.596496, + 20.12581 + ], + [ + -155.284311, + 20.021748 + ], + [ + -155.092618, + 19.868393 + ], + [ + -155.092618, + 19.736947 + ], + [ + -154.807817, + 19.523346 + ], + [ + -154.983079, + 19.348084 + ], + [ + -155.295265, + 19.26593 + ], + [ + -155.514342, + 19.134483 + ], + [ + -155.634835, + 18.948267 + ] + ] + ], + [ + [ + [ + -156.587823, + 21.029505 + ], + [ + -156.472807, + 20.892581 + ], + [ + -156.324929, + 20.952827 + ], + [ + -156.00179, + 20.793996 + ], + [ + -156.051082, + 20.651596 + ], + [ + -156.379699, + 20.580396 + ], + [ + -156.445422, + 20.60778 + ], + [ + -156.461853, + 20.783042 + ], + [ + -156.631638, + 20.821381 + ], + [ + -156.697361, + 20.919966 + ], + [ + -156.587823, + 21.029505 + ] + ] + ], + [ + [ + [ + -156.982162, + 21.210244 + ], + [ + -157.080747, + 21.106182 + ], + [ + -157.310779, + 21.106182 + ], + [ + -157.239579, + 21.221198 + ], + [ + -156.982162, + 21.210244 + ] + ] + ], + [ + [ + [ + -157.951581, + 21.697691 + ], + [ + -157.842042, + 21.462183 + ], + [ + -157.896811, + 21.325259 + ], + [ + -158.110412, + 21.303352 + ], + [ + -158.252813, + 21.582676 + ], + [ + -158.126843, + 21.588153 + ], + [ + -157.951581, + 21.697691 + ] + ] + ], + [ + [ + [ + -159.468693, + 22.228955 + ], + [ + -159.353678, + 22.218001 + ], + [ + -159.298908, + 22.113939 + ], + [ + -159.33177, + 21.966061 + ], + [ + -159.446786, + 21.872953 + ], + [ + -159.764448, + 21.987969 + ], + [ + -159.726109, + 22.152277 + ], + [ + -159.468693, + 22.228955 + ] + ] + ] + ] + } + }, + { + "type": "Feature", + "id": "16", + "properties": { + "name": "Idaho" + }, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -116.04751, + 49.000239 + ], + [ + -116.04751, + 47.976051 + ], + [ + -115.724371, + 47.696727 + ], + [ + -115.718894, + 47.42288 + ], + [ + -115.527201, + 47.302388 + ], + [ + -115.324554, + 47.258572 + ], + [ + -115.302646, + 47.187372 + ], + [ + -114.930214, + 46.919002 + ], + [ + -114.886399, + 46.809463 + ], + [ + -114.623506, + 46.705401 + ], + [ + -114.612552, + 46.639678 + ], + [ + -114.322274, + 46.645155 + ], + [ + -114.464674, + 46.272723 + ], + [ + -114.492059, + 46.037214 + ], + [ + -114.387997, + 45.88386 + ], + [ + -114.568736, + 45.774321 + ], + [ + -114.497536, + 45.670259 + ], + [ + -114.546828, + 45.560721 + ], + [ + -114.333228, + 45.456659 + ], + [ + -114.086765, + 45.593582 + ], + [ + -113.98818, + 45.703121 + ], + [ + -113.807441, + 45.604536 + ], + [ + -113.834826, + 45.522382 + ], + [ + -113.736241, + 45.330689 + ], + [ + -113.571933, + 45.128042 + ], + [ + -113.45144, + 45.056842 + ], + [ + -113.456917, + 44.865149 + ], + [ + -113.341901, + 44.782995 + ], + [ + -113.133778, + 44.772041 + ], + [ + -113.002331, + 44.448902 + ], + [ + -112.887315, + 44.394132 + ], + [ + -112.783254, + 44.48724 + ], + [ + -112.471068, + 44.481763 + ], + [ + -112.241036, + 44.569394 + ], + [ + -112.104113, + 44.520102 + ], + [ + -111.868605, + 44.563917 + ], + [ + -111.819312, + 44.509148 + ], + [ + -111.616665, + 44.547487 + ], + [ + -111.386634, + 44.75561 + ], + [ + -111.227803, + 44.580348 + ], + [ + -111.047063, + 44.476286 + ], + [ + -111.047063, + 42.000709 + ], + [ + -112.164359, + 41.995232 + ], + [ + -114.04295, + 41.995232 + ], + [ + -117.027882, + 42.000709 + ], + [ + -117.027882, + 43.830007 + ], + [ + -116.896436, + 44.158624 + ], + [ + -116.97859, + 44.240778 + ], + [ + -117.170283, + 44.257209 + ], + [ + -117.241483, + 44.394132 + ], + [ + -117.038836, + 44.750133 + ], + [ + -116.934774, + 44.782995 + ], + [ + -116.830713, + 44.930872 + ], + [ + -116.847143, + 45.02398 + ], + [ + -116.732128, + 45.144473 + ], + [ + -116.671881, + 45.319735 + ], + [ + -116.463758, + 45.61549 + ], + [ + -116.545912, + 45.752413 + ], + [ + -116.78142, + 45.823614 + ], + [ + -116.918344, + 45.993399 + ], + [ + -116.92382, + 46.168661 + ], + [ + -117.055267, + 46.343923 + ], + [ + -117.038836, + 46.426077 + ], + [ + -117.044313, + 47.762451 + ], + [ + -117.033359, + 49.000239 + ], + [ + -116.04751, + 49.000239 + ] + ] + ] + } + }, + { + "type": "Feature", + "id": "17", + "properties": { + "name": "Illinois" + }, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -90.639984, + 42.510065 + ], + [ + -88.788778, + 42.493634 + ], + [ + -87.802929, + 42.493634 + ], + [ + -87.83579, + 42.301941 + ], + [ + -87.682436, + 42.077386 + ], + [ + -87.523605, + 41.710431 + ], + [ + -87.529082, + 39.34987 + ], + [ + -87.63862, + 39.169131 + ], + [ + -87.512651, + 38.95553 + ], + [ + -87.49622, + 38.780268 + ], + [ + -87.62219, + 38.637868 + ], + [ + -87.655051, + 38.506421 + ], + [ + -87.83579, + 38.292821 + ], + [ + -87.950806, + 38.27639 + ], + [ + -87.923421, + 38.15042 + ], + [ + -88.000098, + 38.101128 + ], + [ + -88.060345, + 37.865619 + ], + [ + -88.027483, + 37.799896 + ], + [ + -88.15893, + 37.657496 + ], + [ + -88.065822, + 37.482234 + ], + [ + -88.476592, + 37.389126 + ], + [ + -88.514931, + 37.285064 + ], + [ + -88.421823, + 37.153617 + ], + [ + -88.547792, + 37.071463 + ], + [ + -88.914747, + 37.224817 + ], + [ + -89.029763, + 37.213863 + ], + [ + -89.183118, + 37.038601 + ], + [ + -89.133825, + 36.983832 + ], + [ + -89.292656, + 36.994786 + ], + [ + -89.517211, + 37.279587 + ], + [ + -89.435057, + 37.34531 + ], + [ + -89.517211, + 37.537003 + ], + [ + -89.517211, + 37.690357 + ], + [ + -89.84035, + 37.903958 + ], + [ + -89.949889, + 37.88205 + ], + [ + -90.059428, + 38.013497 + ], + [ + -90.355183, + 38.216144 + ], + [ + -90.349706, + 38.374975 + ], + [ + -90.179921, + 38.632391 + ], + [ + -90.207305, + 38.725499 + ], + [ + -90.10872, + 38.845992 + ], + [ + -90.251121, + 38.917192 + ], + [ + -90.470199, + 38.961007 + ], + [ + -90.585214, + 38.867899 + ], + [ + -90.661891, + 38.928146 + ], + [ + -90.727615, + 39.256762 + ], + [ + -91.061708, + 39.470363 + ], + [ + -91.368417, + 39.727779 + ], + [ + -91.494386, + 40.034488 + ], + [ + -91.50534, + 40.237135 + ], + [ + -91.417709, + 40.379535 + ], + [ + -91.401278, + 40.560274 + ], + [ + -91.121954, + 40.669813 + ], + [ + -91.09457, + 40.823167 + ], + [ + -90.963123, + 40.921752 + ], + [ + -90.946692, + 41.097014 + ], + [ + -91.111001, + 41.239415 + ], + [ + -91.045277, + 41.414677 + ], + [ + -90.656414, + 41.463969 + ], + [ + -90.344229, + 41.589939 + ], + [ + -90.311367, + 41.743293 + ], + [ + -90.179921, + 41.809016 + ], + [ + -90.141582, + 42.000709 + ], + [ + -90.168967, + 42.126679 + ], + [ + -90.393521, + 42.225264 + ], + [ + -90.420906, + 42.329326 + ], + [ + -90.639984, + 42.510065 + ] + ] + ] + } + }, + { + "type": "Feature", + "id": "18", + "properties": { + "name": "Indiana" + }, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -85.990061, + 41.759724 + ], + [ + -84.807042, + 41.759724 + ], + [ + -84.807042, + 41.694001 + ], + [ + -84.801565, + 40.500028 + ], + [ + -84.817996, + 39.103408 + ], + [ + -84.894673, + 39.059592 + ], + [ + -84.812519, + 38.785745 + ], + [ + -84.987781, + 38.780268 + ], + [ + -85.173997, + 38.68716 + ], + [ + -85.431413, + 38.730976 + ], + [ + -85.42046, + 38.533806 + ], + [ + -85.590245, + 38.451652 + ], + [ + -85.655968, + 38.325682 + ], + [ + -85.83123, + 38.27639 + ], + [ + -85.924338, + 38.024451 + ], + [ + -86.039354, + 37.958727 + ], + [ + -86.263908, + 38.051835 + ], + [ + -86.302247, + 38.166851 + ], + [ + -86.521325, + 38.040881 + ], + [ + -86.504894, + 37.931343 + ], + [ + -86.729448, + 37.893004 + ], + [ + -86.795172, + 37.991589 + ], + [ + -87.047111, + 37.893004 + ], + [ + -87.129265, + 37.788942 + ], + [ + -87.381204, + 37.93682 + ], + [ + -87.512651, + 37.903958 + ], + [ + -87.600282, + 37.975158 + ], + [ + -87.682436, + 37.903958 + ], + [ + -87.934375, + 37.893004 + ], + [ + -88.027483, + 37.799896 + ], + [ + -88.060345, + 37.865619 + ], + [ + -88.000098, + 38.101128 + ], + [ + -87.923421, + 38.15042 + ], + [ + -87.950806, + 38.27639 + ], + [ + -87.83579, + 38.292821 + ], + [ + -87.655051, + 38.506421 + ], + [ + -87.62219, + 38.637868 + ], + [ + -87.49622, + 38.780268 + ], + [ + -87.512651, + 38.95553 + ], + [ + -87.63862, + 39.169131 + ], + [ + -87.529082, + 39.34987 + ], + [ + -87.523605, + 41.710431 + ], + [ + -87.42502, + 41.644708 + ], + [ + -87.118311, + 41.644708 + ], + [ + -86.822556, + 41.759724 + ], + [ + -85.990061, + 41.759724 + ] + ] + ] + } + }, + { + "type": "Feature", + "id": "19", + "properties": { + "name": "Iowa" + }, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -91.368417, + 43.501391 + ], + [ + -91.215062, + 43.501391 + ], + [ + -91.204109, + 43.353514 + ], + [ + -91.056231, + 43.254929 + ], + [ + -91.176724, + 43.134436 + ], + [ + -91.143862, + 42.909881 + ], + [ + -91.067185, + 42.75105 + ], + [ + -90.711184, + 42.636034 + ], + [ + -90.639984, + 42.510065 + ], + [ + -90.420906, + 42.329326 + ], + [ + -90.393521, + 42.225264 + ], + [ + -90.168967, + 42.126679 + ], + [ + -90.141582, + 42.000709 + ], + [ + -90.179921, + 41.809016 + ], + [ + -90.311367, + 41.743293 + ], + [ + -90.344229, + 41.589939 + ], + [ + -90.656414, + 41.463969 + ], + [ + -91.045277, + 41.414677 + ], + [ + -91.111001, + 41.239415 + ], + [ + -90.946692, + 41.097014 + ], + [ + -90.963123, + 40.921752 + ], + [ + -91.09457, + 40.823167 + ], + [ + -91.121954, + 40.669813 + ], + [ + -91.401278, + 40.560274 + ], + [ + -91.417709, + 40.379535 + ], + [ + -91.527248, + 40.412397 + ], + [ + -91.729895, + 40.615043 + ], + [ + -91.833957, + 40.609566 + ], + [ + -93.257961, + 40.582182 + ], + [ + -94.632673, + 40.571228 + ], + [ + -95.7664, + 40.587659 + ], + [ + -95.881416, + 40.719105 + ], + [ + -95.826646, + 40.976521 + ], + [ + -95.925231, + 41.201076 + ], + [ + -95.919754, + 41.453015 + ], + [ + -96.095016, + 41.540646 + ], + [ + -96.122401, + 41.67757 + ], + [ + -96.062155, + 41.798063 + ], + [ + -96.127878, + 41.973325 + ], + [ + -96.264801, + 42.039048 + ], + [ + -96.44554, + 42.488157 + ], + [ + -96.631756, + 42.707235 + ], + [ + -96.544125, + 42.855112 + ], + [ + -96.511264, + 43.052282 + ], + [ + -96.434587, + 43.123482 + ], + [ + -96.560556, + 43.222067 + ], + [ + -96.527695, + 43.397329 + ], + [ + -96.582464, + 43.479483 + ], + [ + -96.451017, + 43.501391 + ], + [ + -91.368417, + 43.501391 + ] + ] + ] + } + }, + { + "type": "Feature", + "id": "20", + "properties": { + "name": "Kansas" + }, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -101.90605, + 40.001626 + ], + [ + -95.306337, + 40.001626 + ], + [ + -95.207752, + 39.908518 + ], + [ + -94.884612, + 39.831841 + ], + [ + -95.109167, + 39.541563 + ], + [ + -94.983197, + 39.442978 + ], + [ + -94.824366, + 39.20747 + ], + [ + -94.610765, + 39.158177 + ], + [ + -94.616242, + 37.000263 + ], + [ + -100.087706, + 37.000263 + ], + [ + -102.042974, + 36.994786 + ], + [ + -102.053927, + 40.001626 + ], + [ + -101.90605, + 40.001626 + ] + ] + ] + } + }, + { + "type": "Feature", + "id": "21", + "properties": { + "name": "Kentucky" + }, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -83.903347, + 38.769315 + ], + [ + -83.678792, + 38.632391 + ], + [ + -83.519961, + 38.703591 + ], + [ + -83.142052, + 38.626914 + ], + [ + -83.032514, + 38.725499 + ], + [ + -82.890113, + 38.758361 + ], + [ + -82.846298, + 38.588575 + ], + [ + -82.731282, + 38.561191 + ], + [ + -82.594358, + 38.424267 + ], + [ + -82.621743, + 38.123036 + ], + [ + -82.50125, + 37.931343 + ], + [ + -82.342419, + 37.783465 + ], + [ + -82.293127, + 37.668449 + ], + [ + -82.101434, + 37.553434 + ], + [ + -81.969987, + 37.537003 + ], + [ + -82.353373, + 37.268633 + ], + [ + -82.720328, + 37.120755 + ], + [ + -82.720328, + 37.044078 + ], + [ + -82.868205, + 36.978355 + ], + [ + -82.879159, + 36.890724 + ], + [ + -83.070852, + 36.852385 + ], + [ + -83.136575, + 36.742847 + ], + [ + -83.673316, + 36.600446 + ], + [ + -83.689746, + 36.584015 + ], + [ + -84.544149, + 36.594969 + ], + [ + -85.289013, + 36.627831 + ], + [ + -85.486183, + 36.616877 + ], + [ + -86.592525, + 36.655216 + ], + [ + -87.852221, + 36.633308 + ], + [ + -88.071299, + 36.677123 + ], + [ + -88.054868, + 36.496384 + ], + [ + -89.298133, + 36.507338 + ], + [ + -89.418626, + 36.496384 + ], + [ + -89.363857, + 36.622354 + ], + [ + -89.215979, + 36.578538 + ], + [ + -89.133825, + 36.983832 + ], + [ + -89.183118, + 37.038601 + ], + [ + -89.029763, + 37.213863 + ], + [ + -88.914747, + 37.224817 + ], + [ + -88.547792, + 37.071463 + ], + [ + -88.421823, + 37.153617 + ], + [ + -88.514931, + 37.285064 + ], + [ + -88.476592, + 37.389126 + ], + [ + -88.065822, + 37.482234 + ], + [ + -88.15893, + 37.657496 + ], + [ + -88.027483, + 37.799896 + ], + [ + -87.934375, + 37.893004 + ], + [ + -87.682436, + 37.903958 + ], + [ + -87.600282, + 37.975158 + ], + [ + -87.512651, + 37.903958 + ], + [ + -87.381204, + 37.93682 + ], + [ + -87.129265, + 37.788942 + ], + [ + -87.047111, + 37.893004 + ], + [ + -86.795172, + 37.991589 + ], + [ + -86.729448, + 37.893004 + ], + [ + -86.504894, + 37.931343 + ], + [ + -86.521325, + 38.040881 + ], + [ + -86.302247, + 38.166851 + ], + [ + -86.263908, + 38.051835 + ], + [ + -86.039354, + 37.958727 + ], + [ + -85.924338, + 38.024451 + ], + [ + -85.83123, + 38.27639 + ], + [ + -85.655968, + 38.325682 + ], + [ + -85.590245, + 38.451652 + ], + [ + -85.42046, + 38.533806 + ], + [ + -85.431413, + 38.730976 + ], + [ + -85.173997, + 38.68716 + ], + [ + -84.987781, + 38.780268 + ], + [ + -84.812519, + 38.785745 + ], + [ + -84.894673, + 39.059592 + ], + [ + -84.817996, + 39.103408 + ], + [ + -84.43461, + 39.103408 + ], + [ + -84.231963, + 38.895284 + ], + [ + -84.215533, + 38.807653 + ], + [ + -83.903347, + 38.769315 + ] + ] + ] + } + }, + { + "type": "Feature", + "id": "22", + "properties": { + "name": "Louisiana" + }, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -93.608485, + 33.018527 + ], + [ + -91.16577, + 33.002096 + ], + [ + -91.072662, + 32.887081 + ], + [ + -91.143862, + 32.843265 + ], + [ + -91.154816, + 32.640618 + ], + [ + -91.006939, + 32.514649 + ], + [ + -90.985031, + 32.218894 + ], + [ + -91.105524, + 31.988862 + ], + [ + -91.341032, + 31.846462 + ], + [ + -91.401278, + 31.621907 + ], + [ + -91.499863, + 31.643815 + ], + [ + -91.516294, + 31.27686 + ], + [ + -91.636787, + 31.265906 + ], + [ + -91.565587, + 31.068736 + ], + [ + -91.636787, + 30.997536 + ], + [ + -89.747242, + 30.997536 + ], + [ + -89.845827, + 30.66892 + ], + [ + -89.681519, + 30.449842 + ], + [ + -89.643181, + 30.285534 + ], + [ + -89.522688, + 30.181472 + ], + [ + -89.818443, + 30.044549 + ], + [ + -89.84035, + 29.945964 + ], + [ + -89.599365, + 29.88024 + ], + [ + -89.495303, + 30.039072 + ], + [ + -89.287179, + 29.88024 + ], + [ + -89.30361, + 29.754271 + ], + [ + -89.424103, + 29.699501 + ], + [ + -89.648657, + 29.748794 + ], + [ + -89.621273, + 29.655686 + ], + [ + -89.69795, + 29.513285 + ], + [ + -89.506257, + 29.387316 + ], + [ + -89.199548, + 29.348977 + ], + [ + -89.09001, + 29.2011 + ], + [ + -89.002379, + 29.179192 + ], + [ + -89.16121, + 29.009407 + ], + [ + -89.336472, + 29.042268 + ], + [ + -89.484349, + 29.217531 + ], + [ + -89.851304, + 29.310638 + ], + [ + -89.851304, + 29.480424 + ], + [ + -90.032043, + 29.425654 + ], + [ + -90.021089, + 29.283254 + ], + [ + -90.103244, + 29.151807 + ], + [ + -90.23469, + 29.129899 + ], + [ + -90.333275, + 29.277777 + ], + [ + -90.563307, + 29.283254 + ], + [ + -90.645461, + 29.129899 + ], + [ + -90.798815, + 29.086084 + ], + [ + -90.963123, + 29.179192 + ], + [ + -91.09457, + 29.190146 + ], + [ + -91.220539, + 29.436608 + ], + [ + -91.445094, + 29.546147 + ], + [ + -91.532725, + 29.529716 + ], + [ + -91.620356, + 29.73784 + ], + [ + -91.883249, + 29.710455 + ], + [ + -91.888726, + 29.836425 + ], + [ + -92.146142, + 29.715932 + ], + [ + -92.113281, + 29.622824 + ], + [ + -92.31045, + 29.535193 + ], + [ + -92.617159, + 29.579009 + ], + [ + -92.97316, + 29.715932 + ], + [ + -93.2251, + 29.776178 + ], + [ + -93.767317, + 29.726886 + ], + [ + -93.838517, + 29.688547 + ], + [ + -93.926148, + 29.787132 + ], + [ + -93.690639, + 30.143133 + ], + [ + -93.767317, + 30.334826 + ], + [ + -93.696116, + 30.438888 + ], + [ + -93.728978, + 30.575812 + ], + [ + -93.630393, + 30.679874 + ], + [ + -93.526331, + 30.93729 + ], + [ + -93.542762, + 31.15089 + ], + [ + -93.816609, + 31.556184 + ], + [ + -93.822086, + 31.775262 + ], + [ + -94.041164, + 31.994339 + ], + [ + -94.041164, + 33.018527 + ], + [ + -93.608485, + 33.018527 + ] + ] + ] + } + }, + { + "type": "Feature", + "id": "23", + "properties": { + "name": "Maine" + }, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -70.703921, + 43.057759 + ], + [ + -70.824413, + 43.128959 + ], + [ + -70.807983, + 43.227544 + ], + [ + -70.966814, + 43.34256 + ], + [ + -71.032537, + 44.657025 + ], + [ + -71.08183, + 45.303304 + ], + [ + -70.649151, + 45.440228 + ], + [ + -70.720352, + 45.511428 + ], + [ + -70.556043, + 45.664782 + ], + [ + -70.386258, + 45.735983 + ], + [ + -70.41912, + 45.796229 + ], + [ + -70.260289, + 45.889337 + ], + [ + -70.309581, + 46.064599 + ], + [ + -70.210996, + 46.327492 + ], + [ + -70.057642, + 46.415123 + ], + [ + -69.997395, + 46.694447 + ], + [ + -69.225147, + 47.461219 + ], + [ + -69.044408, + 47.428357 + ], + [ + -69.033454, + 47.242141 + ], + [ + -68.902007, + 47.176418 + ], + [ + -68.578868, + 47.285957 + ], + [ + -68.376221, + 47.285957 + ], + [ + -68.233821, + 47.357157 + ], + [ + -67.954497, + 47.198326 + ], + [ + -67.790188, + 47.066879 + ], + [ + -67.779235, + 45.944106 + ], + [ + -67.801142, + 45.675736 + ], + [ + -67.456095, + 45.604536 + ], + [ + -67.505388, + 45.48952 + ], + [ + -67.417757, + 45.379982 + ], + [ + -67.488957, + 45.281397 + ], + [ + -67.346556, + 45.128042 + ], + [ + -67.16034, + 45.160904 + ], + [ + -66.979601, + 44.804903 + ], + [ + -67.187725, + 44.646072 + ], + [ + -67.308218, + 44.706318 + ], + [ + -67.406803, + 44.596779 + ], + [ + -67.549203, + 44.624164 + ], + [ + -67.565634, + 44.531056 + ], + [ + -67.75185, + 44.54201 + ], + [ + -68.047605, + 44.328409 + ], + [ + -68.118805, + 44.476286 + ], + [ + -68.222867, + 44.48724 + ], + [ + -68.173574, + 44.328409 + ], + [ + -68.403606, + 44.251732 + ], + [ + -68.458375, + 44.377701 + ], + [ + -68.567914, + 44.311978 + ], + [ + -68.82533, + 44.311978 + ], + [ + -68.830807, + 44.459856 + ], + [ + -68.984161, + 44.426994 + ], + [ + -68.956777, + 44.322932 + ], + [ + -69.099177, + 44.103854 + ], + [ + -69.071793, + 44.043608 + ], + [ + -69.258008, + 43.923115 + ], + [ + -69.444224, + 43.966931 + ], + [ + -69.553763, + 43.840961 + ], + [ + -69.707118, + 43.82453 + ], + [ + -69.833087, + 43.720469 + ], + [ + -69.986442, + 43.742376 + ], + [ + -70.030257, + 43.851915 + ], + [ + -70.254812, + 43.676653 + ], + [ + -70.194565, + 43.567114 + ], + [ + -70.358873, + 43.528776 + ], + [ + -70.369827, + 43.435668 + ], + [ + -70.556043, + 43.320652 + ], + [ + -70.703921, + 43.057759 + ] + ] + ] + } + }, + { + "type": "Feature", + "id": "24", + "properties": { + "name": "Maryland" + }, + "geometry": { + "type": "MultiPolygon", + "coordinates": [ + [ + [ + [ + -75.994645, + 37.95325 + ], + [ + -76.016553, + 37.95325 + ], + [ + -76.043938, + 37.95325 + ], + [ + -75.994645, + 37.95325 + ] + ] + ], + [ + [ + [ + -79.477979, + 39.722302 + ], + [ + -75.786521, + 39.722302 + ], + [ + -75.693413, + 38.462606 + ], + [ + -75.047134, + 38.451652 + ], + [ + -75.244304, + 38.029928 + ], + [ + -75.397659, + 38.013497 + ], + [ + -75.671506, + 37.95325 + ], + [ + -75.885106, + 37.909435 + ], + [ + -75.879629, + 38.073743 + ], + [ + -75.961783, + 38.139466 + ], + [ + -75.846768, + 38.210667 + ], + [ + -76.000122, + 38.374975 + ], + [ + -76.049415, + 38.303775 + ], + [ + -76.257538, + 38.320205 + ], + [ + -76.328738, + 38.500944 + ], + [ + -76.263015, + 38.500944 + ], + [ + -76.257538, + 38.736453 + ], + [ + -76.191815, + 38.829561 + ], + [ + -76.279446, + 39.147223 + ], + [ + -76.169907, + 39.333439 + ], + [ + -76.000122, + 39.366301 + ], + [ + -75.972737, + 39.557994 + ], + [ + -76.098707, + 39.536086 + ], + [ + -76.104184, + 39.437501 + ], + [ + -76.367077, + 39.311532 + ], + [ + -76.443754, + 39.196516 + ], + [ + -76.460185, + 38.906238 + ], + [ + -76.55877, + 38.769315 + ], + [ + -76.514954, + 38.539283 + ], + [ + -76.383508, + 38.380452 + ], + [ + -76.399939, + 38.259959 + ], + [ + -76.317785, + 38.139466 + ], + [ + -76.3616, + 38.057312 + ], + [ + -76.591632, + 38.216144 + ], + [ + -76.920248, + 38.292821 + ], + [ + -77.018833, + 38.446175 + ], + [ + -77.205049, + 38.358544 + ], + [ + -77.276249, + 38.479037 + ], + [ + -77.128372, + 38.632391 + ], + [ + -77.040741, + 38.791222 + ], + [ + -76.909294, + 38.895284 + ], + [ + -77.035264, + 38.993869 + ], + [ + -77.117418, + 38.933623 + ], + [ + -77.248864, + 39.026731 + ], + [ + -77.456988, + 39.076023 + ], + [ + -77.456988, + 39.223901 + ], + [ + -77.566527, + 39.306055 + ], + [ + -77.719881, + 39.322485 + ], + [ + -77.834897, + 39.601809 + ], + [ + -78.004682, + 39.601809 + ], + [ + -78.174467, + 39.694917 + ], + [ + -78.267575, + 39.61824 + ], + [ + -78.431884, + 39.623717 + ], + [ + -78.470222, + 39.514178 + ], + [ + -78.765977, + 39.585379 + ], + [ + -78.963147, + 39.437501 + ], + [ + -79.094593, + 39.470363 + ], + [ + -79.291763, + 39.300578 + ], + [ + -79.488933, + 39.20747 + ], + [ + -79.477979, + 39.722302 + ] + ] + ] + ] + } + }, + { + "type": "Feature", + "id": "25", + "properties": { + "name": "Massachusetts" + }, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -70.917521, + 42.887974 + ], + [ + -70.818936, + 42.871543 + ], + [ + -70.780598, + 42.696281 + ], + [ + -70.824413, + 42.55388 + ], + [ + -70.983245, + 42.422434 + ], + [ + -70.988722, + 42.269079 + ], + [ + -70.769644, + 42.247172 + ], + [ + -70.638197, + 42.08834 + ], + [ + -70.660105, + 41.962371 + ], + [ + -70.550566, + 41.929509 + ], + [ + -70.539613, + 41.814493 + ], + [ + -70.260289, + 41.715908 + ], + [ + -69.937149, + 41.809016 + ], + [ + -70.008349, + 41.672093 + ], + [ + -70.484843, + 41.5516 + ], + [ + -70.660105, + 41.546123 + ], + [ + -70.764167, + 41.639231 + ], + [ + -70.928475, + 41.611847 + ], + [ + -70.933952, + 41.540646 + ], + [ + -71.120168, + 41.496831 + ], + [ + -71.196845, + 41.67757 + ], + [ + -71.22423, + 41.710431 + ], + [ + -71.328292, + 41.781632 + ], + [ + -71.383061, + 42.01714 + ], + [ + -71.530939, + 42.01714 + ], + [ + -71.799309, + 42.006186 + ], + [ + -71.799309, + 42.022617 + ], + [ + -73.053528, + 42.039048 + ], + [ + -73.486206, + 42.050002 + ], + [ + -73.508114, + 42.08834 + ], + [ + -73.267129, + 42.745573 + ], + [ + -72.456542, + 42.729142 + ], + [ + -71.29543, + 42.696281 + ], + [ + -71.185891, + 42.789389 + ], + [ + -70.917521, + 42.887974 + ] + ] + ] + } + }, + { + "type": "Feature", + "id": "26", + "properties": { + "name": "Michigan" + }, + "geometry": { + "type": "MultiPolygon", + "coordinates": [ + [ + [ + [ + -83.454238, + 41.732339 + ], + [ + -84.807042, + 41.694001 + ], + [ + -84.807042, + 41.759724 + ], + [ + -85.990061, + 41.759724 + ], + [ + -86.822556, + 41.759724 + ], + [ + -86.619909, + 41.891171 + ], + [ + -86.482986, + 42.115725 + ], + [ + -86.357016, + 42.252649 + ], + [ + -86.263908, + 42.444341 + ], + [ + -86.209139, + 42.718189 + ], + [ + -86.231047, + 43.013943 + ], + [ + -86.526801, + 43.594499 + ], + [ + -86.433693, + 43.813577 + ], + [ + -86.499417, + 44.07647 + ], + [ + -86.269385, + 44.34484 + ], + [ + -86.220093, + 44.569394 + ], + [ + -86.252954, + 44.689887 + ], + [ + -86.088646, + 44.73918 + ], + [ + -86.066738, + 44.903488 + ], + [ + -85.809322, + 44.947303 + ], + [ + -85.612152, + 45.128042 + ], + [ + -85.628583, + 44.766564 + ], + [ + -85.524521, + 44.750133 + ], + [ + -85.393075, + 44.930872 + ], + [ + -85.387598, + 45.237581 + ], + [ + -85.305444, + 45.314258 + ], + [ + -85.031597, + 45.363551 + ], + [ + -85.119228, + 45.577151 + ], + [ + -84.938489, + 45.75789 + ], + [ + -84.713934, + 45.768844 + ], + [ + -84.461995, + 45.653829 + ], + [ + -84.215533, + 45.637398 + ], + [ + -84.09504, + 45.494997 + ], + [ + -83.908824, + 45.484043 + ], + [ + -83.596638, + 45.352597 + ], + [ + -83.4871, + 45.358074 + ], + [ + -83.317314, + 45.144473 + ], + [ + -83.454238, + 45.029457 + ], + [ + -83.322791, + 44.88158 + ], + [ + -83.273499, + 44.711795 + ], + [ + -83.333745, + 44.339363 + ], + [ + -83.536392, + 44.246255 + ], + [ + -83.585684, + 44.054562 + ], + [ + -83.82667, + 43.988839 + ], + [ + -83.958116, + 43.758807 + ], + [ + -83.908824, + 43.671176 + ], + [ + -83.667839, + 43.589022 + ], + [ + -83.481623, + 43.714992 + ], + [ + -83.262545, + 43.972408 + ], + [ + -82.917498, + 44.070993 + ], + [ + -82.747713, + 43.994316 + ], + [ + -82.643651, + 43.851915 + ], + [ + -82.539589, + 43.435668 + ], + [ + -82.523158, + 43.227544 + ], + [ + -82.413619, + 42.975605 + ], + [ + -82.517681, + 42.614127 + ], + [ + -82.681989, + 42.559357 + ], + [ + -82.687466, + 42.690804 + ], + [ + -82.797005, + 42.652465 + ], + [ + -82.922975, + 42.351234 + ], + [ + -83.125621, + 42.236218 + ], + [ + -83.185868, + 42.006186 + ], + [ + -83.437807, + 41.814493 + ], + [ + -83.454238, + 41.732339 + ] + ] + ], + [ + [ + [ + -85.508091, + 45.730506 + ], + [ + -85.49166, + 45.610013 + ], + [ + -85.623106, + 45.588105 + ], + [ + -85.568337, + 45.75789 + ], + [ + -85.508091, + 45.730506 + ] + ] + ], + [ + [ + [ + -87.589328, + 45.095181 + ], + [ + -87.742682, + 45.199243 + ], + [ + -87.649574, + 45.341643 + ], + [ + -87.885083, + 45.363551 + ], + [ + -87.791975, + 45.500474 + ], + [ + -87.781021, + 45.675736 + ], + [ + -87.989145, + 45.796229 + ], + [ + -88.10416, + 45.922199 + ], + [ + -88.531362, + 46.020784 + ], + [ + -88.662808, + 45.987922 + ], + [ + -89.09001, + 46.135799 + ], + [ + -90.119674, + 46.338446 + ], + [ + -90.229213, + 46.508231 + ], + [ + -90.415429, + 46.568478 + ], + [ + -90.026566, + 46.672539 + ], + [ + -89.851304, + 46.793032 + ], + [ + -89.413149, + 46.842325 + ], + [ + -89.128348, + 46.990202 + ], + [ + -88.996902, + 46.995679 + ], + [ + -88.887363, + 47.099741 + ], + [ + -88.575177, + 47.247618 + ], + [ + -88.416346, + 47.373588 + ], + [ + -88.180837, + 47.455742 + ], + [ + -87.956283, + 47.384542 + ], + [ + -88.350623, + 47.077833 + ], + [ + -88.443731, + 46.973771 + ], + [ + -88.438254, + 46.787555 + ], + [ + -88.246561, + 46.929956 + ], + [ + -87.901513, + 46.908048 + ], + [ + -87.633143, + 46.809463 + ], + [ + -87.392158, + 46.535616 + ], + [ + -87.260711, + 46.486323 + ], + [ + -87.008772, + 46.530139 + ], + [ + -86.948526, + 46.469893 + ], + [ + -86.696587, + 46.437031 + ], + [ + -86.159846, + 46.667063 + ], + [ + -85.880522, + 46.68897 + ], + [ + -85.508091, + 46.678016 + ], + [ + -85.256151, + 46.754694 + ], + [ + -85.064458, + 46.760171 + ], + [ + -85.02612, + 46.480847 + ], + [ + -84.82895, + 46.442508 + ], + [ + -84.63178, + 46.486323 + ], + [ + -84.549626, + 46.4206 + ], + [ + -84.418179, + 46.502754 + ], + [ + -84.127902, + 46.530139 + ], + [ + -84.122425, + 46.179615 + ], + [ + -83.990978, + 46.031737 + ], + [ + -83.793808, + 45.993399 + ], + [ + -83.7719, + 46.091984 + ], + [ + -83.580208, + 46.091984 + ], + [ + -83.476146, + 45.987922 + ], + [ + -83.563777, + 45.911245 + ], + [ + -84.111471, + 45.976968 + ], + [ + -84.374364, + 45.933153 + ], + [ + -84.659165, + 46.053645 + ], + [ + -84.741319, + 45.944106 + ], + [ + -84.70298, + 45.850998 + ], + [ + -84.82895, + 45.872906 + ], + [ + -85.015166, + 46.00983 + ], + [ + -85.338305, + 46.091984 + ], + [ + -85.502614, + 46.097461 + ], + [ + -85.661445, + 45.966014 + ], + [ + -85.924338, + 45.933153 + ], + [ + -86.209139, + 45.960537 + ], + [ + -86.324155, + 45.905768 + ], + [ + -86.351539, + 45.796229 + ], + [ + -86.663725, + 45.703121 + ], + [ + -86.647294, + 45.834568 + ], + [ + -86.784218, + 45.861952 + ], + [ + -86.838987, + 45.725029 + ], + [ + -87.069019, + 45.719552 + ], + [ + -87.17308, + 45.659305 + ], + [ + -87.326435, + 45.423797 + ], + [ + -87.611236, + 45.122565 + ], + [ + -87.589328, + 45.095181 + ] + ] + ], + [ + [ + [ + -88.805209, + 47.976051 + ], + [ + -89.057148, + 47.850082 + ], + [ + -89.188594, + 47.833651 + ], + [ + -89.177641, + 47.937713 + ], + [ + -88.547792, + 48.173221 + ], + [ + -88.668285, + 48.008913 + ], + [ + -88.805209, + 47.976051 + ] + ] + ] + ] + } + }, + { + "type": "Feature", + "id": "27", + "properties": { + "name": "Minnesota" + }, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -92.014696, + 46.705401 + ], + [ + -92.091373, + 46.749217 + ], + [ + -92.29402, + 46.667063 + ], + [ + -92.29402, + 46.075553 + ], + [ + -92.354266, + 46.015307 + ], + [ + -92.639067, + 45.933153 + ], + [ + -92.869098, + 45.719552 + ], + [ + -92.885529, + 45.577151 + ], + [ + -92.770513, + 45.566198 + ], + [ + -92.644544, + 45.440228 + ], + [ + -92.75956, + 45.286874 + ], + [ + -92.737652, + 45.117088 + ], + [ + -92.808852, + 44.750133 + ], + [ + -92.545959, + 44.569394 + ], + [ + -92.337835, + 44.552964 + ], + [ + -92.233773, + 44.443425 + ], + [ + -91.927065, + 44.333886 + ], + [ + -91.877772, + 44.202439 + ], + [ + -91.592971, + 44.032654 + ], + [ + -91.43414, + 43.994316 + ], + [ + -91.242447, + 43.775238 + ], + [ + -91.269832, + 43.616407 + ], + [ + -91.215062, + 43.501391 + ], + [ + -91.368417, + 43.501391 + ], + [ + -96.451017, + 43.501391 + ], + [ + -96.451017, + 45.297827 + ], + [ + -96.681049, + 45.412843 + ], + [ + -96.856311, + 45.604536 + ], + [ + -96.582464, + 45.818137 + ], + [ + -96.560556, + 45.933153 + ], + [ + -96.598895, + 46.332969 + ], + [ + -96.719387, + 46.437031 + ], + [ + -96.801542, + 46.656109 + ], + [ + -96.785111, + 46.924479 + ], + [ + -96.823449, + 46.968294 + ], + [ + -96.856311, + 47.609096 + ], + [ + -97.053481, + 47.948667 + ], + [ + -97.130158, + 48.140359 + ], + [ + -97.16302, + 48.545653 + ], + [ + -97.097296, + 48.682577 + ], + [ + -97.228743, + 49.000239 + ], + [ + -95.152983, + 49.000239 + ], + [ + -95.152983, + 49.383625 + ], + [ + -94.955813, + 49.372671 + ], + [ + -94.824366, + 49.295994 + ], + [ + -94.69292, + 48.775685 + ], + [ + -94.588858, + 48.715438 + ], + [ + -94.260241, + 48.699007 + ], + [ + -94.221903, + 48.649715 + ], + [ + -93.838517, + 48.627807 + ], + [ + -93.794701, + 48.518268 + ], + [ + -93.466085, + 48.545653 + ], + [ + -93.466085, + 48.589469 + ], + [ + -93.208669, + 48.644238 + ], + [ + -92.984114, + 48.62233 + ], + [ + -92.726698, + 48.540176 + ], + [ + -92.655498, + 48.436114 + ], + [ + -92.50762, + 48.447068 + ], + [ + -92.370697, + 48.222514 + ], + [ + -92.304974, + 48.315622 + ], + [ + -92.053034, + 48.359437 + ], + [ + -92.009219, + 48.266329 + ], + [ + -91.713464, + 48.200606 + ], + [ + -91.713464, + 48.112975 + ], + [ + -91.565587, + 48.041775 + ], + [ + -91.264355, + 48.080113 + ], + [ + -91.083616, + 48.178698 + ], + [ + -90.837154, + 48.238944 + ], + [ + -90.749522, + 48.091067 + ], + [ + -90.579737, + 48.123929 + ], + [ + -90.377091, + 48.091067 + ], + [ + -90.141582, + 48.112975 + ], + [ + -89.873212, + 47.987005 + ], + [ + -89.615796, + 48.008913 + ], + [ + -89.637704, + 47.954144 + ], + [ + -89.971797, + 47.828174 + ], + [ + -90.437337, + 47.729589 + ], + [ + -90.738569, + 47.625527 + ], + [ + -91.171247, + 47.368111 + ], + [ + -91.357463, + 47.20928 + ], + [ + -91.642264, + 47.028541 + ], + [ + -92.091373, + 46.787555 + ], + [ + -92.014696, + 46.705401 + ] + ] + ] + } + }, + { + "type": "Feature", + "id": "28", + "properties": { + "name": "Mississippi" + }, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -88.471115, + 34.995703 + ], + [ + -88.202745, + 34.995703 + ], + [ + -88.098683, + 34.891641 + ], + [ + -88.241084, + 33.796253 + ], + [ + -88.471115, + 31.895754 + ], + [ + -88.394438, + 30.367688 + ], + [ + -88.503977, + 30.323872 + ], + [ + -88.744962, + 30.34578 + ], + [ + -88.843547, + 30.411504 + ], + [ + -89.084533, + 30.367688 + ], + [ + -89.418626, + 30.252672 + ], + [ + -89.522688, + 30.181472 + ], + [ + -89.643181, + 30.285534 + ], + [ + -89.681519, + 30.449842 + ], + [ + -89.845827, + 30.66892 + ], + [ + -89.747242, + 30.997536 + ], + [ + -91.636787, + 30.997536 + ], + [ + -91.565587, + 31.068736 + ], + [ + -91.636787, + 31.265906 + ], + [ + -91.516294, + 31.27686 + ], + [ + -91.499863, + 31.643815 + ], + [ + -91.401278, + 31.621907 + ], + [ + -91.341032, + 31.846462 + ], + [ + -91.105524, + 31.988862 + ], + [ + -90.985031, + 32.218894 + ], + [ + -91.006939, + 32.514649 + ], + [ + -91.154816, + 32.640618 + ], + [ + -91.143862, + 32.843265 + ], + [ + -91.072662, + 32.887081 + ], + [ + -91.16577, + 33.002096 + ], + [ + -91.089093, + 33.13902 + ], + [ + -91.143862, + 33.347144 + ], + [ + -91.056231, + 33.429298 + ], + [ + -91.231493, + 33.560744 + ], + [ + -91.072662, + 33.867453 + ], + [ + -90.891923, + 34.026284 + ], + [ + -90.952169, + 34.135823 + ], + [ + -90.744046, + 34.300131 + ], + [ + -90.749522, + 34.365854 + ], + [ + -90.568783, + 34.420624 + ], + [ + -90.585214, + 34.617794 + ], + [ + -90.481152, + 34.661609 + ], + [ + -90.409952, + 34.831394 + ], + [ + -90.251121, + 34.908072 + ], + [ + -90.311367, + 34.995703 + ], + [ + -88.471115, + 34.995703 + ] + ] + ] + } + }, + { + "type": "Feature", + "id": "29", + "properties": { + "name": "Missouri" + }, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -91.833957, + 40.609566 + ], + [ + -91.729895, + 40.615043 + ], + [ + -91.527248, + 40.412397 + ], + [ + -91.417709, + 40.379535 + ], + [ + -91.50534, + 40.237135 + ], + [ + -91.494386, + 40.034488 + ], + [ + -91.368417, + 39.727779 + ], + [ + -91.061708, + 39.470363 + ], + [ + -90.727615, + 39.256762 + ], + [ + -90.661891, + 38.928146 + ], + [ + -90.585214, + 38.867899 + ], + [ + -90.470199, + 38.961007 + ], + [ + -90.251121, + 38.917192 + ], + [ + -90.10872, + 38.845992 + ], + [ + -90.207305, + 38.725499 + ], + [ + -90.179921, + 38.632391 + ], + [ + -90.349706, + 38.374975 + ], + [ + -90.355183, + 38.216144 + ], + [ + -90.059428, + 38.013497 + ], + [ + -89.949889, + 37.88205 + ], + [ + -89.84035, + 37.903958 + ], + [ + -89.517211, + 37.690357 + ], + [ + -89.517211, + 37.537003 + ], + [ + -89.435057, + 37.34531 + ], + [ + -89.517211, + 37.279587 + ], + [ + -89.292656, + 36.994786 + ], + [ + -89.133825, + 36.983832 + ], + [ + -89.215979, + 36.578538 + ], + [ + -89.363857, + 36.622354 + ], + [ + -89.418626, + 36.496384 + ], + [ + -89.484349, + 36.496384 + ], + [ + -89.539119, + 36.496384 + ], + [ + -89.533642, + 36.249922 + ], + [ + -89.730812, + 35.997983 + ], + [ + -90.377091, + 35.997983 + ], + [ + -90.218259, + 36.184199 + ], + [ + -90.064905, + 36.304691 + ], + [ + -90.152536, + 36.496384 + ], + [ + -94.473842, + 36.501861 + ], + [ + -94.616242, + 36.501861 + ], + [ + -94.616242, + 37.000263 + ], + [ + -94.610765, + 39.158177 + ], + [ + -94.824366, + 39.20747 + ], + [ + -94.983197, + 39.442978 + ], + [ + -95.109167, + 39.541563 + ], + [ + -94.884612, + 39.831841 + ], + [ + -95.207752, + 39.908518 + ], + [ + -95.306337, + 40.001626 + ], + [ + -95.552799, + 40.264519 + ], + [ + -95.7664, + 40.587659 + ], + [ + -94.632673, + 40.571228 + ], + [ + -93.257961, + 40.582182 + ], + [ + -91.833957, + 40.609566 + ] + ] + ] + } + }, + { + "type": "Feature", + "id": "30", + "properties": { + "name": "Montana" + }, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -104.047534, + 49.000239 + ], + [ + -104.042057, + 47.861036 + ], + [ + -104.047534, + 45.944106 + ], + [ + -104.042057, + 44.996596 + ], + [ + -104.058488, + 44.996596 + ], + [ + -105.91517, + 45.002073 + ], + [ + -109.080842, + 45.002073 + ], + [ + -111.05254, + 45.002073 + ], + [ + -111.047063, + 44.476286 + ], + [ + -111.227803, + 44.580348 + ], + [ + -111.386634, + 44.75561 + ], + [ + -111.616665, + 44.547487 + ], + [ + -111.819312, + 44.509148 + ], + [ + -111.868605, + 44.563917 + ], + [ + -112.104113, + 44.520102 + ], + [ + -112.241036, + 44.569394 + ], + [ + -112.471068, + 44.481763 + ], + [ + -112.783254, + 44.48724 + ], + [ + -112.887315, + 44.394132 + ], + [ + -113.002331, + 44.448902 + ], + [ + -113.133778, + 44.772041 + ], + [ + -113.341901, + 44.782995 + ], + [ + -113.456917, + 44.865149 + ], + [ + -113.45144, + 45.056842 + ], + [ + -113.571933, + 45.128042 + ], + [ + -113.736241, + 45.330689 + ], + [ + -113.834826, + 45.522382 + ], + [ + -113.807441, + 45.604536 + ], + [ + -113.98818, + 45.703121 + ], + [ + -114.086765, + 45.593582 + ], + [ + -114.333228, + 45.456659 + ], + [ + -114.546828, + 45.560721 + ], + [ + -114.497536, + 45.670259 + ], + [ + -114.568736, + 45.774321 + ], + [ + -114.387997, + 45.88386 + ], + [ + -114.492059, + 46.037214 + ], + [ + -114.464674, + 46.272723 + ], + [ + -114.322274, + 46.645155 + ], + [ + -114.612552, + 46.639678 + ], + [ + -114.623506, + 46.705401 + ], + [ + -114.886399, + 46.809463 + ], + [ + -114.930214, + 46.919002 + ], + [ + -115.302646, + 47.187372 + ], + [ + -115.324554, + 47.258572 + ], + [ + -115.527201, + 47.302388 + ], + [ + -115.718894, + 47.42288 + ], + [ + -115.724371, + 47.696727 + ], + [ + -116.04751, + 47.976051 + ], + [ + -116.04751, + 49.000239 + ], + [ + -111.50165, + 48.994762 + ], + [ + -109.453274, + 49.000239 + ], + [ + -104.047534, + 49.000239 + ] + ] + ] + } + }, + { + "type": "Feature", + "id": "31", + "properties": { + "name": "Nebraska" + }, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -103.324578, + 43.002989 + ], + [ + -101.626726, + 42.997512 + ], + [ + -98.499393, + 42.997512 + ], + [ + -98.466531, + 42.94822 + ], + [ + -97.951699, + 42.767481 + ], + [ + -97.831206, + 42.866066 + ], + [ + -97.688806, + 42.844158 + ], + [ + -97.217789, + 42.844158 + ], + [ + -96.692003, + 42.657942 + ], + [ + -96.626279, + 42.515542 + ], + [ + -96.44554, + 42.488157 + ], + [ + -96.264801, + 42.039048 + ], + [ + -96.127878, + 41.973325 + ], + [ + -96.062155, + 41.798063 + ], + [ + -96.122401, + 41.67757 + ], + [ + -96.095016, + 41.540646 + ], + [ + -95.919754, + 41.453015 + ], + [ + -95.925231, + 41.201076 + ], + [ + -95.826646, + 40.976521 + ], + [ + -95.881416, + 40.719105 + ], + [ + -95.7664, + 40.587659 + ], + [ + -95.552799, + 40.264519 + ], + [ + -95.306337, + 40.001626 + ], + [ + -101.90605, + 40.001626 + ], + [ + -102.053927, + 40.001626 + ], + [ + -102.053927, + 41.003906 + ], + [ + -104.053011, + 41.003906 + ], + [ + -104.053011, + 43.002989 + ], + [ + -103.324578, + 43.002989 + ] + ] + ] + } + }, + { + "type": "Feature", + "id": "32", + "properties": { + "name": "Nevada" + }, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -117.027882, + 42.000709 + ], + [ + -114.04295, + 41.995232 + ], + [ + -114.048427, + 37.000263 + ], + [ + -114.048427, + 36.195153 + ], + [ + -114.152489, + 36.025367 + ], + [ + -114.251074, + 36.01989 + ], + [ + -114.371566, + 36.140383 + ], + [ + -114.738521, + 36.102045 + ], + [ + -114.678275, + 35.516012 + ], + [ + -114.596121, + 35.324319 + ], + [ + -114.574213, + 35.138103 + ], + [ + -114.634459, + 35.00118 + ], + [ + -115.85034, + 35.970598 + ], + [ + -116.540435, + 36.501861 + ], + [ + -117.498899, + 37.21934 + ], + [ + -118.71478, + 38.101128 + ], + [ + -120.001861, + 38.999346 + ], + [ + -119.996384, + 40.264519 + ], + [ + -120.001861, + 41.995232 + ], + [ + -118.698349, + 41.989755 + ], + [ + -117.027882, + 42.000709 + ] + ] + ] + } + }, + { + "type": "Feature", + "id": "33", + "properties": { + "name": "New Hampshire" + }, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -71.08183, + 45.303304 + ], + [ + -71.032537, + 44.657025 + ], + [ + -70.966814, + 43.34256 + ], + [ + -70.807983, + 43.227544 + ], + [ + -70.824413, + 43.128959 + ], + [ + -70.703921, + 43.057759 + ], + [ + -70.818936, + 42.871543 + ], + [ + -70.917521, + 42.887974 + ], + [ + -71.185891, + 42.789389 + ], + [ + -71.29543, + 42.696281 + ], + [ + -72.456542, + 42.729142 + ], + [ + -72.544173, + 42.80582 + ], + [ + -72.533219, + 42.953697 + ], + [ + -72.445588, + 43.008466 + ], + [ + -72.456542, + 43.150867 + ], + [ + -72.379864, + 43.572591 + ], + [ + -72.204602, + 43.769761 + ], + [ + -72.116971, + 43.994316 + ], + [ + -72.02934, + 44.07647 + ], + [ + -72.034817, + 44.322932 + ], + [ + -71.700724, + 44.41604 + ], + [ + -71.536416, + 44.585825 + ], + [ + -71.629524, + 44.750133 + ], + [ + -71.4926, + 44.914442 + ], + [ + -71.503554, + 45.013027 + ], + [ + -71.361154, + 45.270443 + ], + [ + -71.131122, + 45.243058 + ], + [ + -71.08183, + 45.303304 + ] + ] + ] + } + }, + { + "type": "Feature", + "id": "34", + "properties": { + "name": "New Jersey" + }, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -74.236547, + 41.14083 + ], + [ + -73.902454, + 40.998429 + ], + [ + -74.022947, + 40.708151 + ], + [ + -74.187255, + 40.642428 + ], + [ + -74.274886, + 40.489074 + ], + [ + -74.001039, + 40.412397 + ], + [ + -73.979131, + 40.297381 + ], + [ + -74.099624, + 39.760641 + ], + [ + -74.411809, + 39.360824 + ], + [ + -74.614456, + 39.245808 + ], + [ + -74.795195, + 38.993869 + ], + [ + -74.888303, + 39.158177 + ], + [ + -75.178581, + 39.240331 + ], + [ + -75.534582, + 39.459409 + ], + [ + -75.55649, + 39.607286 + ], + [ + -75.561967, + 39.629194 + ], + [ + -75.507197, + 39.683964 + ], + [ + -75.414089, + 39.804456 + ], + [ + -75.145719, + 39.88661 + ], + [ + -75.129289, + 39.963288 + ], + [ + -74.82258, + 40.127596 + ], + [ + -74.773287, + 40.215227 + ], + [ + -75.058088, + 40.417874 + ], + [ + -75.069042, + 40.543843 + ], + [ + -75.195012, + 40.576705 + ], + [ + -75.205966, + 40.691721 + ], + [ + -75.052611, + 40.866983 + ], + [ + -75.134765, + 40.971045 + ], + [ + -74.882826, + 41.179168 + ], + [ + -74.828057, + 41.288707 + ], + [ + -74.69661, + 41.359907 + ], + [ + -74.236547, + 41.14083 + ] + ] + ] + } + }, + { + "type": "Feature", + "id": "35", + "properties": { + "name": "New Mexico" + }, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -107.421329, + 37.000263 + ], + [ + -106.868158, + 36.994786 + ], + [ + -104.337812, + 36.994786 + ], + [ + -103.001438, + 37.000263 + ], + [ + -103.001438, + 36.501861 + ], + [ + -103.039777, + 36.501861 + ], + [ + -103.045254, + 34.01533 + ], + [ + -103.067161, + 33.002096 + ], + [ + -103.067161, + 31.999816 + ], + [ + -106.616219, + 31.999816 + ], + [ + -106.643603, + 31.901231 + ], + [ + -106.528588, + 31.786216 + ], + [ + -108.210008, + 31.786216 + ], + [ + -108.210008, + 31.331629 + ], + [ + -109.04798, + 31.331629 + ], + [ + -109.042503, + 37.000263 + ], + [ + -107.421329, + 37.000263 + ] + ] + ] + } + }, + { + "type": "Feature", + "id": "36", + "properties": { + "name": "New York" + }, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -73.343806, + 45.013027 + ], + [ + -73.332852, + 44.804903 + ], + [ + -73.387622, + 44.618687 + ], + [ + -73.294514, + 44.437948 + ], + [ + -73.321898, + 44.246255 + ], + [ + -73.436914, + 44.043608 + ], + [ + -73.349283, + 43.769761 + ], + [ + -73.404052, + 43.687607 + ], + [ + -73.245221, + 43.523299 + ], + [ + -73.278083, + 42.833204 + ], + [ + -73.267129, + 42.745573 + ], + [ + -73.508114, + 42.08834 + ], + [ + -73.486206, + 42.050002 + ], + [ + -73.55193, + 41.294184 + ], + [ + -73.48073, + 41.21203 + ], + [ + -73.727192, + 41.102491 + ], + [ + -73.655992, + 40.987475 + ], + [ + -73.22879, + 40.905321 + ], + [ + -73.141159, + 40.965568 + ], + [ + -72.774204, + 40.965568 + ], + [ + -72.587988, + 40.998429 + ], + [ + -72.28128, + 41.157261 + ], + [ + -72.259372, + 41.042245 + ], + [ + -72.100541, + 40.992952 + ], + [ + -72.467496, + 40.845075 + ], + [ + -73.239744, + 40.625997 + ], + [ + -73.562884, + 40.582182 + ], + [ + -73.776484, + 40.593136 + ], + [ + -73.935316, + 40.543843 + ], + [ + -74.022947, + 40.708151 + ], + [ + -73.902454, + 40.998429 + ], + [ + -74.236547, + 41.14083 + ], + [ + -74.69661, + 41.359907 + ], + [ + -74.740426, + 41.431108 + ], + [ + -74.89378, + 41.436584 + ], + [ + -75.074519, + 41.60637 + ], + [ + -75.052611, + 41.754247 + ], + [ + -75.173104, + 41.869263 + ], + [ + -75.249781, + 41.863786 + ], + [ + -75.35932, + 42.000709 + ], + [ + -79.76278, + 42.000709 + ], + [ + -79.76278, + 42.252649 + ], + [ + -79.76278, + 42.269079 + ], + [ + -79.149363, + 42.55388 + ], + [ + -79.050778, + 42.690804 + ], + [ + -78.853608, + 42.783912 + ], + [ + -78.930285, + 42.953697 + ], + [ + -79.012439, + 42.986559 + ], + [ + -79.072686, + 43.260406 + ], + [ + -78.486653, + 43.375421 + ], + [ + -77.966344, + 43.369944 + ], + [ + -77.75822, + 43.34256 + ], + [ + -77.533665, + 43.233021 + ], + [ + -77.391265, + 43.276836 + ], + [ + -76.958587, + 43.271359 + ], + [ + -76.695693, + 43.34256 + ], + [ + -76.41637, + 43.523299 + ], + [ + -76.235631, + 43.528776 + ], + [ + -76.230154, + 43.802623 + ], + [ + -76.137046, + 43.961454 + ], + [ + -76.3616, + 44.070993 + ], + [ + -76.312308, + 44.196962 + ], + [ + -75.912491, + 44.366748 + ], + [ + -75.764614, + 44.514625 + ], + [ + -75.282643, + 44.848718 + ], + [ + -74.828057, + 45.018503 + ], + [ + -74.148916, + 44.991119 + ], + [ + -73.343806, + 45.013027 + ] + ] + ] + } + }, + { + "type": "Feature", + "id": "37", + "properties": { + "name": "North Carolina" + }, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -80.978661, + 36.562108 + ], + [ + -80.294043, + 36.545677 + ], + [ + -79.510841, + 36.5402 + ], + [ + -75.868676, + 36.551154 + ], + [ + -75.75366, + 36.151337 + ], + [ + -76.032984, + 36.189676 + ], + [ + -76.071322, + 36.140383 + ], + [ + -76.410893, + 36.080137 + ], + [ + -76.460185, + 36.025367 + ], + [ + -76.68474, + 36.008937 + ], + [ + -76.673786, + 35.937736 + ], + [ + -76.399939, + 35.987029 + ], + [ + -76.3616, + 35.943213 + ], + [ + -76.060368, + 35.992506 + ], + [ + -75.961783, + 35.899398 + ], + [ + -75.781044, + 35.937736 + ], + [ + -75.715321, + 35.696751 + ], + [ + -75.775568, + 35.581735 + ], + [ + -75.89606, + 35.570781 + ], + [ + -76.147999, + 35.324319 + ], + [ + -76.482093, + 35.313365 + ], + [ + -76.536862, + 35.14358 + ], + [ + -76.394462, + 34.973795 + ], + [ + -76.279446, + 34.940933 + ], + [ + -76.493047, + 34.661609 + ], + [ + -76.673786, + 34.694471 + ], + [ + -76.991448, + 34.667086 + ], + [ + -77.210526, + 34.60684 + ], + [ + -77.555573, + 34.415147 + ], + [ + -77.82942, + 34.163208 + ], + [ + -77.971821, + 33.845545 + ], + [ + -78.179944, + 33.916745 + ], + [ + -78.541422, + 33.851022 + ], + [ + -79.675149, + 34.80401 + ], + [ + -80.797922, + 34.820441 + ], + [ + -80.781491, + 34.935456 + ], + [ + -80.934845, + 35.105241 + ], + [ + -81.038907, + 35.044995 + ], + [ + -81.044384, + 35.149057 + ], + [ + -82.276696, + 35.198349 + ], + [ + -82.550543, + 35.160011 + ], + [ + -82.764143, + 35.066903 + ], + [ + -83.109191, + 35.00118 + ], + [ + -83.618546, + 34.984749 + ], + [ + -84.319594, + 34.990226 + ], + [ + -84.29221, + 35.225734 + ], + [ + -84.09504, + 35.247642 + ], + [ + -84.018363, + 35.41195 + ], + [ + -83.7719, + 35.559827 + ], + [ + -83.498053, + 35.565304 + ], + [ + -83.251591, + 35.718659 + ], + [ + -82.994175, + 35.773428 + ], + [ + -82.775097, + 35.997983 + ], + [ + -82.638174, + 36.063706 + ], + [ + -82.610789, + 35.965121 + ], + [ + -82.216449, + 36.156814 + ], + [ + -82.03571, + 36.118475 + ], + [ + -81.909741, + 36.304691 + ], + [ + -81.723525, + 36.353984 + ], + [ + -81.679709, + 36.589492 + ], + [ + -80.978661, + 36.562108 + ] + ] + ] + } + }, + { + "type": "Feature", + "id": "38", + "properties": { + "name": "North Dakota" + }, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -97.228743, + 49.000239 + ], + [ + -97.097296, + 48.682577 + ], + [ + -97.16302, + 48.545653 + ], + [ + -97.130158, + 48.140359 + ], + [ + -97.053481, + 47.948667 + ], + [ + -96.856311, + 47.609096 + ], + [ + -96.823449, + 46.968294 + ], + [ + -96.785111, + 46.924479 + ], + [ + -96.801542, + 46.656109 + ], + [ + -96.719387, + 46.437031 + ], + [ + -96.598895, + 46.332969 + ], + [ + -96.560556, + 45.933153 + ], + [ + -104.047534, + 45.944106 + ], + [ + -104.042057, + 47.861036 + ], + [ + -104.047534, + 49.000239 + ], + [ + -97.228743, + 49.000239 + ] + ] + ] + } + }, + { + "type": "Feature", + "id": "39", + "properties": { + "name": "Ohio" + }, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -80.518598, + 41.978802 + ], + [ + -80.518598, + 40.636951 + ], + [ + -80.666475, + 40.582182 + ], + [ + -80.595275, + 40.472643 + ], + [ + -80.600752, + 40.319289 + ], + [ + -80.737675, + 40.078303 + ], + [ + -80.830783, + 39.711348 + ], + [ + -81.219646, + 39.388209 + ], + [ + -81.345616, + 39.344393 + ], + [ + -81.455155, + 39.410117 + ], + [ + -81.57017, + 39.267716 + ], + [ + -81.685186, + 39.273193 + ], + [ + -81.811156, + 39.0815 + ], + [ + -81.783771, + 38.966484 + ], + [ + -81.887833, + 38.873376 + ], + [ + -82.03571, + 39.026731 + ], + [ + -82.221926, + 38.785745 + ], + [ + -82.172634, + 38.632391 + ], + [ + -82.293127, + 38.577622 + ], + [ + -82.331465, + 38.446175 + ], + [ + -82.594358, + 38.424267 + ], + [ + -82.731282, + 38.561191 + ], + [ + -82.846298, + 38.588575 + ], + [ + -82.890113, + 38.758361 + ], + [ + -83.032514, + 38.725499 + ], + [ + -83.142052, + 38.626914 + ], + [ + -83.519961, + 38.703591 + ], + [ + -83.678792, + 38.632391 + ], + [ + -83.903347, + 38.769315 + ], + [ + -84.215533, + 38.807653 + ], + [ + -84.231963, + 38.895284 + ], + [ + -84.43461, + 39.103408 + ], + [ + -84.817996, + 39.103408 + ], + [ + -84.801565, + 40.500028 + ], + [ + -84.807042, + 41.694001 + ], + [ + -83.454238, + 41.732339 + ], + [ + -83.065375, + 41.595416 + ], + [ + -82.933929, + 41.513262 + ], + [ + -82.835344, + 41.589939 + ], + [ + -82.616266, + 41.431108 + ], + [ + -82.479343, + 41.381815 + ], + [ + -82.013803, + 41.513262 + ], + [ + -81.739956, + 41.485877 + ], + [ + -81.444201, + 41.672093 + ], + [ + -81.011523, + 41.852832 + ], + [ + -80.518598, + 41.978802 + ], + [ + -80.518598, + 41.978802 + ] + ] + ] + } + }, + { + "type": "Feature", + "id": "40", + "properties": { + "name": "Oklahoma" + }, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -100.087706, + 37.000263 + ], + [ + -94.616242, + 37.000263 + ], + [ + -94.616242, + 36.501861 + ], + [ + -94.430026, + 35.395519 + ], + [ + -94.484796, + 33.637421 + ], + [ + -94.868182, + 33.74696 + ], + [ + -94.966767, + 33.861976 + ], + [ + -95.224183, + 33.960561 + ], + [ + -95.289906, + 33.87293 + ], + [ + -95.547322, + 33.878407 + ], + [ + -95.602092, + 33.933176 + ], + [ + -95.8376, + 33.834591 + ], + [ + -95.936185, + 33.889361 + ], + [ + -96.149786, + 33.840068 + ], + [ + -96.346956, + 33.686714 + ], + [ + -96.423633, + 33.774345 + ], + [ + -96.631756, + 33.845545 + ], + [ + -96.850834, + 33.845545 + ], + [ + -96.922034, + 33.960561 + ], + [ + -97.173974, + 33.736006 + ], + [ + -97.256128, + 33.861976 + ], + [ + -97.371143, + 33.823637 + ], + [ + -97.458774, + 33.905791 + ], + [ + -97.694283, + 33.982469 + ], + [ + -97.869545, + 33.851022 + ], + [ + -97.946222, + 33.987946 + ], + [ + -98.088623, + 34.004376 + ], + [ + -98.170777, + 34.113915 + ], + [ + -98.36247, + 34.157731 + ], + [ + -98.488439, + 34.064623 + ], + [ + -98.570593, + 34.146777 + ], + [ + -98.767763, + 34.135823 + ], + [ + -98.986841, + 34.223454 + ], + [ + -99.189488, + 34.2125 + ], + [ + -99.260688, + 34.404193 + ], + [ + -99.57835, + 34.415147 + ], + [ + -99.698843, + 34.382285 + ], + [ + -99.923398, + 34.573978 + ], + [ + -100.000075, + 34.563024 + ], + [ + -100.000075, + 36.501861 + ], + [ + -101.812942, + 36.501861 + ], + [ + -103.001438, + 36.501861 + ], + [ + -103.001438, + 37.000263 + ], + [ + -102.042974, + 36.994786 + ], + [ + -100.087706, + 37.000263 + ] + ] + ] + } + }, + { + "type": "Feature", + "id": "41", + "properties": { + "name": "Oregon" + }, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -123.211348, + 46.174138 + ], + [ + -123.11824, + 46.185092 + ], + [ + -122.904639, + 46.08103 + ], + [ + -122.811531, + 45.960537 + ], + [ + -122.762239, + 45.659305 + ], + [ + -122.247407, + 45.549767 + ], + [ + -121.809251, + 45.708598 + ], + [ + -121.535404, + 45.725029 + ], + [ + -121.217742, + 45.670259 + ], + [ + -121.18488, + 45.604536 + ], + [ + -120.637186, + 45.746937 + ], + [ + -120.505739, + 45.697644 + ], + [ + -120.209985, + 45.725029 + ], + [ + -119.963522, + 45.823614 + ], + [ + -119.525367, + 45.911245 + ], + [ + -119.125551, + 45.933153 + ], + [ + -118.988627, + 45.998876 + ], + [ + -116.918344, + 45.993399 + ], + [ + -116.78142, + 45.823614 + ], + [ + -116.545912, + 45.752413 + ], + [ + -116.463758, + 45.61549 + ], + [ + -116.671881, + 45.319735 + ], + [ + -116.732128, + 45.144473 + ], + [ + -116.847143, + 45.02398 + ], + [ + -116.830713, + 44.930872 + ], + [ + -116.934774, + 44.782995 + ], + [ + -117.038836, + 44.750133 + ], + [ + -117.241483, + 44.394132 + ], + [ + -117.170283, + 44.257209 + ], + [ + -116.97859, + 44.240778 + ], + [ + -116.896436, + 44.158624 + ], + [ + -117.027882, + 43.830007 + ], + [ + -117.027882, + 42.000709 + ], + [ + -118.698349, + 41.989755 + ], + [ + -120.001861, + 41.995232 + ], + [ + -121.037003, + 41.995232 + ], + [ + -122.378853, + 42.011663 + ], + [ + -123.233256, + 42.006186 + ], + [ + -124.213628, + 42.000709 + ], + [ + -124.356029, + 42.115725 + ], + [ + -124.432706, + 42.438865 + ], + [ + -124.416275, + 42.663419 + ], + [ + -124.553198, + 42.838681 + ], + [ + -124.454613, + 43.002989 + ], + [ + -124.383413, + 43.271359 + ], + [ + -124.235536, + 43.55616 + ], + [ + -124.169813, + 43.8081 + ], + [ + -124.060274, + 44.657025 + ], + [ + -124.076705, + 44.772041 + ], + [ + -123.97812, + 45.144473 + ], + [ + -123.939781, + 45.659305 + ], + [ + -123.994551, + 45.944106 + ], + [ + -123.945258, + 46.113892 + ], + [ + -123.545441, + 46.261769 + ], + [ + -123.370179, + 46.146753 + ], + [ + -123.211348, + 46.174138 + ] + ] + ] + } + }, + { + "type": "Feature", + "id": "42", + "properties": { + "name": "Pennsylvania" + }, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -79.76278, + 42.252649 + ], + [ + -79.76278, + 42.000709 + ], + [ + -75.35932, + 42.000709 + ], + [ + -75.249781, + 41.863786 + ], + [ + -75.173104, + 41.869263 + ], + [ + -75.052611, + 41.754247 + ], + [ + -75.074519, + 41.60637 + ], + [ + -74.89378, + 41.436584 + ], + [ + -74.740426, + 41.431108 + ], + [ + -74.69661, + 41.359907 + ], + [ + -74.828057, + 41.288707 + ], + [ + -74.882826, + 41.179168 + ], + [ + -75.134765, + 40.971045 + ], + [ + -75.052611, + 40.866983 + ], + [ + -75.205966, + 40.691721 + ], + [ + -75.195012, + 40.576705 + ], + [ + -75.069042, + 40.543843 + ], + [ + -75.058088, + 40.417874 + ], + [ + -74.773287, + 40.215227 + ], + [ + -74.82258, + 40.127596 + ], + [ + -75.129289, + 39.963288 + ], + [ + -75.145719, + 39.88661 + ], + [ + -75.414089, + 39.804456 + ], + [ + -75.616736, + 39.831841 + ], + [ + -75.786521, + 39.722302 + ], + [ + -79.477979, + 39.722302 + ], + [ + -80.518598, + 39.722302 + ], + [ + -80.518598, + 40.636951 + ], + [ + -80.518598, + 41.978802 + ], + [ + -80.518598, + 41.978802 + ], + [ + -80.332382, + 42.033571 + ], + [ + -79.76278, + 42.269079 + ], + [ + -79.76278, + 42.252649 + ] + ] + ] + } + }, + { + "type": "Feature", + "id": "44", + "properties": { + "name": "Rhode Island" + }, + "geometry": { + "type": "MultiPolygon", + "coordinates": [ + [ + [ + [ + -71.196845, + 41.67757 + ], + [ + -71.120168, + 41.496831 + ], + [ + -71.317338, + 41.474923 + ], + [ + -71.196845, + 41.67757 + ] + ] + ], + [ + [ + [ + -71.530939, + 42.01714 + ], + [ + -71.383061, + 42.01714 + ], + [ + -71.328292, + 41.781632 + ], + [ + -71.22423, + 41.710431 + ], + [ + -71.344723, + 41.726862 + ], + [ + -71.448785, + 41.578985 + ], + [ + -71.481646, + 41.370861 + ], + [ + -71.859555, + 41.321569 + ], + [ + -71.799309, + 41.414677 + ], + [ + -71.799309, + 42.006186 + ], + [ + -71.530939, + 42.01714 + ] + ] + ] + ] + } + }, + { + "type": "Feature", + "id": "45", + "properties": { + "name": "South Carolina" + }, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -82.764143, + 35.066903 + ], + [ + -82.550543, + 35.160011 + ], + [ + -82.276696, + 35.198349 + ], + [ + -81.044384, + 35.149057 + ], + [ + -81.038907, + 35.044995 + ], + [ + -80.934845, + 35.105241 + ], + [ + -80.781491, + 34.935456 + ], + [ + -80.797922, + 34.820441 + ], + [ + -79.675149, + 34.80401 + ], + [ + -78.541422, + 33.851022 + ], + [ + -78.716684, + 33.80173 + ], + [ + -78.935762, + 33.637421 + ], + [ + -79.149363, + 33.380005 + ], + [ + -79.187701, + 33.171881 + ], + [ + -79.357487, + 33.007573 + ], + [ + -79.582041, + 33.007573 + ], + [ + -79.631334, + 32.887081 + ], + [ + -79.866842, + 32.755634 + ], + [ + -79.998289, + 32.613234 + ], + [ + -80.206412, + 32.552987 + ], + [ + -80.430967, + 32.399633 + ], + [ + -80.452875, + 32.328433 + ], + [ + -80.660998, + 32.246279 + ], + [ + -80.885553, + 32.032678 + ], + [ + -81.115584, + 32.120309 + ], + [ + -81.121061, + 32.290094 + ], + [ + -81.279893, + 32.558464 + ], + [ + -81.416816, + 32.629664 + ], + [ + -81.42777, + 32.843265 + ], + [ + -81.493493, + 33.007573 + ], + [ + -81.761863, + 33.160928 + ], + [ + -81.937125, + 33.347144 + ], + [ + -81.926172, + 33.462159 + ], + [ + -82.194542, + 33.631944 + ], + [ + -82.325988, + 33.81816 + ], + [ + -82.55602, + 33.94413 + ], + [ + -82.714851, + 34.152254 + ], + [ + -82.747713, + 34.26727 + ], + [ + -82.901067, + 34.486347 + ], + [ + -83.005129, + 34.469916 + ], + [ + -83.339222, + 34.683517 + ], + [ + -83.322791, + 34.787579 + ], + [ + -83.109191, + 35.00118 + ], + [ + -82.764143, + 35.066903 + ] + ] + ] + } + }, + { + "type": "Feature", + "id": "46", + "properties": { + "name": "South Dakota" + }, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -104.047534, + 45.944106 + ], + [ + -96.560556, + 45.933153 + ], + [ + -96.582464, + 45.818137 + ], + [ + -96.856311, + 45.604536 + ], + [ + -96.681049, + 45.412843 + ], + [ + -96.451017, + 45.297827 + ], + [ + -96.451017, + 43.501391 + ], + [ + -96.582464, + 43.479483 + ], + [ + -96.527695, + 43.397329 + ], + [ + -96.560556, + 43.222067 + ], + [ + -96.434587, + 43.123482 + ], + [ + -96.511264, + 43.052282 + ], + [ + -96.544125, + 42.855112 + ], + [ + -96.631756, + 42.707235 + ], + [ + -96.44554, + 42.488157 + ], + [ + -96.626279, + 42.515542 + ], + [ + -96.692003, + 42.657942 + ], + [ + -97.217789, + 42.844158 + ], + [ + -97.688806, + 42.844158 + ], + [ + -97.831206, + 42.866066 + ], + [ + -97.951699, + 42.767481 + ], + [ + -98.466531, + 42.94822 + ], + [ + -98.499393, + 42.997512 + ], + [ + -101.626726, + 42.997512 + ], + [ + -103.324578, + 43.002989 + ], + [ + -104.053011, + 43.002989 + ], + [ + -104.058488, + 44.996596 + ], + [ + -104.042057, + 44.996596 + ], + [ + -104.047534, + 45.944106 + ] + ] + ] + } + }, + { + "type": "Feature", + "id": "47", + "properties": { + "name": "Tennessee" + }, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -88.054868, + 36.496384 + ], + [ + -88.071299, + 36.677123 + ], + [ + -87.852221, + 36.633308 + ], + [ + -86.592525, + 36.655216 + ], + [ + -85.486183, + 36.616877 + ], + [ + -85.289013, + 36.627831 + ], + [ + -84.544149, + 36.594969 + ], + [ + -83.689746, + 36.584015 + ], + [ + -83.673316, + 36.600446 + ], + [ + -81.679709, + 36.589492 + ], + [ + -81.723525, + 36.353984 + ], + [ + -81.909741, + 36.304691 + ], + [ + -82.03571, + 36.118475 + ], + [ + -82.216449, + 36.156814 + ], + [ + -82.610789, + 35.965121 + ], + [ + -82.638174, + 36.063706 + ], + [ + -82.775097, + 35.997983 + ], + [ + -82.994175, + 35.773428 + ], + [ + -83.251591, + 35.718659 + ], + [ + -83.498053, + 35.565304 + ], + [ + -83.7719, + 35.559827 + ], + [ + -84.018363, + 35.41195 + ], + [ + -84.09504, + 35.247642 + ], + [ + -84.29221, + 35.225734 + ], + [ + -84.319594, + 34.990226 + ], + [ + -85.606675, + 34.984749 + ], + [ + -87.359296, + 35.00118 + ], + [ + -88.202745, + 34.995703 + ], + [ + -88.471115, + 34.995703 + ], + [ + -90.311367, + 34.995703 + ], + [ + -90.212782, + 35.023087 + ], + [ + -90.114197, + 35.198349 + ], + [ + -90.130628, + 35.439335 + ], + [ + -89.944412, + 35.603643 + ], + [ + -89.911551, + 35.756997 + ], + [ + -89.763673, + 35.811767 + ], + [ + -89.730812, + 35.997983 + ], + [ + -89.533642, + 36.249922 + ], + [ + -89.539119, + 36.496384 + ], + [ + -89.484349, + 36.496384 + ], + [ + -89.418626, + 36.496384 + ], + [ + -89.298133, + 36.507338 + ], + [ + -88.054868, + 36.496384 + ] + ] + ] + } + }, + { + "type": "Feature", + "id": "48", + "properties": { + "name": "Texas" + }, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -101.812942, + 36.501861 + ], + [ + -100.000075, + 36.501861 + ], + [ + -100.000075, + 34.563024 + ], + [ + -99.923398, + 34.573978 + ], + [ + -99.698843, + 34.382285 + ], + [ + -99.57835, + 34.415147 + ], + [ + -99.260688, + 34.404193 + ], + [ + -99.189488, + 34.2125 + ], + [ + -98.986841, + 34.223454 + ], + [ + -98.767763, + 34.135823 + ], + [ + -98.570593, + 34.146777 + ], + [ + -98.488439, + 34.064623 + ], + [ + -98.36247, + 34.157731 + ], + [ + -98.170777, + 34.113915 + ], + [ + -98.088623, + 34.004376 + ], + [ + -97.946222, + 33.987946 + ], + [ + -97.869545, + 33.851022 + ], + [ + -97.694283, + 33.982469 + ], + [ + -97.458774, + 33.905791 + ], + [ + -97.371143, + 33.823637 + ], + [ + -97.256128, + 33.861976 + ], + [ + -97.173974, + 33.736006 + ], + [ + -96.922034, + 33.960561 + ], + [ + -96.850834, + 33.845545 + ], + [ + -96.631756, + 33.845545 + ], + [ + -96.423633, + 33.774345 + ], + [ + -96.346956, + 33.686714 + ], + [ + -96.149786, + 33.840068 + ], + [ + -95.936185, + 33.889361 + ], + [ + -95.8376, + 33.834591 + ], + [ + -95.602092, + 33.933176 + ], + [ + -95.547322, + 33.878407 + ], + [ + -95.289906, + 33.87293 + ], + [ + -95.224183, + 33.960561 + ], + [ + -94.966767, + 33.861976 + ], + [ + -94.868182, + 33.74696 + ], + [ + -94.484796, + 33.637421 + ], + [ + -94.380734, + 33.544313 + ], + [ + -94.183564, + 33.593606 + ], + [ + -94.041164, + 33.54979 + ], + [ + -94.041164, + 33.018527 + ], + [ + -94.041164, + 31.994339 + ], + [ + -93.822086, + 31.775262 + ], + [ + -93.816609, + 31.556184 + ], + [ + -93.542762, + 31.15089 + ], + [ + -93.526331, + 30.93729 + ], + [ + -93.630393, + 30.679874 + ], + [ + -93.728978, + 30.575812 + ], + [ + -93.696116, + 30.438888 + ], + [ + -93.767317, + 30.334826 + ], + [ + -93.690639, + 30.143133 + ], + [ + -93.926148, + 29.787132 + ], + [ + -93.838517, + 29.688547 + ], + [ + -94.002825, + 29.68307 + ], + [ + -94.523134, + 29.546147 + ], + [ + -94.70935, + 29.622824 + ], + [ + -94.742212, + 29.787132 + ], + [ + -94.873659, + 29.672117 + ], + [ + -94.966767, + 29.699501 + ], + [ + -95.016059, + 29.557101 + ], + [ + -94.911997, + 29.496854 + ], + [ + -94.895566, + 29.310638 + ], + [ + -95.081782, + 29.113469 + ], + [ + -95.383014, + 28.867006 + ], + [ + -95.985477, + 28.604113 + ], + [ + -96.045724, + 28.647929 + ], + [ + -96.226463, + 28.582205 + ], + [ + -96.23194, + 28.642452 + ], + [ + -96.478402, + 28.598636 + ], + [ + -96.593418, + 28.724606 + ], + [ + -96.664618, + 28.697221 + ], + [ + -96.401725, + 28.439805 + ], + [ + -96.593418, + 28.357651 + ], + [ + -96.774157, + 28.406943 + ], + [ + -96.801542, + 28.226204 + ], + [ + -97.026096, + 28.039988 + ], + [ + -97.256128, + 27.694941 + ], + [ + -97.404005, + 27.333463 + ], + [ + -97.513544, + 27.360848 + ], + [ + -97.540929, + 27.229401 + ], + [ + -97.425913, + 27.262263 + ], + [ + -97.480682, + 26.99937 + ], + [ + -97.557359, + 26.988416 + ], + [ + -97.562836, + 26.840538 + ], + [ + -97.469728, + 26.758384 + ], + [ + -97.442344, + 26.457153 + ], + [ + -97.332805, + 26.353091 + ], + [ + -97.30542, + 26.161398 + ], + [ + -97.217789, + 25.991613 + ], + [ + -97.524498, + 25.887551 + ], + [ + -97.650467, + 26.018997 + ], + [ + -97.885976, + 26.06829 + ], + [ + -98.198161, + 26.057336 + ], + [ + -98.466531, + 26.221644 + ], + [ + -98.669178, + 26.238075 + ], + [ + -98.822533, + 26.369522 + ], + [ + -99.030656, + 26.413337 + ], + [ + -99.173057, + 26.539307 + ], + [ + -99.266165, + 26.840538 + ], + [ + -99.446904, + 27.021277 + ], + [ + -99.424996, + 27.174632 + ], + [ + -99.50715, + 27.33894 + ], + [ + -99.479765, + 27.48134 + ], + [ + -99.605735, + 27.640172 + ], + [ + -99.709797, + 27.656603 + ], + [ + -99.879582, + 27.799003 + ], + [ + -99.934351, + 27.979742 + ], + [ + -100.082229, + 28.14405 + ], + [ + -100.29583, + 28.280974 + ], + [ + -100.399891, + 28.582205 + ], + [ + -100.498476, + 28.66436 + ], + [ + -100.629923, + 28.905345 + ], + [ + -100.673738, + 29.102515 + ], + [ + -100.799708, + 29.244915 + ], + [ + -101.013309, + 29.370885 + ], + [ + -101.062601, + 29.458516 + ], + [ + -101.259771, + 29.535193 + ], + [ + -101.413125, + 29.754271 + ], + [ + -101.851281, + 29.803563 + ], + [ + -102.114174, + 29.792609 + ], + [ + -102.338728, + 29.869286 + ], + [ + -102.388021, + 29.765225 + ], + [ + -102.629006, + 29.732363 + ], + [ + -102.809745, + 29.524239 + ], + [ + -102.919284, + 29.190146 + ], + [ + -102.97953, + 29.184669 + ], + [ + -103.116454, + 28.987499 + ], + [ + -103.280762, + 28.982022 + ], + [ + -103.527224, + 29.135376 + ], + [ + -104.146119, + 29.381839 + ], + [ + -104.266611, + 29.513285 + ], + [ + -104.507597, + 29.639255 + ], + [ + -104.677382, + 29.924056 + ], + [ + -104.688336, + 30.181472 + ], + [ + -104.858121, + 30.389596 + ], + [ + -104.896459, + 30.570335 + ], + [ + -105.005998, + 30.685351 + ], + [ + -105.394861, + 30.855136 + ], + [ + -105.602985, + 31.085167 + ], + [ + -105.77277, + 31.167321 + ], + [ + -105.953509, + 31.364491 + ], + [ + -106.205448, + 31.468553 + ], + [ + -106.38071, + 31.731446 + ], + [ + -106.528588, + 31.786216 + ], + [ + -106.643603, + 31.901231 + ], + [ + -106.616219, + 31.999816 + ], + [ + -103.067161, + 31.999816 + ], + [ + -103.067161, + 33.002096 + ], + [ + -103.045254, + 34.01533 + ], + [ + -103.039777, + 36.501861 + ], + [ + -103.001438, + 36.501861 + ], + [ + -101.812942, + 36.501861 + ] + ] + ] + } + }, + { + "type": "Feature", + "id": "49", + "properties": { + "name": "Utah" + }, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -112.164359, + 41.995232 + ], + [ + -111.047063, + 42.000709 + ], + [ + -111.047063, + 40.998429 + ], + [ + -109.04798, + 40.998429 + ], + [ + -109.053457, + 39.125316 + ], + [ + -109.058934, + 38.27639 + ], + [ + -109.042503, + 38.166851 + ], + [ + -109.042503, + 37.000263 + ], + [ + -110.499369, + 37.00574 + ], + [ + -114.048427, + 37.000263 + ], + [ + -114.04295, + 41.995232 + ], + [ + -112.164359, + 41.995232 + ] + ] + ] + } + }, + { + "type": "Feature", + "id": "50", + "properties": { + "name": "Vermont" + }, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -71.503554, + 45.013027 + ], + [ + -71.4926, + 44.914442 + ], + [ + -71.629524, + 44.750133 + ], + [ + -71.536416, + 44.585825 + ], + [ + -71.700724, + 44.41604 + ], + [ + -72.034817, + 44.322932 + ], + [ + -72.02934, + 44.07647 + ], + [ + -72.116971, + 43.994316 + ], + [ + -72.204602, + 43.769761 + ], + [ + -72.379864, + 43.572591 + ], + [ + -72.456542, + 43.150867 + ], + [ + -72.445588, + 43.008466 + ], + [ + -72.533219, + 42.953697 + ], + [ + -72.544173, + 42.80582 + ], + [ + -72.456542, + 42.729142 + ], + [ + -73.267129, + 42.745573 + ], + [ + -73.278083, + 42.833204 + ], + [ + -73.245221, + 43.523299 + ], + [ + -73.404052, + 43.687607 + ], + [ + -73.349283, + 43.769761 + ], + [ + -73.436914, + 44.043608 + ], + [ + -73.321898, + 44.246255 + ], + [ + -73.294514, + 44.437948 + ], + [ + -73.387622, + 44.618687 + ], + [ + -73.332852, + 44.804903 + ], + [ + -73.343806, + 45.013027 + ], + [ + -72.308664, + 45.002073 + ], + [ + -71.503554, + 45.013027 + ] + ] + ] + } + }, + { + "type": "Feature", + "id": "51", + "properties": { + "name": "Virginia" + }, + "geometry": { + "type": "MultiPolygon", + "coordinates": [ + [ + [ + [ + -75.397659, + 38.013497 + ], + [ + -75.244304, + 38.029928 + ], + [ + -75.375751, + 37.860142 + ], + [ + -75.512674, + 37.799896 + ], + [ + -75.594828, + 37.569865 + ], + [ + -75.802952, + 37.197433 + ], + [ + -75.972737, + 37.120755 + ], + [ + -76.027507, + 37.257679 + ], + [ + -75.939876, + 37.564388 + ], + [ + -75.671506, + 37.95325 + ], + [ + -75.397659, + 38.013497 + ] + ] + ], + [ + [ + [ + -76.016553, + 37.95325 + ], + [ + -75.994645, + 37.95325 + ], + [ + -76.043938, + 37.95325 + ], + [ + -76.016553, + 37.95325 + ] + ] + ], + [ + [ + [ + -78.349729, + 39.464886 + ], + [ + -77.82942, + 39.130793 + ], + [ + -77.719881, + 39.322485 + ], + [ + -77.566527, + 39.306055 + ], + [ + -77.456988, + 39.223901 + ], + [ + -77.456988, + 39.076023 + ], + [ + -77.248864, + 39.026731 + ], + [ + -77.117418, + 38.933623 + ], + [ + -77.040741, + 38.791222 + ], + [ + -77.128372, + 38.632391 + ], + [ + -77.248864, + 38.588575 + ], + [ + -77.325542, + 38.446175 + ], + [ + -77.281726, + 38.342113 + ], + [ + -77.013356, + 38.374975 + ], + [ + -76.964064, + 38.216144 + ], + [ + -76.613539, + 38.15042 + ], + [ + -76.514954, + 38.024451 + ], + [ + -76.235631, + 37.887527 + ], + [ + -76.3616, + 37.608203 + ], + [ + -76.246584, + 37.389126 + ], + [ + -76.383508, + 37.285064 + ], + [ + -76.399939, + 37.159094 + ], + [ + -76.273969, + 37.082417 + ], + [ + -76.410893, + 36.961924 + ], + [ + -76.619016, + 37.120755 + ], + [ + -76.668309, + 37.065986 + ], + [ + -76.48757, + 36.95097 + ], + [ + -75.994645, + 36.923586 + ], + [ + -75.868676, + 36.551154 + ], + [ + -79.510841, + 36.5402 + ], + [ + -80.294043, + 36.545677 + ], + [ + -80.978661, + 36.562108 + ], + [ + -81.679709, + 36.589492 + ], + [ + -83.673316, + 36.600446 + ], + [ + -83.136575, + 36.742847 + ], + [ + -83.070852, + 36.852385 + ], + [ + -82.879159, + 36.890724 + ], + [ + -82.868205, + 36.978355 + ], + [ + -82.720328, + 37.044078 + ], + [ + -82.720328, + 37.120755 + ], + [ + -82.353373, + 37.268633 + ], + [ + -81.969987, + 37.537003 + ], + [ + -81.986418, + 37.454849 + ], + [ + -81.849494, + 37.285064 + ], + [ + -81.679709, + 37.20291 + ], + [ + -81.55374, + 37.208387 + ], + [ + -81.362047, + 37.339833 + ], + [ + -81.225123, + 37.235771 + ], + [ + -80.967707, + 37.290541 + ], + [ + -80.513121, + 37.482234 + ], + [ + -80.474782, + 37.421987 + ], + [ + -80.29952, + 37.509618 + ], + [ + -80.294043, + 37.690357 + ], + [ + -80.184505, + 37.849189 + ], + [ + -79.998289, + 37.997066 + ], + [ + -79.921611, + 38.177805 + ], + [ + -79.724442, + 38.364021 + ], + [ + -79.647764, + 38.594052 + ], + [ + -79.477979, + 38.457129 + ], + [ + -79.313671, + 38.413313 + ], + [ + -79.209609, + 38.495467 + ], + [ + -78.996008, + 38.851469 + ], + [ + -78.870039, + 38.763838 + ], + [ + -78.404499, + 39.169131 + ], + [ + -78.349729, + 39.464886 + ] + ] + ] + ] + } + }, + { + "type": "Feature", + "id": "53", + "properties": { + "name": "Washington" + }, + "geometry": { + "type": "MultiPolygon", + "coordinates": [ + [ + [ + [ + -117.033359, + 49.000239 + ], + [ + -117.044313, + 47.762451 + ], + [ + -117.038836, + 46.426077 + ], + [ + -117.055267, + 46.343923 + ], + [ + -116.92382, + 46.168661 + ], + [ + -116.918344, + 45.993399 + ], + [ + -118.988627, + 45.998876 + ], + [ + -119.125551, + 45.933153 + ], + [ + -119.525367, + 45.911245 + ], + [ + -119.963522, + 45.823614 + ], + [ + -120.209985, + 45.725029 + ], + [ + -120.505739, + 45.697644 + ], + [ + -120.637186, + 45.746937 + ], + [ + -121.18488, + 45.604536 + ], + [ + -121.217742, + 45.670259 + ], + [ + -121.535404, + 45.725029 + ], + [ + -121.809251, + 45.708598 + ], + [ + -122.247407, + 45.549767 + ], + [ + -122.762239, + 45.659305 + ], + [ + -122.811531, + 45.960537 + ], + [ + -122.904639, + 46.08103 + ], + [ + -123.11824, + 46.185092 + ], + [ + -123.211348, + 46.174138 + ], + [ + -123.370179, + 46.146753 + ], + [ + -123.545441, + 46.261769 + ], + [ + -123.72618, + 46.300108 + ], + [ + -123.874058, + 46.239861 + ], + [ + -124.065751, + 46.327492 + ], + [ + -124.027412, + 46.464416 + ], + [ + -123.895966, + 46.535616 + ], + [ + -124.098612, + 46.74374 + ], + [ + -124.235536, + 47.285957 + ], + [ + -124.31769, + 47.357157 + ], + [ + -124.427229, + 47.740543 + ], + [ + -124.624399, + 47.88842 + ], + [ + -124.706553, + 48.184175 + ], + [ + -124.597014, + 48.381345 + ], + [ + -124.394367, + 48.288237 + ], + [ + -123.983597, + 48.162267 + ], + [ + -123.704273, + 48.167744 + ], + [ + -123.424949, + 48.118452 + ], + [ + -123.162056, + 48.167744 + ], + [ + -123.036086, + 48.080113 + ], + [ + -122.800578, + 48.08559 + ], + [ + -122.636269, + 47.866512 + ], + [ + -122.515777, + 47.882943 + ], + [ + -122.493869, + 47.587189 + ], + [ + -122.422669, + 47.318818 + ], + [ + -122.324084, + 47.346203 + ], + [ + -122.422669, + 47.576235 + ], + [ + -122.395284, + 47.800789 + ], + [ + -122.230976, + 48.030821 + ], + [ + -122.362422, + 48.123929 + ], + [ + -122.373376, + 48.288237 + ], + [ + -122.471961, + 48.468976 + ], + [ + -122.422669, + 48.600422 + ], + [ + -122.488392, + 48.753777 + ], + [ + -122.647223, + 48.775685 + ], + [ + -122.795101, + 48.8907 + ], + [ + -122.756762, + 49.000239 + ], + [ + -117.033359, + 49.000239 + ] + ] + ], + [ + [ + [ + -122.718423, + 48.310145 + ], + [ + -122.586977, + 48.35396 + ], + [ + -122.608885, + 48.151313 + ], + [ + -122.767716, + 48.227991 + ], + [ + -122.718423, + 48.310145 + ] + ] + ], + [ + [ + [ + -123.025132, + 48.583992 + ], + [ + -122.915593, + 48.715438 + ], + [ + -122.767716, + 48.556607 + ], + [ + -122.811531, + 48.419683 + ], + [ + -123.041563, + 48.458022 + ], + [ + -123.025132, + 48.583992 + ] + ] + ] + ] + } + }, + { + "type": "Feature", + "id": "54", + "properties": { + "name": "West Virginia" + }, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -80.518598, + 40.636951 + ], + [ + -80.518598, + 39.722302 + ], + [ + -79.477979, + 39.722302 + ], + [ + -79.488933, + 39.20747 + ], + [ + -79.291763, + 39.300578 + ], + [ + -79.094593, + 39.470363 + ], + [ + -78.963147, + 39.437501 + ], + [ + -78.765977, + 39.585379 + ], + [ + -78.470222, + 39.514178 + ], + [ + -78.431884, + 39.623717 + ], + [ + -78.267575, + 39.61824 + ], + [ + -78.174467, + 39.694917 + ], + [ + -78.004682, + 39.601809 + ], + [ + -77.834897, + 39.601809 + ], + [ + -77.719881, + 39.322485 + ], + [ + -77.82942, + 39.130793 + ], + [ + -78.349729, + 39.464886 + ], + [ + -78.404499, + 39.169131 + ], + [ + -78.870039, + 38.763838 + ], + [ + -78.996008, + 38.851469 + ], + [ + -79.209609, + 38.495467 + ], + [ + -79.313671, + 38.413313 + ], + [ + -79.477979, + 38.457129 + ], + [ + -79.647764, + 38.594052 + ], + [ + -79.724442, + 38.364021 + ], + [ + -79.921611, + 38.177805 + ], + [ + -79.998289, + 37.997066 + ], + [ + -80.184505, + 37.849189 + ], + [ + -80.294043, + 37.690357 + ], + [ + -80.29952, + 37.509618 + ], + [ + -80.474782, + 37.421987 + ], + [ + -80.513121, + 37.482234 + ], + [ + -80.967707, + 37.290541 + ], + [ + -81.225123, + 37.235771 + ], + [ + -81.362047, + 37.339833 + ], + [ + -81.55374, + 37.208387 + ], + [ + -81.679709, + 37.20291 + ], + [ + -81.849494, + 37.285064 + ], + [ + -81.986418, + 37.454849 + ], + [ + -81.969987, + 37.537003 + ], + [ + -82.101434, + 37.553434 + ], + [ + -82.293127, + 37.668449 + ], + [ + -82.342419, + 37.783465 + ], + [ + -82.50125, + 37.931343 + ], + [ + -82.621743, + 38.123036 + ], + [ + -82.594358, + 38.424267 + ], + [ + -82.331465, + 38.446175 + ], + [ + -82.293127, + 38.577622 + ], + [ + -82.172634, + 38.632391 + ], + [ + -82.221926, + 38.785745 + ], + [ + -82.03571, + 39.026731 + ], + [ + -81.887833, + 38.873376 + ], + [ + -81.783771, + 38.966484 + ], + [ + -81.811156, + 39.0815 + ], + [ + -81.685186, + 39.273193 + ], + [ + -81.57017, + 39.267716 + ], + [ + -81.455155, + 39.410117 + ], + [ + -81.345616, + 39.344393 + ], + [ + -81.219646, + 39.388209 + ], + [ + -80.830783, + 39.711348 + ], + [ + -80.737675, + 40.078303 + ], + [ + -80.600752, + 40.319289 + ], + [ + -80.595275, + 40.472643 + ], + [ + -80.666475, + 40.582182 + ], + [ + -80.518598, + 40.636951 + ] + ] + ] + } + }, + { + "type": "Feature", + "id": "55", + "properties": { + "name": "Wisconsin" + }, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -90.415429, + 46.568478 + ], + [ + -90.229213, + 46.508231 + ], + [ + -90.119674, + 46.338446 + ], + [ + -89.09001, + 46.135799 + ], + [ + -88.662808, + 45.987922 + ], + [ + -88.531362, + 46.020784 + ], + [ + -88.10416, + 45.922199 + ], + [ + -87.989145, + 45.796229 + ], + [ + -87.781021, + 45.675736 + ], + [ + -87.791975, + 45.500474 + ], + [ + -87.885083, + 45.363551 + ], + [ + -87.649574, + 45.341643 + ], + [ + -87.742682, + 45.199243 + ], + [ + -87.589328, + 45.095181 + ], + [ + -87.627666, + 44.974688 + ], + [ + -87.819359, + 44.95278 + ], + [ + -87.983668, + 44.722749 + ], + [ + -88.043914, + 44.563917 + ], + [ + -87.928898, + 44.536533 + ], + [ + -87.775544, + 44.640595 + ], + [ + -87.611236, + 44.837764 + ], + [ + -87.403112, + 44.914442 + ], + [ + -87.238804, + 45.166381 + ], + [ + -87.03068, + 45.22115 + ], + [ + -87.047111, + 45.089704 + ], + [ + -87.189511, + 44.969211 + ], + [ + -87.468835, + 44.552964 + ], + [ + -87.545512, + 44.322932 + ], + [ + -87.540035, + 44.158624 + ], + [ + -87.644097, + 44.103854 + ], + [ + -87.737205, + 43.8793 + ], + [ + -87.704344, + 43.687607 + ], + [ + -87.791975, + 43.561637 + ], + [ + -87.912467, + 43.249452 + ], + [ + -87.885083, + 43.002989 + ], + [ + -87.76459, + 42.783912 + ], + [ + -87.802929, + 42.493634 + ], + [ + -88.788778, + 42.493634 + ], + [ + -90.639984, + 42.510065 + ], + [ + -90.711184, + 42.636034 + ], + [ + -91.067185, + 42.75105 + ], + [ + -91.143862, + 42.909881 + ], + [ + -91.176724, + 43.134436 + ], + [ + -91.056231, + 43.254929 + ], + [ + -91.204109, + 43.353514 + ], + [ + -91.215062, + 43.501391 + ], + [ + -91.269832, + 43.616407 + ], + [ + -91.242447, + 43.775238 + ], + [ + -91.43414, + 43.994316 + ], + [ + -91.592971, + 44.032654 + ], + [ + -91.877772, + 44.202439 + ], + [ + -91.927065, + 44.333886 + ], + [ + -92.233773, + 44.443425 + ], + [ + -92.337835, + 44.552964 + ], + [ + -92.545959, + 44.569394 + ], + [ + -92.808852, + 44.750133 + ], + [ + -92.737652, + 45.117088 + ], + [ + -92.75956, + 45.286874 + ], + [ + -92.644544, + 45.440228 + ], + [ + -92.770513, + 45.566198 + ], + [ + -92.885529, + 45.577151 + ], + [ + -92.869098, + 45.719552 + ], + [ + -92.639067, + 45.933153 + ], + [ + -92.354266, + 46.015307 + ], + [ + -92.29402, + 46.075553 + ], + [ + -92.29402, + 46.667063 + ], + [ + -92.091373, + 46.749217 + ], + [ + -92.014696, + 46.705401 + ], + [ + -91.790141, + 46.694447 + ], + [ + -91.09457, + 46.864232 + ], + [ + -90.837154, + 46.95734 + ], + [ + -90.749522, + 46.88614 + ], + [ + -90.886446, + 46.754694 + ], + [ + -90.55783, + 46.584908 + ], + [ + -90.415429, + 46.568478 + ] + ] + ] + } + }, + { + "type": "Feature", + "id": "56", + "properties": { + "name": "Wyoming" + }, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -109.080842, + 45.002073 + ], + [ + -105.91517, + 45.002073 + ], + [ + -104.058488, + 44.996596 + ], + [ + -104.053011, + 43.002989 + ], + [ + -104.053011, + 41.003906 + ], + [ + -105.728954, + 40.998429 + ], + [ + -107.919731, + 41.003906 + ], + [ + -109.04798, + 40.998429 + ], + [ + -111.047063, + 40.998429 + ], + [ + -111.047063, + 42.000709 + ], + [ + -111.047063, + 44.476286 + ], + [ + -111.05254, + 45.002073 + ], + [ + -109.080842, + 45.002073 + ] + ] + ] + } + }, + { + "type": "Feature", + "id": "72", + "properties": { + "name": "Puerto Rico" + }, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -66.448338, + 17.984326 + ], + [ + -66.771478, + 18.006234 + ], + [ + -66.924832, + 17.929556 + ], + [ + -66.985078, + 17.973372 + ], + [ + -67.209633, + 17.956941 + ], + [ + -67.154863, + 18.19245 + ], + [ + -67.269879, + 18.362235 + ], + [ + -67.094617, + 18.515589 + ], + [ + -66.957694, + 18.488204 + ], + [ + -66.409999, + 18.488204 + ], + [ + -65.840398, + 18.433435 + ], + [ + -65.632274, + 18.367712 + ], + [ + -65.626797, + 18.203403 + ], + [ + -65.730859, + 18.186973 + ], + [ + -65.834921, + 18.017187 + ], + [ + -66.234737, + 17.929556 + ], + [ + -66.448338, + 17.984326 + ] + ] + ] + } + } + ] +} \ No newline at end of file diff --git a/public/favicon.ico b/public/favicon.ico new file mode 100644 index 0000000..776ea34 Binary files /dev/null and b/public/favicon.ico differ diff --git a/public/images/iceland.svg b/public/images/iceland.svg new file mode 100644 index 0000000..1365122 --- /dev/null +++ b/public/images/iceland.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/public/pdfjs/pdf.worker.min.mjs b/public/pdfjs/pdf.worker.min.mjs new file mode 100644 index 0000000..84fc7c5 --- /dev/null +++ b/public/pdfjs/pdf.worker.min.mjs @@ -0,0 +1,21 @@ +/** + * @licstart The following is the entire license notice for the + * JavaScript code in this page + * + * Copyright 2024 Mozilla Foundation + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + * @licend The above is the entire license notice for the + * JavaScript code in this page + */var e={d:(t,i)=>{for(var a in i)e.o(i,a)&&!e.o(t,a)&&Object.defineProperty(t,a,{enumerable:!0,get:i[a]})},o:(e,t)=>Object.prototype.hasOwnProperty.call(e,t)},__webpack_exports__ = globalThis.pdfjsWorker = {};e.d(__webpack_exports__,{WorkerMessageHandler:()=>WorkerMessageHandler});const t=!("object"!=typeof process||process+""!="[object process]"||process.versions.nw||process.versions.electron&&process.type&&"browser"!==process.type),i=[1,0,0,1,0,0],a=[.001,0,0,.001,0,0],s=1.35,r=.35,n=.25925925925925924,g=1,o=2,c=4,C=8,h=16,l=64,Q=128,E=256,u="pdfjs_internal_editor_",d=3,f=9,p=13,m=15,y={PRINT:4,MODIFY_CONTENTS:8,COPY:16,MODIFY_ANNOTATIONS:32,FILL_INTERACTIVE_FORMS:256,COPY_FOR_ACCESSIBILITY:512,ASSEMBLE:1024,PRINT_HIGH_QUALITY:2048},w=0,D=4,b=1,F=2,S=3,k=1,R=2,N=3,G=4,x=5,U=6,M=7,L=8,H=9,J=10,Y=11,v=12,K=13,T=14,q=15,O=16,W=17,j=20,X="Group",Z="R",V=1,z=2,_=4,$=16,AA=32,eA=128,tA=512,iA=1,aA=2,sA=4096,rA=8192,nA=32768,gA=65536,oA=131072,IA=1048576,cA=2097152,CA=8388608,hA=16777216,lA=1,BA=2,QA=3,EA=4,uA=5,dA={E:"Mouse Enter",X:"Mouse Exit",D:"Mouse Down",U:"Mouse Up",Fo:"Focus",Bl:"Blur",PO:"PageOpen",PC:"PageClose",PV:"PageVisible",PI:"PageInvisible",K:"Keystroke",F:"Format",V:"Validate",C:"Calculate"},fA={WC:"WillClose",WS:"WillSave",DS:"DidSave",WP:"WillPrint",DP:"DidPrint"},pA={O:"PageOpen",C:"PageClose"},mA={ERRORS:0,WARNINGS:1,INFOS:5},yA=1,wA=2,DA=3,bA=4,FA=5,SA=6,kA=7,RA=8,NA=9,GA=10,xA=11,UA=12,MA=13,LA=14,HA=15,JA=16,YA=17,vA=18,KA=19,TA=20,qA=21,OA=22,PA=23,WA=24,jA=25,XA=26,ZA=27,VA=28,zA=29,_A=30,$A=31,Ae=32,ee=33,te=34,ie=35,ae=36,se=37,re=38,ne=39,ge=40,oe=41,Ie=42,ce=43,Ce=44,he=45,le=46,Be=47,Qe=48,Ee=49,ue=50,de=51,fe=52,pe=53,me=54,ye=55,we=56,De=57,be=58,Fe=59,Se=60,ke=61,Re=62,Ne=63,Ge=64,xe=65,Ue=66,Me=67,Le=68,He=69,Je=70,Ye=71,ve=72,Ke=73,Te=74,qe=75,Oe=76,Pe=77,We=80,je=81,Xe=83,Ze=84,Ve=85,ze=86,_e=87,$e=88,At=89,et=90,tt=91,it=92,at=93,st=1,rt=2;let nt=mA.WARNINGS;function getVerbosityLevel(){return nt}function info(e){nt>=mA.INFOS&&console.log(`Info: ${e}`)}function warn(e){nt>=mA.WARNINGS&&console.log(`Warning: ${e}`)}function unreachable(e){throw new Error(e)}function assert(e,t){e||unreachable(t)}function createValidAbsoluteUrl(e,t=null,i=null){if(!e)return null;try{if(i&&"string"==typeof e){if(i.addDefaultProtocol&&e.startsWith("www.")){const t=e.match(/\./g);t?.length>=2&&(e=`http://${e}`)}if(i.tryConvertEncoding)try{e=stringToUTF8String(e)}catch{}}const a=t?new URL(e,t):new URL(e);if(function _isValidProtocol(e){switch(e?.protocol){case"http:":case"https:":case"ftp:":case"mailto:":case"tel:":return!0;default:return!1}}(a))return a}catch{}return null}function shadow(e,t,i,a=!1){Object.defineProperty(e,t,{value:i,enumerable:!a,configurable:!0,writable:!1});return i}const gt=function BaseExceptionClosure(){function BaseException(e,t){this.message=e;this.name=t}BaseException.prototype=new Error;BaseException.constructor=BaseException;return BaseException}();class PasswordException extends gt{constructor(e,t){super(e,"PasswordException");this.code=t}}class UnknownErrorException extends gt{constructor(e,t){super(e,"UnknownErrorException");this.details=t}}class InvalidPDFException extends gt{constructor(e){super(e,"InvalidPDFException")}}class MissingPDFException extends gt{constructor(e){super(e,"MissingPDFException")}}class UnexpectedResponseException extends gt{constructor(e,t){super(e,"UnexpectedResponseException");this.status=t}}class FormatError extends gt{constructor(e){super(e,"FormatError")}}class AbortException extends gt{constructor(e){super(e,"AbortException")}}function bytesToString(e){"object"==typeof e&&void 0!==e?.length||unreachable("Invalid argument for bytesToString");const t=e.length,i=8192;if(t>24&255,e>>16&255,e>>8&255,255&e)}function objectSize(e){return Object.keys(e).length}class FeatureTest{static get isLittleEndian(){return shadow(this,"isLittleEndian",function isLittleEndian(){const e=new Uint8Array(4);e[0]=1;return 1===new Uint32Array(e.buffer,0,1)[0]}())}static get isEvalSupported(){return shadow(this,"isEvalSupported",function isEvalSupported(){try{new Function("");return!0}catch{return!1}}())}static get isOffscreenCanvasSupported(){return shadow(this,"isOffscreenCanvasSupported","undefined"!=typeof OffscreenCanvas)}static get platform(){return"undefined"!=typeof navigator&&"string"==typeof navigator?.platform?shadow(this,"platform",{isMac:navigator.platform.includes("Mac"),isWindows:navigator.platform.includes("Win"),isFirefox:"string"==typeof navigator?.userAgent&&navigator.userAgent.includes("Firefox")}):shadow(this,"platform",{isMac:!1,isWindows:!1,isFirefox:!1})}static get isCSSRoundSupported(){return shadow(this,"isCSSRoundSupported",globalThis.CSS?.supports?.("width: round(1.5px, 1px)"))}}const ot=Array.from(Array(256).keys(),(e=>e.toString(16).padStart(2,"0")));class Util{static makeHexColor(e,t,i){return`#${ot[e]}${ot[t]}${ot[i]}`}static scaleMinMax(e,t){let i;if(e[0]){if(e[0]<0){i=t[0];t[0]=t[2];t[2]=i}t[0]*=e[0];t[2]*=e[0];if(e[3]<0){i=t[1];t[1]=t[3];t[3]=i}t[1]*=e[3];t[3]*=e[3]}else{i=t[0];t[0]=t[1];t[1]=i;i=t[2];t[2]=t[3];t[3]=i;if(e[1]<0){i=t[1];t[1]=t[3];t[3]=i}t[1]*=e[1];t[3]*=e[1];if(e[2]<0){i=t[0];t[0]=t[2];t[2]=i}t[0]*=e[2];t[2]*=e[2]}t[0]+=e[4];t[1]+=e[5];t[2]+=e[4];t[3]+=e[5]}static transform(e,t){return[e[0]*t[0]+e[2]*t[1],e[1]*t[0]+e[3]*t[1],e[0]*t[2]+e[2]*t[3],e[1]*t[2]+e[3]*t[3],e[0]*t[4]+e[2]*t[5]+e[4],e[1]*t[4]+e[3]*t[5]+e[5]]}static applyTransform(e,t){return[e[0]*t[0]+e[1]*t[2]+t[4],e[0]*t[1]+e[1]*t[3]+t[5]]}static applyInverseTransform(e,t){const i=t[0]*t[3]-t[1]*t[2];return[(e[0]*t[3]-e[1]*t[2]+t[2]*t[5]-t[4]*t[3])/i,(-e[0]*t[1]+e[1]*t[0]+t[4]*t[1]-t[5]*t[0])/i]}static getAxialAlignedBoundingBox(e,t){const i=this.applyTransform(e,t),a=this.applyTransform(e.slice(2,4),t),s=this.applyTransform([e[0],e[3]],t),r=this.applyTransform([e[2],e[1]],t);return[Math.min(i[0],a[0],s[0],r[0]),Math.min(i[1],a[1],s[1],r[1]),Math.max(i[0],a[0],s[0],r[0]),Math.max(i[1],a[1],s[1],r[1])]}static inverseTransform(e){const t=e[0]*e[3]-e[1]*e[2];return[e[3]/t,-e[1]/t,-e[2]/t,e[0]/t,(e[2]*e[5]-e[4]*e[3])/t,(e[4]*e[1]-e[5]*e[0])/t]}static singularValueDecompose2dScale(e){const t=[e[0],e[2],e[1],e[3]],i=e[0]*t[0]+e[1]*t[2],a=e[0]*t[1]+e[1]*t[3],s=e[2]*t[0]+e[3]*t[2],r=e[2]*t[1]+e[3]*t[3],n=(i+r)/2,g=Math.sqrt((i+r)**2-4*(i*r-s*a))/2,o=n+g||1,c=n-g||1;return[Math.sqrt(o),Math.sqrt(c)]}static normalizeRect(e){const t=e.slice(0);if(e[0]>e[2]){t[0]=e[2];t[2]=e[0]}if(e[1]>e[3]){t[1]=e[3];t[3]=e[1]}return t}static intersect(e,t){const i=Math.max(Math.min(e[0],e[2]),Math.min(t[0],t[2])),a=Math.min(Math.max(e[0],e[2]),Math.max(t[0],t[2]));if(i>a)return null;const s=Math.max(Math.min(e[1],e[3]),Math.min(t[1],t[3])),r=Math.min(Math.max(e[1],e[3]),Math.max(t[1],t[3]));return s>r?null:[i,s,a,r]}static#A(e,t,i,a,s,r,n,g,o,c){if(o<=0||o>=1)return;const C=1-o,h=o*o,l=h*o,Q=C*(C*(C*e+3*o*t)+3*h*i)+l*a,E=C*(C*(C*s+3*o*r)+3*h*n)+l*g;c[0]=Math.min(c[0],Q);c[1]=Math.min(c[1],E);c[2]=Math.max(c[2],Q);c[3]=Math.max(c[3],E)}static#e(e,t,i,a,s,r,n,g,o,c,C,h){if(Math.abs(o)<1e-12){Math.abs(c)>=1e-12&&this.#A(e,t,i,a,s,r,n,g,-C/c,h);return}const l=c**2-4*C*o;if(l<0)return;const Q=Math.sqrt(l),E=2*o;this.#A(e,t,i,a,s,r,n,g,(-c+Q)/E,h);this.#A(e,t,i,a,s,r,n,g,(-c-Q)/E,h)}static bezierBoundingBox(e,t,i,a,s,r,n,g,o){if(o){o[0]=Math.min(o[0],e,n);o[1]=Math.min(o[1],t,g);o[2]=Math.max(o[2],e,n);o[3]=Math.max(o[3],t,g)}else o=[Math.min(e,n),Math.min(t,g),Math.max(e,n),Math.max(t,g)];this.#e(e,i,s,n,t,a,r,g,3*(3*(i-s)-e+n),6*(e-2*i+s),3*(i-e),o);this.#e(e,i,s,n,t,a,r,g,3*(3*(a-r)-t+g),6*(t-2*a+r),3*(a-t),o);return o}}const It=[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,728,711,710,729,733,731,730,732,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,8226,8224,8225,8230,8212,8211,402,8260,8249,8250,8722,8240,8222,8220,8221,8216,8217,8218,8482,64257,64258,321,338,352,376,381,305,322,339,353,382,0,8364];function stringToPDFString(e){if(e[0]>="ï"){let t;if("þ"===e[0]&&"ÿ"===e[1]){t="utf-16be";e.length%2==1&&(e=e.slice(0,-1))}else if("ÿ"===e[0]&&"þ"===e[1]){t="utf-16le";e.length%2==1&&(e=e.slice(0,-1))}else"ï"===e[0]&&"»"===e[1]&&"¿"===e[2]&&(t="utf-8");if(t)try{const i=new TextDecoder(t,{fatal:!0}),a=stringToBytes(e),s=i.decode(a);return s.includes("")?s.replaceAll(/\x1b[^\x1b]*(?:\x1b|$)/g,""):s}catch(e){warn(`stringToPDFString: "${e}".`)}}const t=[];for(let i=0,a=e.length;iot[e])).join("")}const mt=Symbol("CIRCULAR_REF"),yt=Symbol("EOF");let wt=Object.create(null),Dt=Object.create(null),bt=Object.create(null);class Name{constructor(e){this.name=e}static get(e){return Dt[e]||=new Name(e)}}class Cmd{constructor(e){this.cmd=e}static get(e){return wt[e]||=new Cmd(e)}}const Ft=function nonSerializableClosure(){return Ft};class Dict{constructor(e=null){this._map=Object.create(null);this.xref=e;this.objId=null;this.suppressEncryption=!1;this.__nonSerializable__=Ft}assignXref(e){this.xref=e}get size(){return Object.keys(this._map).length}get(e,t,i){let a=this._map[e];if(void 0===a&&void 0!==t){a=this._map[t];void 0===a&&void 0!==i&&(a=this._map[i])}return a instanceof Ref&&this.xref?this.xref.fetch(a,this.suppressEncryption):a}async getAsync(e,t,i){let a=this._map[e];if(void 0===a&&void 0!==t){a=this._map[t];void 0===a&&void 0!==i&&(a=this._map[i])}return a instanceof Ref&&this.xref?this.xref.fetchAsync(a,this.suppressEncryption):a}getArray(e,t,i){let a=this._map[e];if(void 0===a&&void 0!==t){a=this._map[t];void 0===a&&void 0!==i&&(a=this._map[i])}a instanceof Ref&&this.xref&&(a=this.xref.fetch(a,this.suppressEncryption));if(Array.isArray(a)){a=a.slice();for(let e=0,t=a.length;e{unreachable("Should not call `set` on the empty dictionary.")};return shadow(this,"empty",e)}static merge({xref:e,dictArray:t,mergeSubDicts:i=!1}){const a=new Dict(e),s=new Map;for(const e of t)if(e instanceof Dict)for(const[t,a]of Object.entries(e._map)){let e=s.get(t);if(void 0===e){e=[];s.set(t,e)}else if(!(i&&a instanceof Dict))continue;e.push(a)}for(const[t,i]of s){if(1===i.length||!(i[0]instanceof Dict)){a._map[t]=i[0];continue}const s=new Dict(e);for(const e of i)for(const[t,i]of Object.entries(e._map))void 0===s._map[t]&&(s._map[t]=i);s.size>0&&(a._map[t]=s)}s.clear();return a.size>0?a:Dict.empty}clone(){const e=new Dict(this.xref);for(const t of this.getKeys())e.set(t,this.getRaw(t));return e}delete(e){delete this._map[e]}}class Ref{constructor(e,t){this.num=e;this.gen=t}toString(){return 0===this.gen?`${this.num}R`:`${this.num}R${this.gen}`}static fromString(e){const t=bt[e];if(t)return t;const i=/^(\d+)R(\d*)$/.exec(e);return i&&"0"!==i[1]?bt[e]=new Ref(parseInt(i[1]),i[2]?parseInt(i[2]):0):null}static get(e,t){const i=0===t?`${e}R`:`${e}R${t}`;return bt[i]||=new Ref(e,t)}}class RefSet{constructor(e=null){this._set=new Set(e?._set)}has(e){return this._set.has(e.toString())}put(e){this._set.add(e.toString())}remove(e){this._set.delete(e.toString())}[Symbol.iterator](){return this._set.values()}clear(){this._set.clear()}}class RefSetCache{constructor(){this._map=new Map}get size(){return this._map.size}get(e){return this._map.get(e.toString())}has(e){return this._map.has(e.toString())}put(e,t){this._map.set(e.toString(),t)}putAlias(e,t){this._map.set(e.toString(),this.get(t))}[Symbol.iterator](){return this._map.values()}clear(){this._map.clear()}*items(){for(const[e,t]of this._map)yield[Ref.fromString(e),t]}}function isName(e,t){return e instanceof Name&&(void 0===t||e.name===t)}function isCmd(e,t){return e instanceof Cmd&&(void 0===t||e.cmd===t)}function isDict(e,t){return e instanceof Dict&&(void 0===t||isName(e.get("Type"),t))}function isRefsEqual(e,t){return e.num===t.num&&e.gen===t.gen}class BaseStream{get length(){unreachable("Abstract getter `length` accessed")}get isEmpty(){unreachable("Abstract getter `isEmpty` accessed")}get isDataLoaded(){return shadow(this,"isDataLoaded",!0)}getByte(){unreachable("Abstract method `getByte` called")}getBytes(e){unreachable("Abstract method `getBytes` called")}async getImageData(e,t){return this.getBytes(e,t)}async asyncGetBytes(){unreachable("Abstract method `asyncGetBytes` called")}get isAsync(){return!1}get canAsyncDecodeImageFromBuffer(){return!1}async getTransferableImage(){return null}peekByte(){const e=this.getByte();-1!==e&&this.pos--;return e}peekBytes(e){const t=this.getBytes(e);this.pos-=t.length;return t}getUint16(){const e=this.getByte(),t=this.getByte();return-1===e||-1===t?-1:(e<<8)+t}getInt32(){return(this.getByte()<<24)+(this.getByte()<<16)+(this.getByte()<<8)+this.getByte()}getByteRange(e,t){unreachable("Abstract method `getByteRange` called")}getString(e){return bytesToString(this.getBytes(e))}skip(e){this.pos+=e||1}reset(){unreachable("Abstract method `reset` called")}moveStart(){unreachable("Abstract method `moveStart` called")}makeSubStream(e,t,i=null){unreachable("Abstract method `makeSubStream` called")}getBaseStreams(){return null}}const St=/^[1-9]\.\d$/;function getLookupTableFactory(e){let t;return function(){if(e){t=Object.create(null);e(t);e=null}return t}}class MissingDataException extends gt{constructor(e,t){super(`Missing data [${e}, ${t})`,"MissingDataException");this.begin=e;this.end=t}}class ParserEOFException extends gt{constructor(e){super(e,"ParserEOFException")}}class XRefEntryException extends gt{constructor(e){super(e,"XRefEntryException")}}class XRefParseException extends gt{constructor(e){super(e,"XRefParseException")}}function arrayBuffersToBytes(e){const t=e.length;if(0===t)return new Uint8Array(0);if(1===t)return new Uint8Array(e[0]);let i=0;for(let a=0;a0,"The number should be a positive integer.");const i=[];let a;for(;e>=1e3;){e-=1e3;i.push("M")}a=e/100|0;e%=100;i.push(kt[a]);a=e/10|0;e%=10;i.push(kt[10+a]);i.push(kt[20+e]);const s=i.join("");return t?s.toLowerCase():s}function log2(e){return e<=0?0:Math.ceil(Math.log2(e))}function readInt8(e,t){return e[t]<<24>>24}function readUint16(e,t){return e[t]<<8|e[t+1]}function readUint32(e,t){return(e[t]<<24|e[t+1]<<16|e[t+2]<<8|e[t+3])>>>0}function isWhiteSpace(e){return 32===e||9===e||13===e||10===e}function isNumberArray(e,t){return Array.isArray(e)?(null===t||e.length===t)&&e.every((e=>"number"==typeof e)):ArrayBuffer.isView(e)&&(0===e.length||"number"==typeof e[0])&&(null===t||e.length===t)}function lookupMatrix(e,t){return isNumberArray(e,6)?e:t}function lookupRect(e,t){return isNumberArray(e,4)?e:t}function lookupNormalRect(e,t){return isNumberArray(e,4)?Util.normalizeRect(e):t}function parseXFAPath(e){const t=/(.+)\[(\d+)\]$/;return e.split(".").map((e=>{const i=e.match(t);return i?{name:i[1],pos:parseInt(i[2],10)}:{name:e,pos:0}}))}function escapePDFName(e){const t=[];let i=0;for(let a=0,s=e.length;a126||35===s||40===s||41===s||60===s||62===s||91===s||93===s||123===s||125===s||47===s||37===s){i"\n"===e?"\\n":"\r"===e?"\\r":`\\${e}`))}function _collectJS(e,t,i,a){if(!e)return;let s=null;if(e instanceof Ref){if(a.has(e))return;s=e;a.put(s);e=t.fetch(e)}if(Array.isArray(e))for(const s of e)_collectJS(s,t,i,a);else if(e instanceof Dict){if(isName(e.get("S"),"JavaScript")){const t=e.get("JS");let a;t instanceof BaseStream?a=t.getString():"string"==typeof t&&(a=t);a&&=stringToPDFString(a).replaceAll("\0","");a&&i.push(a)}_collectJS(e.getRaw("Next"),t,i,a)}s&&a.remove(s)}function collectActions(e,t,i){const a=Object.create(null),s=getInheritableProperty({dict:t,key:"AA",stopWhenFound:!1});if(s)for(let t=s.length-1;t>=0;t--){const r=s[t];if(r instanceof Dict)for(const t of r.getKeys()){const s=i[t];if(!s)continue;const n=[];_collectJS(r.getRaw(t),e,n,new RefSet);n.length>0&&(a[s]=n)}}if(t.has("A")){const i=[];_collectJS(t.get("A"),e,i,new RefSet);i.length>0&&(a.Action=i)}return objectSize(a)>0?a:null}const Rt={60:"<",62:">",38:"&",34:""",39:"'"};function*codePointIter(e){for(let t=0,i=e.length;t55295&&(i<57344||i>65533)&&t++;yield i}}function encodeToXmlString(e){const t=[];let i=0;for(let a=0,s=e.length;a55295&&(s<57344||s>65533)&&a++;i=a+1}}if(0===t.length)return e;i: ${e}.`);return!1}return!0}function validateCSSFont(e){const t=new Set(["100","200","300","400","500","600","700","800","900","1000","normal","bold","bolder","lighter"]),{fontFamily:i,fontWeight:a,italicAngle:s}=e;if(!validateFontName(i,!0))return!1;const r=a?a.toString():"";e.fontWeight=t.has(r)?r:"400";const n=parseFloat(s);e.italicAngle=isNaN(n)||n<-90||n>90?"14":s.toString();return!0}function recoverJsURL(e){const t=new RegExp("^\\s*("+["app.launchURL","window.open","xfa.host.gotoURL"].join("|").replaceAll(".","\\.")+")\\((?:'|\")([^'\"]*)(?:'|\")(?:,\\s*(\\w+)\\)|\\))","i").exec(e);if(t?.[2]){const e=t[2];let i=!1;"true"===t[3]&&"app.launchURL"===t[1]&&(i=!0);return{url:e,newWindow:i}}return null}function numberToString(e){if(Number.isInteger(e))return e.toString();const t=Math.round(100*e);return t%100==0?(t/100).toString():t%10==0?e.toFixed(1):e.toFixed(2)}function getNewAnnotationsMap(e){if(!e)return null;const t=new Map;for(const[i,a]of e){if(!i.startsWith(u))continue;let e=t.get(a.pageIndex);if(!e){e=[];t.set(a.pageIndex,e)}e.push(a)}return t.size>0?t:null}function stringToAsciiOrUTF16BE(e){return function isAscii(e){return/^[\x00-\x7F]*$/.test(e)}(e)?e:stringToUTF16String(e,!0)}function stringToUTF16HexString(e){const t=[];for(let i=0,a=e.length;i>8&255],ot[255&a])}return t.join("")}function stringToUTF16String(e,t=!1){const i=[];t&&i.push("þÿ");for(let t=0,a=e.length;t>8&255),String.fromCharCode(255&a))}return i.join("")}function getRotationMatrix(e,t,i){switch(e){case 90:return[0,1,-1,0,t,0];case 180:return[-1,0,0,-1,t,i];case 270:return[0,-1,1,0,0,i];default:throw new Error("Invalid rotation")}}function getSizeInBytes(e){return Math.ceil(Math.ceil(Math.log2(1+e))/8)}class Stream extends BaseStream{constructor(e,t,i,a){super();this.bytes=e instanceof Uint8Array?e:new Uint8Array(e);this.start=t||0;this.pos=this.start;this.end=t+i||this.bytes.length;this.dict=a}get length(){return this.end-this.start}get isEmpty(){return 0===this.length}getByte(){return this.pos>=this.end?-1:this.bytes[this.pos++]}getBytes(e){const t=this.bytes,i=this.pos,a=this.end;if(!e)return t.subarray(i,a);let s=i+e;s>a&&(s=a);this.pos=s;return t.subarray(i,s)}getByteRange(e,t){e<0&&(e=0);t>this.end&&(t=this.end);return this.bytes.subarray(e,t)}reset(){this.pos=this.start}moveStart(){this.start=this.pos}makeSubStream(e,t,i=null){return new Stream(this.bytes.buffer,e,t,i)}}class StringStream extends Stream{constructor(e){super(stringToBytes(e))}}class NullStream extends Stream{constructor(){super(new Uint8Array(0))}}class ChunkedStream extends Stream{constructor(e,t,i){super(new Uint8Array(e),0,e,null);this.chunkSize=t;this._loadedChunks=new Set;this.numChunks=Math.ceil(e/t);this.manager=i;this.progressiveDataLength=0;this.lastSuccessfulEnsureByteChunk=-1}getMissingChunks(){const e=[];for(let t=0,i=this.numChunks;t=this.end?this.numChunks:Math.floor(t/this.chunkSize);for(let e=i;ethis.numChunks)&&t!==this.lastSuccessfulEnsureByteChunk){if(!this._loadedChunks.has(t))throw new MissingDataException(e,e+1);this.lastSuccessfulEnsureByteChunk=t}}ensureRange(e,t){if(e>=t)return;if(t<=this.progressiveDataLength)return;const i=Math.floor(e/this.chunkSize);if(i>this.numChunks)return;const a=Math.min(Math.floor((t-1)/this.chunkSize)+1,this.numChunks);for(let s=i;s=this.end)return-1;e>=this.progressiveDataLength&&this.ensureByte(e);return this.bytes[this.pos++]}getBytes(e){const t=this.bytes,i=this.pos,a=this.end;if(!e){a>this.progressiveDataLength&&this.ensureRange(i,a);return t.subarray(i,a)}let s=i+e;s>a&&(s=a);s>this.progressiveDataLength&&this.ensureRange(i,s);this.pos=s;return t.subarray(i,s)}getByteRange(e,t){e<0&&(e=0);t>this.end&&(t=this.end);t>this.progressiveDataLength&&this.ensureRange(e,t);return this.bytes.subarray(e,t)}makeSubStream(e,t,i=null){t?e+t>this.progressiveDataLength&&this.ensureRange(e,e+t):e>=this.progressiveDataLength&&this.ensureByte(e);function ChunkedStreamSubstream(){}ChunkedStreamSubstream.prototype=Object.create(this);ChunkedStreamSubstream.prototype.getMissingChunks=function(){const e=this.chunkSize,t=Math.floor(this.start/e),i=Math.floor((this.end-1)/e)+1,a=[];for(let e=t;e{const readChunk=({value:r,done:n})=>{try{if(n){const t=arrayBuffersToBytes(a);a=null;e(t);return}s+=r.byteLength;i.isStreamingSupported&&this.onProgress({loaded:s});a.push(r);i.read().then(readChunk,t)}catch(e){t(e)}};i.read().then(readChunk,t)})).then((t=>{this.aborted||this.onReceiveData({chunk:t,begin:e})}))}requestAllChunks(e=!1){if(!e){const e=this.stream.getMissingChunks();this._requestChunks(e)}return this._loadedStreamCapability.promise}_requestChunks(e){const t=this.currRequestId++,i=new Set;this._chunksNeededByRequest.set(t,i);for(const t of e)this.stream.hasChunk(t)||i.add(t);if(0===i.size)return Promise.resolve();const a=Promise.withResolvers();this._promisesByRequest.set(t,a);const s=[];for(const e of i){let i=this._requestsByChunk.get(e);if(!i){i=[];this._requestsByChunk.set(e,i);s.push(e)}i.push(t)}if(s.length>0){const e=this.groupChunks(s);for(const t of e){const e=t.beginChunk*this.chunkSize,i=Math.min(t.endChunk*this.chunkSize,this.length);this.sendRequest(e,i).catch(a.reject)}}return a.promise.catch((e=>{if(!this.aborted)throw e}))}getStream(){return this.stream}requestRange(e,t){t=Math.min(t,this.length);const i=this.getBeginChunk(e),a=this.getEndChunk(t),s=[];for(let e=i;e=0&&a+1!==r){t.push({beginChunk:i,endChunk:a+1});i=r}s+1===e.length&&t.push({beginChunk:i,endChunk:r+1});a=r}return t}onProgress(e){this.msgHandler.send("DocProgress",{loaded:this.stream.numChunksLoaded*this.chunkSize+e.loaded,total:this.length})}onReceiveData(e){const t=e.chunk,i=void 0===e.begin,a=i?this.progressiveDataLength:e.begin,s=a+t.byteLength,r=Math.floor(a/this.chunkSize),n=s0||g.push(i)}}}if(!this.disableAutoFetch&&0===this._requestsByChunk.size){let e;if(1===this.stream.numChunksLoaded){const t=this.stream.numChunks-1;this.stream.hasChunk(t)||(e=t)}else e=this.stream.nextEmptyChunk(n);Number.isInteger(e)&&this._requestChunks([e])}for(const e of g){const t=this._promisesByRequest.get(e);this._promisesByRequest.delete(e);t.resolve()}this.msgHandler.send("DocProgress",{loaded:this.stream.numChunksLoaded*this.chunkSize,total:this.length})}onError(e){this._loadedStreamCapability.reject(e)}getBeginChunk(e){return Math.floor(e/this.chunkSize)}getEndChunk(e){return Math.floor((e-1)/this.chunkSize)+1}abort(e){this.aborted=!0;this.pdfNetworkStream?.cancelAllRequests(e);for(const t of this._promisesByRequest.values())t.reject(e)}}class ColorSpace{constructor(e,t){this.name=e;this.numComps=t}getRgb(e,t){const i=new Uint8ClampedArray(3);this.getRgbItem(e,t,i,0);return i}getRgbItem(e,t,i,a){unreachable("Should not call ColorSpace.getRgbItem")}getRgbBuffer(e,t,i,a,s,r,n){unreachable("Should not call ColorSpace.getRgbBuffer")}getOutputLength(e,t){unreachable("Should not call ColorSpace.getOutputLength")}isPassthrough(e){return!1}isDefaultDecode(e,t){return ColorSpace.isDefaultDecode(e,this.numComps)}fillRgb(e,t,i,a,s,r,n,g,o){const c=t*i;let C=null;const h=1<h&&"DeviceGray"!==this.name&&"DeviceRGB"!==this.name){const t=n<=8?new Uint8Array(h):new Uint16Array(h);for(let e=0;e=.99554525?1:this.#B(0,1,1.055*e**(1/2.4)-.055)}#B(e,t,i){return Math.max(e,Math.min(t,i))}#Q(e){return e<0?-this.#Q(-e):e>8?((e+16)/116)**3:e*CalRGBCS.#I}#E(e,t,i){if(0===e[0]&&0===e[1]&&0===e[2]){i[0]=t[0];i[1]=t[1];i[2]=t[2];return}const a=this.#Q(0),s=(1-a)/(1-this.#Q(e[0])),r=1-s,n=(1-a)/(1-this.#Q(e[1])),g=1-n,o=(1-a)/(1-this.#Q(e[2])),c=1-o;i[0]=t[0]*s+r;i[1]=t[1]*n+g;i[2]=t[2]*o+c}#u(e,t,i){if(1===e[0]&&1===e[2]){i[0]=t[0];i[1]=t[1];i[2]=t[2];return}const a=i;this.#c(CalRGBCS.#i,t,a);const s=CalRGBCS.#n;this.#C(e,a,s);this.#c(CalRGBCS.#a,s,i)}#d(e,t,i){const a=i;this.#c(CalRGBCS.#i,t,a);const s=CalRGBCS.#n;this.#h(e,a,s);this.#c(CalRGBCS.#a,s,i)}#t(e,t,i,a,s){const r=this.#B(0,1,e[t]*s),n=this.#B(0,1,e[t+1]*s),g=this.#B(0,1,e[t+2]*s),o=1===r?1:r**this.GR,c=1===n?1:n**this.GG,C=1===g?1:g**this.GB,h=this.MXA*o+this.MXB*c+this.MXC*C,l=this.MYA*o+this.MYB*c+this.MYC*C,Q=this.MZA*o+this.MZB*c+this.MZC*C,E=CalRGBCS.#g;E[0]=h;E[1]=l;E[2]=Q;const u=CalRGBCS.#o;this.#u(this.whitePoint,E,u);const d=CalRGBCS.#g;this.#E(this.blackPoint,u,d);const f=CalRGBCS.#o;this.#d(CalRGBCS.#r,d,f);const p=CalRGBCS.#g;this.#c(CalRGBCS.#s,f,p);i[a]=255*this.#l(p[0]);i[a+1]=255*this.#l(p[1]);i[a+2]=255*this.#l(p[2])}getRgbItem(e,t,i,a){this.#t(e,t,i,a,1)}getRgbBuffer(e,t,i,a,s,r,n){const g=1/((1<this.amax||this.bmin>this.bmax){info("Invalid Range, falling back to defaults");this.amin=-100;this.amax=100;this.bmin=-100;this.bmax=100}}#f(e){return e>=6/29?e**3:108/841*(e-4/29)}#p(e,t,i,a){return i+e*(a-i)/t}#t(e,t,i,a,s){let r=e[t],n=e[t+1],g=e[t+2];if(!1!==i){r=this.#p(r,i,0,100);n=this.#p(n,i,this.amin,this.amax);g=this.#p(g,i,this.bmin,this.bmax)}n>this.amax?n=this.amax:nthis.bmax?g=this.bmax:g>>0}function hexToStr(e,t){return 1===t?String.fromCharCode(e[0],e[1]):3===t?String.fromCharCode(e[0],e[1],e[2],e[3]):String.fromCharCode(...e.subarray(0,t+1))}function addHex(e,t,i){let a=0;for(let s=i;s>=0;s--){a+=e[s]+t[s];e[s]=255&a;a>>=8}}function incHex(e,t){let i=1;for(let a=t;a>=0&&i>0;a--){i+=e[a];e[a]=255&i;i>>=8}}const Nt=16;class BinaryCMapStream{constructor(e){this.buffer=e;this.pos=0;this.end=e.length;this.tmpBuf=new Uint8Array(19)}readByte(){return this.pos>=this.end?-1:this.buffer[this.pos++]}readNumber(){let e,t=0;do{const i=this.readByte();if(i<0)throw new FormatError("unexpected EOF in bcmap");e=!(128&i);t=t<<7|127&i}while(!e);return t}readSigned(){const e=this.readNumber();return 1&e?~(e>>>1):e>>>1}readHex(e,t){e.set(this.buffer.subarray(this.pos,this.pos+t+1));this.pos+=t+1}readHexNumber(e,t){let i;const a=this.tmpBuf;let s=0;do{const e=this.readByte();if(e<0)throw new FormatError("unexpected EOF in bcmap");i=!(128&e);a[s++]=127&e}while(!i);let r=t,n=0,g=0;for(;r>=0;){for(;g<8&&a.length>0;){n|=a[--s]<>=8;g-=8}}readHexSigned(e,t){this.readHexNumber(e,t);const i=1&e[t]?255:0;let a=0;for(let s=0;s<=t;s++){a=(1&a)<<8|e[s];e[s]=a>>1^i}}readString(){const e=this.readNumber(),t=new Array(e);for(let i=0;i=0;){const e=l>>5;if(7===e){switch(31&l){case 0:a.readString();break;case 1:r=a.readString()}continue}const i=!!(16&l),s=15&l;if(s+1>Nt)throw new Error("BinaryCMapReader.process: Invalid dataSize.");const Q=1,E=a.readNumber();switch(e){case 0:a.readHex(n,s);a.readHexNumber(g,s);addHex(g,n,s);t.addCodespaceRange(s+1,hexToInt(n,s),hexToInt(g,s));for(let e=1;es&&(a=s)}else{for(;!this.eof;)this.readBlock(t);a=this.bufferLength}this.pos=a;return this.buffer.subarray(i,a)}async getImageData(e,t=null){if(!this.canAsyncDecodeImageFromBuffer)return this.getBytes(e,t);const i=await this.stream.asyncGetBytes();return this.decodeImage(i,t)}reset(){this.pos=0}makeSubStream(e,t,i=null){if(void 0===t)for(;!this.eof;)this.readBlock();else{const i=e+t;for(;this.bufferLength<=i&&!this.eof;)this.readBlock()}return new Stream(this.buffer,e,t,i)}getBaseStreams(){return this.str?this.str.getBaseStreams():null}}class StreamsSequenceStream extends DecodeStream{constructor(e,t=null){e=e.filter((e=>e instanceof BaseStream));let i=0;for(const t of e)i+=t instanceof DecodeStream?t._rawMinBufferLength:t.length;super(i);this.streams=e;this._onError=t}readBlock(){const e=this.streams;if(0===e.length){this.eof=!0;return}const t=e.shift();let i;try{i=t.getBytes()}catch(e){if(this._onError){this._onError(e,t.dict?.objId);return}throw e}const a=this.bufferLength,s=a+i.length;this.ensureBuffer(s).set(i,a);this.bufferLength=s}getBaseStreams(){const e=[];for(const t of this.streams){const i=t.getBaseStreams();i&&e.push(...i)}return e.length>0?e:null}}class Ascii85Stream extends DecodeStream{constructor(e,t){t&&(t*=.8);super(t);this.str=e;this.dict=e.dict;this.input=new Uint8Array(5)}readBlock(){const e=this.str;let t=e.getByte();for(;isWhiteSpace(t);)t=e.getByte();if(-1===t||126===t){this.eof=!0;return}const i=this.bufferLength;let a,s;if(122===t){a=this.ensureBuffer(i+4);for(s=0;s<4;++s)a[i+s]=0;this.bufferLength+=4}else{const r=this.input;r[0]=t;for(s=1;s<5;++s){t=e.getByte();for(;isWhiteSpace(t);)t=e.getByte();r[s]=t;if(-1===t||126===t)break}a=this.ensureBuffer(i+s-1);this.bufferLength+=s-1;if(s<5){for(;s<5;++s)r[s]=117;this.eof=!0}let n=0;for(s=0;s<5;++s)n=85*n+(r[s]-33);for(s=3;s>=0;--s){a[i+s]=255&n;n>>=8}}}}class AsciiHexStream extends DecodeStream{constructor(e,t){t&&(t*=.5);super(t);this.str=e;this.dict=e.dict;this.firstDigit=-1}readBlock(){const e=this.str.getBytes(8e3);if(!e.length){this.eof=!0;return}const t=e.length+1>>1,i=this.ensureBuffer(this.bufferLength+t);let a=this.bufferLength,s=this.firstDigit;for(const t of e){let e;if(t>=48&&t<=57)e=15&t;else{if(!(t>=65&&t<=70||t>=97&&t<=102)){if(62===t){this.eof=!0;break}continue}e=9+(15&t)}if(s<0)s=e;else{i[a++]=s<<4|e;s=-1}}if(s>=0&&this.eof){i[a++]=s<<4;s=-1}this.firstDigit=s;this.bufferLength=a}}const xt=-1,Ut=[[-1,-1],[-1,-1],[7,8],[7,7],[6,6],[6,6],[6,5],[6,5],[4,0],[4,0],[4,0],[4,0],[4,0],[4,0],[4,0],[4,0],[3,1],[3,1],[3,1],[3,1],[3,1],[3,1],[3,1],[3,1],[3,1],[3,1],[3,1],[3,1],[3,1],[3,1],[3,1],[3,1],[3,4],[3,4],[3,4],[3,4],[3,4],[3,4],[3,4],[3,4],[3,4],[3,4],[3,4],[3,4],[3,4],[3,4],[3,4],[3,4],[3,3],[3,3],[3,3],[3,3],[3,3],[3,3],[3,3],[3,3],[3,3],[3,3],[3,3],[3,3],[3,3],[3,3],[3,3],[3,3],[1,2],[1,2],[1,2],[1,2],[1,2],[1,2],[1,2],[1,2],[1,2],[1,2],[1,2],[1,2],[1,2],[1,2],[1,2],[1,2],[1,2],[1,2],[1,2],[1,2],[1,2],[1,2],[1,2],[1,2],[1,2],[1,2],[1,2],[1,2],[1,2],[1,2],[1,2],[1,2],[1,2],[1,2],[1,2],[1,2],[1,2],[1,2],[1,2],[1,2],[1,2],[1,2],[1,2],[1,2],[1,2],[1,2],[1,2],[1,2],[1,2],[1,2],[1,2],[1,2],[1,2],[1,2],[1,2],[1,2],[1,2],[1,2],[1,2],[1,2],[1,2],[1,2],[1,2],[1,2]],Mt=[[-1,-1],[12,-2],[-1,-1],[-1,-1],[-1,-1],[-1,-1],[-1,-1],[-1,-1],[-1,-1],[-1,-1],[-1,-1],[-1,-1],[-1,-1],[-1,-1],[-1,-1],[-1,-1],[11,1792],[11,1792],[12,1984],[12,2048],[12,2112],[12,2176],[12,2240],[12,2304],[11,1856],[11,1856],[11,1920],[11,1920],[12,2368],[12,2432],[12,2496],[12,2560]],Lt=[[-1,-1],[-1,-1],[-1,-1],[-1,-1],[8,29],[8,29],[8,30],[8,30],[8,45],[8,45],[8,46],[8,46],[7,22],[7,22],[7,22],[7,22],[7,23],[7,23],[7,23],[7,23],[8,47],[8,47],[8,48],[8,48],[6,13],[6,13],[6,13],[6,13],[6,13],[6,13],[6,13],[6,13],[7,20],[7,20],[7,20],[7,20],[8,33],[8,33],[8,34],[8,34],[8,35],[8,35],[8,36],[8,36],[8,37],[8,37],[8,38],[8,38],[7,19],[7,19],[7,19],[7,19],[8,31],[8,31],[8,32],[8,32],[6,1],[6,1],[6,1],[6,1],[6,1],[6,1],[6,1],[6,1],[6,12],[6,12],[6,12],[6,12],[6,12],[6,12],[6,12],[6,12],[8,53],[8,53],[8,54],[8,54],[7,26],[7,26],[7,26],[7,26],[8,39],[8,39],[8,40],[8,40],[8,41],[8,41],[8,42],[8,42],[8,43],[8,43],[8,44],[8,44],[7,21],[7,21],[7,21],[7,21],[7,28],[7,28],[7,28],[7,28],[8,61],[8,61],[8,62],[8,62],[8,63],[8,63],[8,0],[8,0],[8,320],[8,320],[8,384],[8,384],[5,10],[5,10],[5,10],[5,10],[5,10],[5,10],[5,10],[5,10],[5,10],[5,10],[5,10],[5,10],[5,10],[5,10],[5,10],[5,10],[5,11],[5,11],[5,11],[5,11],[5,11],[5,11],[5,11],[5,11],[5,11],[5,11],[5,11],[5,11],[5,11],[5,11],[5,11],[5,11],[7,27],[7,27],[7,27],[7,27],[8,59],[8,59],[8,60],[8,60],[9,1472],[9,1536],[9,1600],[9,1728],[7,18],[7,18],[7,18],[7,18],[7,24],[7,24],[7,24],[7,24],[8,49],[8,49],[8,50],[8,50],[8,51],[8,51],[8,52],[8,52],[7,25],[7,25],[7,25],[7,25],[8,55],[8,55],[8,56],[8,56],[8,57],[8,57],[8,58],[8,58],[6,192],[6,192],[6,192],[6,192],[6,192],[6,192],[6,192],[6,192],[6,1664],[6,1664],[6,1664],[6,1664],[6,1664],[6,1664],[6,1664],[6,1664],[8,448],[8,448],[8,512],[8,512],[9,704],[9,768],[8,640],[8,640],[8,576],[8,576],[9,832],[9,896],[9,960],[9,1024],[9,1088],[9,1152],[9,1216],[9,1280],[9,1344],[9,1408],[7,256],[7,256],[7,256],[7,256],[4,2],[4,2],[4,2],[4,2],[4,2],[4,2],[4,2],[4,2],[4,2],[4,2],[4,2],[4,2],[4,2],[4,2],[4,2],[4,2],[4,2],[4,2],[4,2],[4,2],[4,2],[4,2],[4,2],[4,2],[4,2],[4,2],[4,2],[4,2],[4,2],[4,2],[4,2],[4,2],[4,3],[4,3],[4,3],[4,3],[4,3],[4,3],[4,3],[4,3],[4,3],[4,3],[4,3],[4,3],[4,3],[4,3],[4,3],[4,3],[4,3],[4,3],[4,3],[4,3],[4,3],[4,3],[4,3],[4,3],[4,3],[4,3],[4,3],[4,3],[4,3],[4,3],[4,3],[4,3],[5,128],[5,128],[5,128],[5,128],[5,128],[5,128],[5,128],[5,128],[5,128],[5,128],[5,128],[5,128],[5,128],[5,128],[5,128],[5,128],[5,8],[5,8],[5,8],[5,8],[5,8],[5,8],[5,8],[5,8],[5,8],[5,8],[5,8],[5,8],[5,8],[5,8],[5,8],[5,8],[5,9],[5,9],[5,9],[5,9],[5,9],[5,9],[5,9],[5,9],[5,9],[5,9],[5,9],[5,9],[5,9],[5,9],[5,9],[5,9],[6,16],[6,16],[6,16],[6,16],[6,16],[6,16],[6,16],[6,16],[6,17],[6,17],[6,17],[6,17],[6,17],[6,17],[6,17],[6,17],[4,4],[4,4],[4,4],[4,4],[4,4],[4,4],[4,4],[4,4],[4,4],[4,4],[4,4],[4,4],[4,4],[4,4],[4,4],[4,4],[4,4],[4,4],[4,4],[4,4],[4,4],[4,4],[4,4],[4,4],[4,4],[4,4],[4,4],[4,4],[4,4],[4,4],[4,4],[4,4],[4,5],[4,5],[4,5],[4,5],[4,5],[4,5],[4,5],[4,5],[4,5],[4,5],[4,5],[4,5],[4,5],[4,5],[4,5],[4,5],[4,5],[4,5],[4,5],[4,5],[4,5],[4,5],[4,5],[4,5],[4,5],[4,5],[4,5],[4,5],[4,5],[4,5],[4,5],[4,5],[6,14],[6,14],[6,14],[6,14],[6,14],[6,14],[6,14],[6,14],[6,15],[6,15],[6,15],[6,15],[6,15],[6,15],[6,15],[6,15],[5,64],[5,64],[5,64],[5,64],[5,64],[5,64],[5,64],[5,64],[5,64],[5,64],[5,64],[5,64],[5,64],[5,64],[5,64],[5,64],[4,6],[4,6],[4,6],[4,6],[4,6],[4,6],[4,6],[4,6],[4,6],[4,6],[4,6],[4,6],[4,6],[4,6],[4,6],[4,6],[4,6],[4,6],[4,6],[4,6],[4,6],[4,6],[4,6],[4,6],[4,6],[4,6],[4,6],[4,6],[4,6],[4,6],[4,6],[4,6],[4,7],[4,7],[4,7],[4,7],[4,7],[4,7],[4,7],[4,7],[4,7],[4,7],[4,7],[4,7],[4,7],[4,7],[4,7],[4,7],[4,7],[4,7],[4,7],[4,7],[4,7],[4,7],[4,7],[4,7],[4,7],[4,7],[4,7],[4,7],[4,7],[4,7],[4,7],[4,7]],Ht=[[-1,-1],[-1,-1],[12,-2],[12,-2],[-1,-1],[-1,-1],[-1,-1],[-1,-1],[-1,-1],[-1,-1],[-1,-1],[-1,-1],[-1,-1],[-1,-1],[-1,-1],[-1,-1],[-1,-1],[-1,-1],[-1,-1],[-1,-1],[-1,-1],[-1,-1],[-1,-1],[-1,-1],[-1,-1],[-1,-1],[-1,-1],[-1,-1],[-1,-1],[-1,-1],[-1,-1],[-1,-1],[11,1792],[11,1792],[11,1792],[11,1792],[12,1984],[12,1984],[12,2048],[12,2048],[12,2112],[12,2112],[12,2176],[12,2176],[12,2240],[12,2240],[12,2304],[12,2304],[11,1856],[11,1856],[11,1856],[11,1856],[11,1920],[11,1920],[11,1920],[11,1920],[12,2368],[12,2368],[12,2432],[12,2432],[12,2496],[12,2496],[12,2560],[12,2560],[10,18],[10,18],[10,18],[10,18],[10,18],[10,18],[10,18],[10,18],[12,52],[12,52],[13,640],[13,704],[13,768],[13,832],[12,55],[12,55],[12,56],[12,56],[13,1280],[13,1344],[13,1408],[13,1472],[12,59],[12,59],[12,60],[12,60],[13,1536],[13,1600],[11,24],[11,24],[11,24],[11,24],[11,25],[11,25],[11,25],[11,25],[13,1664],[13,1728],[12,320],[12,320],[12,384],[12,384],[12,448],[12,448],[13,512],[13,576],[12,53],[12,53],[12,54],[12,54],[13,896],[13,960],[13,1024],[13,1088],[13,1152],[13,1216],[10,64],[10,64],[10,64],[10,64],[10,64],[10,64],[10,64],[10,64]],Jt=[[8,13],[8,13],[8,13],[8,13],[8,13],[8,13],[8,13],[8,13],[8,13],[8,13],[8,13],[8,13],[8,13],[8,13],[8,13],[8,13],[11,23],[11,23],[12,50],[12,51],[12,44],[12,45],[12,46],[12,47],[12,57],[12,58],[12,61],[12,256],[10,16],[10,16],[10,16],[10,16],[10,17],[10,17],[10,17],[10,17],[12,48],[12,49],[12,62],[12,63],[12,30],[12,31],[12,32],[12,33],[12,40],[12,41],[11,22],[11,22],[8,14],[8,14],[8,14],[8,14],[8,14],[8,14],[8,14],[8,14],[8,14],[8,14],[8,14],[8,14],[8,14],[8,14],[8,14],[8,14],[7,10],[7,10],[7,10],[7,10],[7,10],[7,10],[7,10],[7,10],[7,10],[7,10],[7,10],[7,10],[7,10],[7,10],[7,10],[7,10],[7,10],[7,10],[7,10],[7,10],[7,10],[7,10],[7,10],[7,10],[7,10],[7,10],[7,10],[7,10],[7,10],[7,10],[7,10],[7,10],[7,11],[7,11],[7,11],[7,11],[7,11],[7,11],[7,11],[7,11],[7,11],[7,11],[7,11],[7,11],[7,11],[7,11],[7,11],[7,11],[7,11],[7,11],[7,11],[7,11],[7,11],[7,11],[7,11],[7,11],[7,11],[7,11],[7,11],[7,11],[7,11],[7,11],[7,11],[7,11],[9,15],[9,15],[9,15],[9,15],[9,15],[9,15],[9,15],[9,15],[12,128],[12,192],[12,26],[12,27],[12,28],[12,29],[11,19],[11,19],[11,20],[11,20],[12,34],[12,35],[12,36],[12,37],[12,38],[12,39],[11,21],[11,21],[12,42],[12,43],[10,0],[10,0],[10,0],[10,0],[7,12],[7,12],[7,12],[7,12],[7,12],[7,12],[7,12],[7,12],[7,12],[7,12],[7,12],[7,12],[7,12],[7,12],[7,12],[7,12],[7,12],[7,12],[7,12],[7,12],[7,12],[7,12],[7,12],[7,12],[7,12],[7,12],[7,12],[7,12],[7,12],[7,12],[7,12],[7,12]],Yt=[[-1,-1],[-1,-1],[-1,-1],[-1,-1],[6,9],[6,8],[5,7],[5,7],[4,6],[4,6],[4,6],[4,6],[4,5],[4,5],[4,5],[4,5],[3,1],[3,1],[3,1],[3,1],[3,1],[3,1],[3,1],[3,1],[3,4],[3,4],[3,4],[3,4],[3,4],[3,4],[3,4],[3,4],[2,3],[2,3],[2,3],[2,3],[2,3],[2,3],[2,3],[2,3],[2,3],[2,3],[2,3],[2,3],[2,3],[2,3],[2,3],[2,3],[2,2],[2,2],[2,2],[2,2],[2,2],[2,2],[2,2],[2,2],[2,2],[2,2],[2,2],[2,2],[2,2],[2,2],[2,2],[2,2]];class CCITTFaxDecoder{constructor(e,t={}){if(!e||"function"!=typeof e.next)throw new Error('CCITTFaxDecoder - invalid "source" parameter.');this.source=e;this.eof=!1;this.encoding=t.K||0;this.eoline=t.EndOfLine||!1;this.byteAlign=t.EncodedByteAlign||!1;this.columns=t.Columns||1728;this.rows=t.Rows||0;this.eoblock=t.EndOfBlock??!0;this.black=t.BlackIs1||!1;this.codingLine=new Uint32Array(this.columns+1);this.refLine=new Uint32Array(this.columns+2);this.codingLine[0]=this.columns;this.codingPos=0;this.row=0;this.nextLine2D=this.encoding<0;this.inputBits=0;this.inputBuf=0;this.outputBits=0;this.rowsDone=!1;let i;for(;0===(i=this._lookBits(12));)this._eatBits(1);1===i&&this._eatBits(12);if(this.encoding>0){this.nextLine2D=!this._lookBits(1);this._eatBits(1)}}readNextChar(){if(this.eof)return-1;const e=this.refLine,t=this.codingLine,i=this.columns;let a,s,r,n,g;if(0===this.outputBits){this.rowsDone&&(this.eof=!0);if(this.eof)return-1;this.err=!1;let r,g,o;if(this.nextLine2D){for(n=0;t[n]=64);do{g+=o=this._getWhiteCode()}while(o>=64)}else{do{r+=o=this._getWhiteCode()}while(o>=64);do{g+=o=this._getBlackCode()}while(o>=64)}this._addPixels(t[this.codingPos]+r,s);t[this.codingPos]0?--a:++a;for(;e[a]<=t[this.codingPos]&&e[a]0?--a:++a;for(;e[a]<=t[this.codingPos]&&e[a]0?--a:++a;for(;e[a]<=t[this.codingPos]&&e[a]=64);else do{r+=o=this._getWhiteCode()}while(o>=64);this._addPixels(t[this.codingPos]+r,s);s^=1}}let c=!1;this.byteAlign&&(this.inputBits&=-8);if(this.eoblock||this.row!==this.rows-1){r=this._lookBits(12);if(this.eoline)for(;r!==xt&&1!==r;){this._eatBits(1);r=this._lookBits(12)}else for(;0===r;){this._eatBits(1);r=this._lookBits(12)}if(1===r){this._eatBits(12);c=!0}else r===xt&&(this.eof=!0)}else this.rowsDone=!0;if(!this.eof&&this.encoding>0&&!this.rowsDone){this.nextLine2D=!this._lookBits(1);this._eatBits(1)}if(this.eoblock&&c&&this.byteAlign){r=this._lookBits(12);if(1===r){this._eatBits(12);if(this.encoding>0){this._lookBits(1);this._eatBits(1)}if(this.encoding>=0)for(n=0;n<4;++n){r=this._lookBits(12);1!==r&&info("bad rtc code: "+r);this._eatBits(12);if(this.encoding>0){this._lookBits(1);this._eatBits(1)}}this.eof=!0}}else if(this.err&&this.eoline){for(;;){r=this._lookBits(13);if(r===xt){this.eof=!0;return-1}if(r>>1==1)break;this._eatBits(1)}this._eatBits(12);if(this.encoding>0){this._eatBits(1);this.nextLine2D=!(1&r)}}this.outputBits=t[0]>0?t[this.codingPos=0]:t[this.codingPos=1];this.row++}if(this.outputBits>=8){g=1&this.codingPos?0:255;this.outputBits-=8;if(0===this.outputBits&&t[this.codingPos]r){g<<=r;1&this.codingPos||(g|=255>>8-r);this.outputBits-=r;r=0}else{g<<=this.outputBits;1&this.codingPos||(g|=255>>8-this.outputBits);r-=this.outputBits;this.outputBits=0;if(t[this.codingPos]0){g<<=r;r=0}}}while(r)}this.black&&(g^=255);return g}_addPixels(e,t){const i=this.codingLine;let a=this.codingPos;if(e>i[a]){if(e>this.columns){info("row is wrong length");this.err=!0;e=this.columns}1&a^t&&++a;i[a]=e}this.codingPos=a}_addPixelsNeg(e,t){const i=this.codingLine;let a=this.codingPos;if(e>i[a]){if(e>this.columns){info("row is wrong length");this.err=!0;e=this.columns}1&a^t&&++a;i[a]=e}else if(e0&&e=s){const t=i[e-s];if(t[0]===a){this._eatBits(a);return[!0,t[1],!0]}}}return[!1,0,!1]}_getTwoDimCode(){let e,t=0;if(this.eoblock){t=this._lookBits(7);e=Ut[t];if(e?.[0]>0){this._eatBits(e[0]);return e[1]}}else{const e=this._findTableCode(1,7,Ut);if(e[0]&&e[2])return e[1]}info("Bad two dim code");return xt}_getWhiteCode(){let e,t=0;if(this.eoblock){t=this._lookBits(12);if(t===xt)return 1;e=t>>5==0?Mt[t]:Lt[t>>3];if(e[0]>0){this._eatBits(e[0]);return e[1]}}else{let e=this._findTableCode(1,9,Lt);if(e[0])return e[1];e=this._findTableCode(11,12,Mt);if(e[0])return e[1]}info("bad white code");this._eatBits(1);return 1}_getBlackCode(){let e,t;if(this.eoblock){e=this._lookBits(13);if(e===xt)return 1;t=e>>7==0?Ht[e]:e>>9==0&&e>>7!=0?Jt[(e>>1)-64]:Yt[e>>7];if(t[0]>0){this._eatBits(t[0]);return t[1]}}else{let e=this._findTableCode(2,6,Yt);if(e[0])return e[1];e=this._findTableCode(7,12,Jt,64);if(e[0])return e[1];e=this._findTableCode(10,13,Ht);if(e[0])return e[1]}info("bad black code");this._eatBits(1);return 1}_lookBits(e){let t;for(;this.inputBits>16-e;this.inputBuf=this.inputBuf<<8|t;this.inputBits+=8}return this.inputBuf>>this.inputBits-e&65535>>16-e}_eatBits(e){(this.inputBits-=e)<0&&(this.inputBits=0)}}class CCITTFaxStream extends DecodeStream{constructor(e,t,i){super(t);this.str=e;this.dict=e.dict;i instanceof Dict||(i=Dict.empty);const a={next:()=>e.getByte()};this.ccittFaxDecoder=new CCITTFaxDecoder(a,{K:i.get("K"),EndOfLine:i.get("EndOfLine"),EncodedByteAlign:i.get("EncodedByteAlign"),Columns:i.get("Columns"),Rows:i.get("Rows"),EndOfBlock:i.get("EndOfBlock"),BlackIs1:i.get("BlackIs1")})}readBlock(){for(;!this.eof;){const e=this.ccittFaxDecoder.readNextChar();if(-1===e){this.eof=!0;return}this.ensureBuffer(this.bufferLength+1);this.buffer[this.bufferLength++]=e}}}const vt=new Int32Array([16,17,18,0,8,7,9,6,10,5,11,4,12,3,13,2,14,1,15]),Kt=new Int32Array([3,4,5,6,7,8,9,10,65547,65549,65551,65553,131091,131095,131099,131103,196643,196651,196659,196667,262211,262227,262243,262259,327811,327843,327875,327907,258,258,258]),Tt=new Int32Array([1,2,3,4,65541,65543,131081,131085,196625,196633,262177,262193,327745,327777,393345,393409,459009,459137,524801,525057,590849,591361,657409,658433,724993,727041,794625,798721,868353,876545]),qt=[new Int32Array([459008,524368,524304,524568,459024,524400,524336,590016,459016,524384,524320,589984,524288,524416,524352,590048,459012,524376,524312,589968,459028,524408,524344,590032,459020,524392,524328,59e4,524296,524424,524360,590064,459010,524372,524308,524572,459026,524404,524340,590024,459018,524388,524324,589992,524292,524420,524356,590056,459014,524380,524316,589976,459030,524412,524348,590040,459022,524396,524332,590008,524300,524428,524364,590072,459009,524370,524306,524570,459025,524402,524338,590020,459017,524386,524322,589988,524290,524418,524354,590052,459013,524378,524314,589972,459029,524410,524346,590036,459021,524394,524330,590004,524298,524426,524362,590068,459011,524374,524310,524574,459027,524406,524342,590028,459019,524390,524326,589996,524294,524422,524358,590060,459015,524382,524318,589980,459031,524414,524350,590044,459023,524398,524334,590012,524302,524430,524366,590076,459008,524369,524305,524569,459024,524401,524337,590018,459016,524385,524321,589986,524289,524417,524353,590050,459012,524377,524313,589970,459028,524409,524345,590034,459020,524393,524329,590002,524297,524425,524361,590066,459010,524373,524309,524573,459026,524405,524341,590026,459018,524389,524325,589994,524293,524421,524357,590058,459014,524381,524317,589978,459030,524413,524349,590042,459022,524397,524333,590010,524301,524429,524365,590074,459009,524371,524307,524571,459025,524403,524339,590022,459017,524387,524323,589990,524291,524419,524355,590054,459013,524379,524315,589974,459029,524411,524347,590038,459021,524395,524331,590006,524299,524427,524363,590070,459011,524375,524311,524575,459027,524407,524343,590030,459019,524391,524327,589998,524295,524423,524359,590062,459015,524383,524319,589982,459031,524415,524351,590046,459023,524399,524335,590014,524303,524431,524367,590078,459008,524368,524304,524568,459024,524400,524336,590017,459016,524384,524320,589985,524288,524416,524352,590049,459012,524376,524312,589969,459028,524408,524344,590033,459020,524392,524328,590001,524296,524424,524360,590065,459010,524372,524308,524572,459026,524404,524340,590025,459018,524388,524324,589993,524292,524420,524356,590057,459014,524380,524316,589977,459030,524412,524348,590041,459022,524396,524332,590009,524300,524428,524364,590073,459009,524370,524306,524570,459025,524402,524338,590021,459017,524386,524322,589989,524290,524418,524354,590053,459013,524378,524314,589973,459029,524410,524346,590037,459021,524394,524330,590005,524298,524426,524362,590069,459011,524374,524310,524574,459027,524406,524342,590029,459019,524390,524326,589997,524294,524422,524358,590061,459015,524382,524318,589981,459031,524414,524350,590045,459023,524398,524334,590013,524302,524430,524366,590077,459008,524369,524305,524569,459024,524401,524337,590019,459016,524385,524321,589987,524289,524417,524353,590051,459012,524377,524313,589971,459028,524409,524345,590035,459020,524393,524329,590003,524297,524425,524361,590067,459010,524373,524309,524573,459026,524405,524341,590027,459018,524389,524325,589995,524293,524421,524357,590059,459014,524381,524317,589979,459030,524413,524349,590043,459022,524397,524333,590011,524301,524429,524365,590075,459009,524371,524307,524571,459025,524403,524339,590023,459017,524387,524323,589991,524291,524419,524355,590055,459013,524379,524315,589975,459029,524411,524347,590039,459021,524395,524331,590007,524299,524427,524363,590071,459011,524375,524311,524575,459027,524407,524343,590031,459019,524391,524327,589999,524295,524423,524359,590063,459015,524383,524319,589983,459031,524415,524351,590047,459023,524399,524335,590015,524303,524431,524367,590079]),9],Ot=[new Int32Array([327680,327696,327688,327704,327684,327700,327692,327708,327682,327698,327690,327706,327686,327702,327694,0,327681,327697,327689,327705,327685,327701,327693,327709,327683,327699,327691,327707,327687,327703,327695,0]),5];class FlateStream extends DecodeStream{constructor(e,t){super(t);this.str=e;this.dict=e.dict;const i=e.getByte(),a=e.getByte();if(-1===i||-1===a)throw new FormatError(`Invalid header in flate stream: ${i}, ${a}`);if(8!=(15&i))throw new FormatError(`Unknown compression method in flate stream: ${i}, ${a}`);if(((i<<8)+a)%31!=0)throw new FormatError(`Bad FCHECK in flate stream: ${i}, ${a}`);if(32&a)throw new FormatError(`FDICT bit set in flate stream: ${i}, ${a}`);this.codeSize=0;this.codeBuf=0}async getImageData(e,t){const i=await this.asyncGetBytes();return i?.subarray(0,e)||this.getBytes(e)}async asyncGetBytes(){this.str.reset();const e=this.str.getBytes();try{const{readable:t,writable:i}=new DecompressionStream("deflate"),a=i.getWriter();await a.ready;a.write(e).then((async()=>{await a.ready;await a.close()})).catch((()=>{}));const s=[];let r=0;for await(const e of t){s.push(e);r+=e.byteLength}const n=new Uint8Array(r);let g=0;for(const e of s){n.set(e,g);g+=e.byteLength}return n}catch{this.str=new Stream(e,2,e.length,this.str.dict);this.reset();return null}}get isAsync(){return!0}getBits(e){const t=this.str;let i,a=this.codeSize,s=this.codeBuf;for(;a>e;this.codeSize=a-=e;return i}getCode(e){const t=this.str,i=e[0],a=e[1];let s,r=this.codeSize,n=this.codeBuf;for(;r>16,c=65535&g;if(o<1||r>o;this.codeSize=r-o;return c}generateHuffmanTable(e){const t=e.length;let i,a=0;for(i=0;ia&&(a=e[i]);const s=1<>=1}for(i=e;i>=1;if(0===t){let t;if(-1===(t=a.getByte())){this.#m("Bad block header in flate stream");return}let i=t;if(-1===(t=a.getByte())){this.#m("Bad block header in flate stream");return}i|=t<<8;if(-1===(t=a.getByte())){this.#m("Bad block header in flate stream");return}let s=t;if(-1===(t=a.getByte())){this.#m("Bad block header in flate stream");return}s|=t<<8;if(s!==(65535&~i)&&(0!==i||0!==s))throw new FormatError("Bad uncompressed block length in flate stream");this.codeBuf=0;this.codeSize=0;const r=this.bufferLength,n=r+i;e=this.ensureBuffer(n);this.bufferLength=n;if(0===i)-1===a.peekByte()&&(this.eof=!0);else{const t=a.getBytes(i);e.set(t,r);t.length0;)C[g++]=Q}s=this.generateHuffmanTable(C.subarray(0,e));r=this.generateHuffmanTable(C.subarray(e,c))}}e=this.buffer;let n=e?e.length:0,g=this.bufferLength;for(;;){let t=this.getCode(s);if(t<256){if(g+1>=n){e=this.ensureBuffer(g+1);n=e.length}e[g++]=t;continue}if(256===t){this.bufferLength=g;return}t-=257;t=Kt[t];let a=t>>16;a>0&&(a=this.getBits(a));i=(65535&t)+a;t=this.getCode(r);t=Tt[t];a=t>>16;a>0&&(a=this.getBits(a));const o=(65535&t)+a;if(g+i>=n){e=this.ensureBuffer(g+i);n=e.length}for(let t=0;t>9&127;this.clow=this.clow<<7&65535;this.ct-=7;this.a=32768}byteIn(){const e=this.data;let t=this.bp;if(255===e[t])if(e[t+1]>143){this.clow+=65280;this.ct=8}else{t++;this.clow+=e[t]<<9;this.ct=7;this.bp=t}else{t++;this.clow+=t65535){this.chigh+=this.clow>>16;this.clow&=65535}}readBit(e,t){let i=e[t]>>1,a=1&e[t];const s=Pt[i],r=s.qe;let n,g=this.a-r;if(this.chigh>15&1;this.clow=this.clow<<1&65535;this.ct--}while(0==(32768&g));this.a=g;e[t]=i<<1|a;return n}}class Jbig2Error extends gt{constructor(e){super(e,"Jbig2Error")}}class ContextCache{getContexts(e){return e in this?this[e]:this[e]=new Int8Array(65536)}}class DecodingContext{constructor(e,t,i){this.data=e;this.start=t;this.end=i}get decoder(){return shadow(this,"decoder",new ArithmeticDecoder(this.data,this.start,this.end))}get contextCache(){return shadow(this,"contextCache",new ContextCache)}}const Wt=2**31-1,jt=-(2**31);function decodeInteger(e,t,i){const a=e.getContexts(t);let s=1;function readBits(e){let t=0;for(let r=0;r>>0}const r=readBits(1),n=readBits(1)?readBits(1)?readBits(1)?readBits(1)?readBits(1)?readBits(32)+4436:readBits(12)+340:readBits(8)+84:readBits(6)+20:readBits(4)+4:readBits(2);let g;0===r?g=n:n>0&&(g=-n);return g>=jt&&g<=Wt?g:null}function decodeIAID(e,t,i){const a=e.getContexts("IAID");let s=1;for(let e=0;e=F&&M=S){K=K<<1&d;for(u=0;u=0&&H=0){J=G[L][H];J&&(K|=J<=e?c<<=1:c=c<<1|w[g][o]}for(Q=0;Q=m||o<0||o>=p?c<<=1:c=c<<1|a[g][o]}const E=D.readBit(b,c);t[n]=E}}return w}function decodeTextRegion(e,t,i,a,s,r,n,g,o,c,C,h,l,Q,E,u,d,f,p){if(e&&t)throw new Jbig2Error("refinement with Huffman is not supported");const m=[];let y,w;for(y=0;y1&&(s=e?p.readBits(f):decodeInteger(b,"IAIT",D));const r=n*F+s,S=e?Q.symbolIDTable.decode(p):decodeIAID(b,D,o),k=t&&(e?p.readBit():decodeInteger(b,"IARI",D));let R=g[S],N=R[0].length,G=R.length;if(k){const e=decodeInteger(b,"IARDW",D),t=decodeInteger(b,"IARDH",D);N+=e;G+=t;R=decodeRefinement(N,G,E,R,(e>>1)+decodeInteger(b,"IARDX",D),(t>>1)+decodeInteger(b,"IARDY",D),!1,u,d)}let x=0;c?1&h?x=G-1:a+=G-1:h>1?a+=N-1:x=N-1;const U=r-(1&h?0:G-1),M=a-(2&h?N-1:0);let L,H,J;if(c)for(L=0;L>5&7;const o=[31&n];let c=t+6;if(7===n){g=536870911&readUint32(e,c-1);c+=3;let t=g+7>>3;o[0]=e[c++];for(;--t>0;)o.push(e[c++])}else if(5===n||6===n)throw new Jbig2Error("invalid referred-to flags");i.retainBits=o;let C=4;i.number<=256?C=1:i.number<=65536&&(C=2);const h=[];let l,Q;for(l=0;l>>24&255;r[3]=t.height>>16&255;r[4]=t.height>>8&255;r[5]=255&t.height;for(l=c,Q=e.length;l>2&3;e.huffmanDWSelector=t>>4&3;e.bitmapSizeSelector=t>>6&1;e.aggregationInstancesSelector=t>>7&1;e.bitmapCodingContextUsed=!!(256&t);e.bitmapCodingContextRetained=!!(512&t);e.template=t>>10&3;e.refinementTemplate=t>>12&1;c+=2;if(!e.huffman){o=0===e.template?4:1;n=[];for(g=0;g>2&3;C.stripSize=1<>4&3;C.transposed=!!(64&h);C.combinationOperator=h>>7&3;C.defaultPixelValue=h>>9&1;C.dsOffset=h<<17>>27;C.refinementTemplate=h>>15&1;if(C.huffman){const e=readUint16(a,c);c+=2;C.huffmanFS=3&e;C.huffmanDS=e>>2&3;C.huffmanDT=e>>4&3;C.huffmanRefinementDW=e>>6&3;C.huffmanRefinementDH=e>>8&3;C.huffmanRefinementDX=e>>10&3;C.huffmanRefinementDY=e>>12&3;C.huffmanRefinementSizeSelector=!!(16384&e)}if(C.refinement&&!C.refinementTemplate){n=[];for(g=0;g<2;g++){n.push({x:readInt8(a,c),y:readInt8(a,c+1)});c+=2}C.refinementAt=n}C.numberOfSymbolInstances=readUint32(a,c);c+=4;r=[C,i.referredTo,a,c,s];break;case 16:const l={},Q=a[c++];l.mmr=!!(1&Q);l.template=Q>>1&3;l.patternWidth=a[c++];l.patternHeight=a[c++];l.maxPatternIndex=readUint32(a,c);c+=4;r=[l,i.number,a,c,s];break;case 22:case 23:const E={};E.info=readRegionSegmentInformation(a,c);c+=$t;const u=a[c++];E.mmr=!!(1&u);E.template=u>>1&3;E.enableSkip=!!(8&u);E.combinationOperator=u>>4&7;E.defaultPixelValue=u>>7&1;E.gridWidth=readUint32(a,c);c+=4;E.gridHeight=readUint32(a,c);c+=4;E.gridOffsetX=4294967295&readUint32(a,c);c+=4;E.gridOffsetY=4294967295&readUint32(a,c);c+=4;E.gridVectorX=readUint16(a,c);c+=2;E.gridVectorY=readUint16(a,c);c+=2;r=[E,i.referredTo,a,c,s];break;case 38:case 39:const d={};d.info=readRegionSegmentInformation(a,c);c+=$t;const f=a[c++];d.mmr=!!(1&f);d.template=f>>1&3;d.prediction=!!(8&f);if(!d.mmr){o=0===d.template?4:1;n=[];for(g=0;g>2&1;p.combinationOperator=m>>3&3;p.requiresBuffer=!!(32&m);p.combinationOperatorOverride=!!(64&m);r=[p];break;case 49:case 50:case 51:case 62:break;case 53:r=[i.number,a,c,s];break;default:throw new Jbig2Error(`segment type ${i.typeName}(${i.type}) is not implemented`)}const C="on"+i.typeName;C in t&&t[C].apply(t,r)}function processSegments(e,t){for(let i=0,a=e.length;i>3,i=new Uint8ClampedArray(t*e.height);e.defaultPixelValue&&i.fill(255);this.buffer=i}drawBitmap(e,t){const i=this.currentPageInfo,a=e.width,s=e.height,r=i.width+7>>3,n=i.combinationOperatorOverride?e.combinationOperator:i.combinationOperator,g=this.buffer,o=128>>(7&e.x);let c,C,h,l,Q=e.y*r+(e.x>>3);switch(n){case 0:for(c=0;c>=1;if(!h){h=128;l++}}Q+=r}break;case 2:for(c=0;c>=1;if(!h){h=128;l++}}Q+=r}break;default:throw new Jbig2Error(`operator ${n} is not supported`)}}onImmediateGenericRegion(e,t,i,a){const s=e.info,r=new DecodingContext(t,i,a),n=decodeBitmap(e.mmr,s.width,s.height,e.template,e.prediction,null,e.at,r);this.drawBitmap(s,n)}onImmediateLosslessGenericRegion(){this.onImmediateGenericRegion(...arguments)}onSymbolDictionary(e,t,i,a,s,r){let n,g;if(e.huffman){n=function getSymbolDictionaryHuffmanTables(e,t,i){let a,s,r,n,g=0;switch(e.huffmanDHSelector){case 0:case 1:a=getStandardTable(e.huffmanDHSelector+4);break;case 3:a=getCustomHuffmanTable(g,t,i);g++;break;default:throw new Jbig2Error("invalid Huffman DH selector")}switch(e.huffmanDWSelector){case 0:case 1:s=getStandardTable(e.huffmanDWSelector+2);break;case 3:s=getCustomHuffmanTable(g,t,i);g++;break;default:throw new Jbig2Error("invalid Huffman DW selector")}if(e.bitmapSizeSelector){r=getCustomHuffmanTable(g,t,i);g++}else r=getStandardTable(1);n=e.aggregationInstancesSelector?getCustomHuffmanTable(g,t,i):getStandardTable(1);return{tableDeltaHeight:a,tableDeltaWidth:s,tableBitmapSize:r,tableAggregateInstances:n}}(e,i,this.customTables);g=new Reader(a,s,r)}let o=this.symbols;o||(this.symbols=o={});const c=[];for(const e of i){const t=o[e];t&&c.push(...t)}const C=new DecodingContext(a,s,r);o[t]=function decodeSymbolDictionary(e,t,i,a,s,r,n,g,o,c,C,h){if(e&&t)throw new Jbig2Error("symbol refinement with Huffman is not supported");const l=[];let Q=0,E=log2(i.length+a);const u=C.decoder,d=C.contextCache;let f,p;if(e){f=getStandardTable(1);p=[];E=Math.max(E,1)}for(;l.length1)m=decodeTextRegion(e,t,a,Q,0,s,1,i.concat(l),E,0,0,1,0,r,o,c,C,0,h);else{const e=decodeIAID(d,u,E),t=decodeInteger(d,"IARDX",u),s=decodeInteger(d,"IARDY",u);m=decodeRefinement(a,Q,o,e=32){let i,a,n;switch(t){case 32:if(0===e)throw new Jbig2Error("no previous value in symbol ID table");a=s.readBits(2)+3;i=r[e-1].prefixLength;break;case 33:a=s.readBits(3)+3;i=0;break;case 34:a=s.readBits(7)+11;i=0;break;default:throw new Jbig2Error("invalid code length in symbol ID table")}for(n=0;n=0;d--){R=e?decodeMMRBitmap(k,o,c,!0):decodeBitmap(!1,o,c,i,!1,null,F,E);S[d]=R}for(N=0;N=0;f--){x^=S[f][N][G];U|=x<>8;H=h+N*l-G*Q>>8;if(L>=0&&L+w<=a&&H>=0&&H+D<=s)for(d=0;d=s)){Y=u[t];J=M[d];for(f=0;f=0&&e>1&7),o=1+(a>>4&7),c=[];let C,h,l=s;do{C=n.readBits(g);h=n.readBits(o);c.push(new HuffmanLine([l,C,h,0]));l+=1<>t&1;if(t<=0)this.children[i]=new HuffmanTreeNode(e);else{let a=this.children[i];a||(this.children[i]=a=new HuffmanTreeNode(null));a.buildTree(e,t-1)}}decodeNode(e){if(this.isLeaf){if(this.isOOB)return null;const t=e.readBits(this.rangeLength);return this.rangeLow+(this.isLowerRange?-t:t)}const t=this.children[e.readBit()];if(!t)throw new Jbig2Error("invalid Huffman data");return t.decodeNode(e)}}class HuffmanTable{constructor(e,t){t||this.assignPrefixCodes(e);this.rootNode=new HuffmanTreeNode(null);for(let t=0,i=e.length;t0&&this.rootNode.buildTree(i,i.prefixLength-1)}}decode(e){return this.rootNode.decodeNode(e)}assignPrefixCodes(e){const t=e.length;let i=0;for(let a=0;a=this.end)throw new Jbig2Error("end of data while reading bit");this.currentByte=this.data[this.position++];this.shift=7}const e=this.currentByte>>this.shift&1;this.shift--;return e}readBits(e){let t,i=0;for(t=e-1;t>=0;t--)i|=this.readBit()<=this.end?-1:this.data[this.position++]}}function getCustomHuffmanTable(e,t,i){let a=0;for(let s=0,r=t.length;s>i&1;i--}}if(a&&!g){const e=5;for(let t=0;t>2,o=new Uint32Array(e.buffer,t,g);if(FeatureTest.isLittleEndian){for(;n>>24|t<<8|4278190080;i[a+2]=t>>>16|s<<16|4278190080;i[a+3]=s>>>8|4278190080}for(let t=4*n,s=e.length;t>>8|255;i[a+2]=t<<16|s>>>16|255;i[a+3]=s<<8|255}for(let t=4*n,s=e.length;t>3,h=7&a,l=e.length;i=new Uint32Array(i.buffer);let Q=0;for(let a=0;a0&&!e[r-1];)r--;const n=[{children:[],index:0}];let g,o=n[0];for(i=0;i0;)o=n.pop();o.index++;n.push(o);for(;n.length<=i;){n.push(g={children:[],index:0});o.children[o.index]=g.children;o=g}s++}if(i+10){E--;return Q>>E&1}Q=e[t++];if(255===Q){const a=e[t++];if(a){if(220===a&&c){const a=readUint16(e,t+=2);t+=2;if(a>0&&a!==i.scanLines)throw new DNLMarkerError("Found DNL marker (0xFFDC) while parsing scan data",a)}else if(217===a){if(c){const e=p*(8===i.precision?8:0);if(e>0&&Math.round(i.scanLines/e)>=5)throw new DNLMarkerError("Found EOI marker (0xFFD9) while parsing scan data, possibly caused by incorrect `scanLines` parameter",e)}throw new EOIMarkerError("Found EOI marker (0xFFD9) while parsing scan data")}throw new JpegError(`unexpected marker ${(Q<<8|a).toString(16)}`)}}E=7;return Q>>>7}function decodeHuffman(e){let t=e;for(;;){t=t[readBit()];switch(typeof t){case"number":return t;case"object":continue}throw new JpegError("invalid huffman sequence")}}function receive(e){let t=0;for(;e>0;){t=t<<1|readBit();e--}return t}function receiveAndExtend(e){if(1===e)return 1===readBit()?1:-1;const t=receive(e);return t>=1<0){u--;return}let i=r;const a=n;for(;i<=a;){const a=decodeHuffman(e.huffmanTableAC),s=15&a,r=a>>4;if(0===s){if(r<15){u=receive(r)+(1<>4;if(0===s)if(c<15){u=receive(c)+(1<>4;if(0===a){if(r<15)break;s+=16;continue}s+=r;const n=ei[s];e.blockData[t+n]=receiveAndExtend(a);s++}};let k,R=0;const N=1===m?a[0].blocksPerLine*a[0].blocksPerColumn:C*i.mcusPerColumn;let G,x;for(;R<=N;){const i=s?Math.min(N-R,s):N;if(i>0){for(w=0;w0?"unexpected":"excessive"} MCU data, current marker is: ${k.invalid}`);t=k.offset}if(!(k.marker>=65488&&k.marker<=65495))break;t+=2}return t-l}function quantizeAndInverse(e,t,i){const a=e.quantizationTable,s=e.blockData;let r,n,g,o,c,C,h,l,Q,E,u,d,f,p,m,y,w;if(!a)throw new JpegError("missing required Quantization Table.");for(let e=0;e<64;e+=8){Q=s[t+e];E=s[t+e+1];u=s[t+e+2];d=s[t+e+3];f=s[t+e+4];p=s[t+e+5];m=s[t+e+6];y=s[t+e+7];Q*=a[e];if(0!=(E|u|d|f|p|m|y)){E*=a[e+1];u*=a[e+2];d*=a[e+3];f*=a[e+4];p*=a[e+5];m*=a[e+6];y*=a[e+7];r=gi*Q+128>>8;n=gi*f+128>>8;g=u;o=m;c=oi*(E-y)+128>>8;l=oi*(E+y)+128>>8;C=d<<4;h=p<<4;r=r+n+1>>1;n=r-n;w=g*ni+o*ri+128>>8;g=g*ri-o*ni+128>>8;o=w;c=c+h+1>>1;h=c-h;l=l+C+1>>1;C=l-C;r=r+o+1>>1;o=r-o;n=n+g+1>>1;g=n-g;w=c*si+l*ai+2048>>12;c=c*ai-l*si+2048>>12;l=w;w=C*ii+h*ti+2048>>12;C=C*ti-h*ii+2048>>12;h=w;i[e]=r+l;i[e+7]=r-l;i[e+1]=n+h;i[e+6]=n-h;i[e+2]=g+C;i[e+5]=g-C;i[e+3]=o+c;i[e+4]=o-c}else{w=gi*Q+512>>10;i[e]=w;i[e+1]=w;i[e+2]=w;i[e+3]=w;i[e+4]=w;i[e+5]=w;i[e+6]=w;i[e+7]=w}}for(let e=0;e<8;++e){Q=i[e];E=i[e+8];u=i[e+16];d=i[e+24];f=i[e+32];p=i[e+40];m=i[e+48];y=i[e+56];if(0!=(E|u|d|f|p|m|y)){r=gi*Q+2048>>12;n=gi*f+2048>>12;g=u;o=m;c=oi*(E-y)+2048>>12;l=oi*(E+y)+2048>>12;C=d;h=p;r=4112+(r+n+1>>1);n=r-n;w=g*ni+o*ri+2048>>12;g=g*ri-o*ni+2048>>12;o=w;c=c+h+1>>1;h=c-h;l=l+C+1>>1;C=l-C;r=r+o+1>>1;o=r-o;n=n+g+1>>1;g=n-g;w=c*si+l*ai+2048>>12;c=c*ai-l*si+2048>>12;l=w;w=C*ii+h*ti+2048>>12;C=C*ti-h*ii+2048>>12;h=w;Q=r+l;y=r-l;E=n+h;m=n-h;u=g+C;p=g-C;d=o+c;f=o-c;Q<16?Q=0:Q>=4080?Q=255:Q>>=4;E<16?E=0:E>=4080?E=255:E>>=4;u<16?u=0:u>=4080?u=255:u>>=4;d<16?d=0:d>=4080?d=255:d>>=4;f<16?f=0:f>=4080?f=255:f>>=4;p<16?p=0:p>=4080?p=255:p>>=4;m<16?m=0:m>=4080?m=255:m>>=4;y<16?y=0:y>=4080?y=255:y>>=4;s[t+e]=Q;s[t+e+8]=E;s[t+e+16]=u;s[t+e+24]=d;s[t+e+32]=f;s[t+e+40]=p;s[t+e+48]=m;s[t+e+56]=y}else{w=gi*Q+8192>>14;w=w<-2040?0:w>=2024?255:w+2056>>4;s[t+e]=w;s[t+e+8]=w;s[t+e+16]=w;s[t+e+24]=w;s[t+e+32]=w;s[t+e+40]=w;s[t+e+48]=w;s[t+e+56]=w}}}function buildComponentData(e,t){const i=t.blocksPerLine,a=t.blocksPerColumn,s=new Int16Array(64);for(let e=0;e=a)return null;const r=readUint16(e,t);if(r>=65472&&r<=65534)return{invalid:null,marker:r,offset:t};let n=readUint16(e,s);for(;!(n>=65472&&n<=65534);){if(++s>=a)return null;n=readUint16(e,s)}return{invalid:r.toString(16),marker:n,offset:s}}function prepareComponents(e){const t=Math.ceil(e.samplesPerLine/8/e.maxH),i=Math.ceil(e.scanLines/8/e.maxV);for(const a of e.components){const s=Math.ceil(Math.ceil(e.samplesPerLine/8)*a.h/e.maxH),r=Math.ceil(Math.ceil(e.scanLines/8)*a.v/e.maxV),n=t*a.h,g=64*(i*a.v)*(n+1);a.blockData=new Int16Array(g);a.blocksPerLine=s;a.blocksPerColumn=r}e.mcusPerLine=t;e.mcusPerColumn=i}function readDataBlock(e,t){const i=readUint16(e,t);let a=(t+=2)+i-2;const s=findNextFileMarker(e,a,t);if(s?.invalid){warn("readDataBlock - incorrect length, current marker is: "+s.invalid);a=s.offset}const r=e.subarray(t,a);return{appData:r,newOffset:t+=r.length}}function skipData(e,t){const i=readUint16(e,t),a=(t+=2)+i-2,s=findNextFileMarker(e,a,t);return s?.invalid?s.offset:a}class JpegImage{constructor({decodeTransform:e=null,colorTransform:t=-1}={}){this._decodeTransform=e;this._colorTransform=t}static canUseImageDecoder(e,t=-1){let i=0,a=null,s=readUint16(e,i);i+=2;if(65496!==s)throw new JpegError("SOI not found");s=readUint16(e,i);i+=2;A:for(;65497!==s;){switch(s){case 65472:case 65473:case 65474:a=e[i+7];break A;case 65535:255!==e[i]&&i--}i=skipData(e,i);s=readUint16(e,i);i+=2}return 4!==a&&(3!==a||0!==t)}parse(e,{dnlScanLines:t=null}={}){let i,a,s=0,r=null,n=null,g=0;const o=[],c=[],C=[];let h=readUint16(e,s);s+=2;if(65496!==h)throw new JpegError("SOI not found");h=readUint16(e,s);s+=2;A:for(;65497!==h;){let l,Q,E;switch(h){case 65504:case 65505:case 65506:case 65507:case 65508:case 65509:case 65510:case 65511:case 65512:case 65513:case 65514:case 65515:case 65516:case 65517:case 65518:case 65519:case 65534:const{appData:u,newOffset:d}=readDataBlock(e,s);s=d;65504===h&&74===u[0]&&70===u[1]&&73===u[2]&&70===u[3]&&0===u[4]&&(r={version:{major:u[5],minor:u[6]},densityUnits:u[7],xDensity:u[8]<<8|u[9],yDensity:u[10]<<8|u[11],thumbWidth:u[12],thumbHeight:u[13],thumbData:u.subarray(14,14+3*u[12]*u[13])});65518===h&&65===u[0]&&100===u[1]&&111===u[2]&&98===u[3]&&101===u[4]&&(n={version:u[5]<<8|u[6],flags0:u[7]<<8|u[8],flags1:u[9]<<8|u[10],transformCode:u[11]});break;case 65499:const f=readUint16(e,s);s+=2;const p=f+s-2;let m;for(;s>4==0)for(Q=0;Q<64;Q++){m=ei[Q];i[m]=e[s++]}else{if(t>>4!=1)throw new JpegError("DQT - invalid table spec");for(Q=0;Q<64;Q++){m=ei[Q];i[m]=readUint16(e,s);s+=2}}o[15&t]=i}break;case 65472:case 65473:case 65474:if(i)throw new JpegError("Only single frame JPEGs supported");s+=2;i={};i.extended=65473===h;i.progressive=65474===h;i.precision=e[s++];const y=readUint16(e,s);s+=2;i.scanLines=t||y;i.samplesPerLine=readUint16(e,s);s+=2;i.components=[];i.componentIds={};const w=e[s++];let D=0,b=0;for(l=0;l>4,r=15&e[s+1];D>4==0?C:c)[15&t]=buildHuffmanTable(i,r)}break;case 65501:s+=2;a=readUint16(e,s);s+=2;break;case 65498:const S=1==++g&&!t;s+=2;const k=e[s++],R=[];for(l=0;l>4];r.huffmanTableAC=c[15&n];R.push(r)}const N=e[s++],G=e[s++],x=e[s++];try{s+=decodeScan(e,s,i,R,a,N,G,x>>4,15&x,S)}catch(t){if(t instanceof DNLMarkerError){warn(`${t.message} -- attempting to re-parse the JPEG image.`);return this.parse(e,{dnlScanLines:t.scanLines})}if(t instanceof EOIMarkerError){warn(`${t.message} -- ignoring the rest of the image data.`);break A}throw t}break;case 65500:s+=4;break;case 65535:255!==e[s]&&s--;break;default:const U=findNextFileMarker(e,s-2,s-3);if(U?.invalid){warn("JpegImage.parse - unexpected data, current marker is: "+U.invalid);s=U.offset;break}if(!U||s>=e.length-1){warn("JpegImage.parse - reached the end of the image data without finding an EOI marker (0xFFD9).");break A}throw new JpegError("JpegImage.parse - unknown marker: "+h.toString(16))}h=readUint16(e,s);s+=2}if(!i)throw new JpegError("JpegImage.parse - no frame data found.");this.width=i.samplesPerLine;this.height=i.scanLines;this.jfif=r;this.adobe=n;this.components=[];for(const e of i.components){const t=o[e.quantizationId];t&&(e.quantizationTable=t);this.components.push({index:e.index,output:buildComponentData(0,e),scaleX:e.h/i.maxH,scaleY:e.v/i.maxV,blocksPerLine:e.blocksPerLine,blocksPerColumn:e.blocksPerColumn})}this.numComponents=this.components.length}_getLinearizedBlockData(e,t,i=!1){const a=this.width/e,s=this.height/t;let r,n,g,o,c,C,h,l,Q,E,u,d=0;const f=this.components.length,p=e*t*f,m=new Uint8ClampedArray(p),y=new Uint32Array(e),w=4294967288;let D;for(h=0;h>8)+b[Q+1];return m}get _isColorConversionNeeded(){return this.adobe?!!this.adobe.transformCode:3===this.numComponents?0!==this._colorTransform&&(82!==this.components[0].index||71!==this.components[1].index||66!==this.components[2].index):1===this._colorTransform}_convertYccToRgb(e){let t,i,a;for(let s=0,r=e.length;s4)throw new JpegError("Unsupported color mode");const r=this._getLinearizedBlockData(e,t,s);if(1===this.numComponents&&(i||a)){const e=r.length*(i?4:3),t=new Uint8ClampedArray(e);let a=0;if(i)!function grayToRGBA(e,t){if(FeatureTest.isLittleEndian)for(let i=0,a=e.length;i0&&(e=e.subarray(t));break}return e}decodeImage(e){if(this.eof)return this.buffer;e=this.#y(e||this.bytes);const t=new JpegImage(this.jpegOptions);t.parse(e);const i=t.getData({width:this.drawWidth,height:this.drawHeight,forceRGBA:this.forceRGBA,forceRGB:this.forceRGB,isSourcePDF:!0});this.buffer=i;this.bufferLength=i.length;this.eof=!0;return this.buffer}get canAsyncDecodeImageFromBuffer(){return this.stream.isAsync}async getTransferableImage(){if(!await JpegStream.canUseImageDecoder)return null;const e=this.jpegOptions;if(e.decodeTransform)return null;let t;try{const i=this.canAsyncDecodeImageFromBuffer&&await this.stream.asyncGetBytes()||this.bytes;if(!i)return null;const a=this.#y(i);if(!JpegImage.canUseImageDecoder(a,e.colorTransform))return null;t=new ImageDecoder({data:a,type:"image/jpeg",preferAnimation:!1});return(await t.decode()).image}catch(e){warn(`getTransferableImage - failed: "${e}".`);return null}finally{t?.close()}}}var Ii,ci=(Ii="undefined"!=typeof document?document.currentScript?.src:void 0,function(e={}){var t,i,a=e;new Promise(((e,a)=>{t=e;i=a}));a.decode=function(e,{numComponents:t=4,isIndexedColormap:i=!1,smaskInData:s=!1}){const r=e.length,n=a._malloc(r);a.HEAPU8.set(e,n);const g=a._jp2_decode(n,r,t>0?t:0,!!i,!!s);a._free(n);if(g){const{errorMessages:e}=a;if(e){delete a.errorMessages;return e}return"Unknown error"}const{imageData:o}=a;a.imageData=null;return o};var s,r=Object.assign({},a),n="./this.program",g="";"undefined"!=typeof document&&document.currentScript&&(g=document.currentScript.src);Ii&&(g=Ii);g=g.startsWith("blob:")?"":g.substr(0,g.replace(/[?#].*/,"").lastIndexOf("/")+1);var o,c,C,h,l,Q=a.print||console.log.bind(console),E=a.printErr||console.error.bind(console);Object.assign(a,r);r=null;a.arguments&&a.arguments;a.thisProgram&&(n=a.thisProgram);a.quit&&a.quit;a.wasmBinary&&(o=a.wasmBinary);function tryParseAsDataURI(e){if(isDataURI(e))return function intArrayFromBase64(e){for(var t=atob(e),i=new Uint8Array(t.length),a=0;ae.startsWith(D);function instantiateSync(e,t){var i,a=function getBinarySync(e){if(e==u&&o)return new Uint8Array(o);var t=tryParseAsDataURI(e);if(t)return t;if(s)return s(e);throw'sync fetching of the wasm failed: you can preload it to Module["wasmBinary"] manually, or emcc.py will do that for you when generating HTML (but not JS)'}(e);i=new WebAssembly.Module(a);return[new WebAssembly.Instance(i,t),i]}var callRuntimeCallbacks=e=>{for(;e.length>0;)e.shift()(a)};a.noExitRuntime;var b,growMemory=e=>{var t=(e-c.buffer.byteLength+65535)/65536;try{c.grow(t);updateMemoryViews();return 1}catch(e){}},F={},getEnvStrings=()=>{if(!getEnvStrings.strings){var e={USER:"web_user",LOGNAME:"web_user",PATH:"/",PWD:"/",HOME:"/home/web_user",LANG:("object"==typeof navigator&&navigator.languages&&navigator.languages[0]||"C").replace("-","_")+".UTF-8",_:n||"./this.program"};for(var t in F)void 0===F[t]?delete e[t]:e[t]=F[t];var i=[];for(var t in e)i.push(`${t}=${e[t]}`);getEnvStrings.strings=i}return getEnvStrings.strings},S=[null,[],[]],k="undefined"!=typeof TextDecoder?new TextDecoder("utf8"):void 0,UTF8ArrayToString=(e,t,i)=>{for(var a=t+i,s=t;e[s]&&!(s>=a);)++s;if(s-t>16&&e.buffer&&k)return k.decode(e.subarray(t,s));for(var r="";t>10,56320|1023&c)}}else r+=String.fromCharCode((31&n)<<6|g)}else r+=String.fromCharCode(n)}return r},printChar=(e,t)=>{var i=S[e];if(0===t||10===t){(1===e?Q:E)(UTF8ArrayToString(i,0));i.length=0}else i.push(t)},UTF8ToString=(e,t)=>e?UTF8ArrayToString(h,e,t):"",R={c:(e,t,i)=>h.copyWithin(e,t,t+i),g:function _copy_pixels_1(e,t){e>>=2;const i=a.imageData=new Uint8ClampedArray(t),s=a.HEAP32.subarray(e,e+t);i.set(s)},f:function _copy_pixels_3(e,t,i,s){e>>=2;t>>=2;i>>=2;const r=a.imageData=new Uint8ClampedArray(3*s),n=a.HEAP32.subarray(e,e+s),g=a.HEAP32.subarray(t,t+s),o=a.HEAP32.subarray(i,i+s);for(let e=0;e>=2;t>>=2;i>>=2;s>>=2;const n=a.imageData=new Uint8ClampedArray(4*r),g=a.HEAP32.subarray(e,e+r),o=a.HEAP32.subarray(t,t+r),c=a.HEAP32.subarray(i,i+r),C=a.HEAP32.subarray(s,s+r);for(let e=0;e{var t=h.length,i=2147483648;if((e>>>=0)>i)return!1;for(var a,s,r=1;r<=4;r*=2){var n=t*(1+.2/r);n=Math.min(n,e+100663296);var g=Math.min(i,(a=Math.max(e,n))+((s=65536)-a%s)%s);if(growMemory(g))return!0}return!1},l:(e,t)=>{var i=0;getEnvStrings().forEach(((a,s)=>{var r=t+i;l[e+4*s>>2]=r;((e,t)=>{for(var i=0;i{var i=getEnvStrings();l[e>>2]=i.length;var a=0;i.forEach((e=>a+=e.length+1));l[t>>2]=a;return 0},n:e=>52,j:function _fd_seek(e,t,i,a,s){return 70},b:(e,t,i,a)=>{for(var s=0,r=0;r>2],g=l[t+4>>2];t+=8;for(var o=0;o>2]=s;return 0},o:function _gray_to_rgba(e,t){e>>=2;const i=a.imageData=new Uint8ClampedArray(4*t),s=a.HEAP32.subarray(e,e+t);for(let e=0;e>=2;t>>=2;const s=a.imageData=new Uint8ClampedArray(4*i),r=a.HEAP32.subarray(e,e+i),n=a.HEAP32.subarray(t,t+i);for(let e=0;e>=2;t>>=2;i>>=2;const r=a.imageData=new Uint8ClampedArray(4*s),n=a.HEAP32.subarray(e,e+s),g=a.HEAP32.subarray(t,t+s),o=a.HEAP32.subarray(i,i+s);for(let e=0;e0)){!function preRun(){if(a.preRun){"function"==typeof a.preRun&&(a.preRun=[a.preRun]);for(;a.preRun.length;)e=a.preRun.shift(),d.unshift(e)}var e;callRuntimeCallbacks(d)}();if(!(m>0))if(a.setStatus){a.setStatus("Running...");setTimeout((function(){setTimeout((function(){a.setStatus("")}),1);doRun()}),1)}else doRun()}function doRun(){if(!b){b=!0;a.calledRun=!0;!function initRuntime(){callRuntimeCallbacks(f)}();t(a);a.onRuntimeInitialized&&a.onRuntimeInitialized();!function postRun(){if(a.postRun){"function"==typeof a.postRun&&(a.postRun=[a.postRun]);for(;a.postRun.length;)e=a.postRun.shift(),p.unshift(e)}var e;callRuntimeCallbacks(p)}()}}}if(a.preInit){"function"==typeof a.preInit&&(a.preInit=[a.preInit]);for(;a.preInit.length>0;)a.preInit.pop()()}run();return a});const Ci=ci;class JpxError extends gt{constructor(e){super(e,"JpxError")}}class JpxImage{static#w=null;static decode(e,t){t||={};this.#w||=Ci({warn});const i=this.#w.decode(e,t);if("string"==typeof i)throw new JpxError(i);return i}static cleanup(){this.#w=null}static parseImageProperties(e){let t=e.getByte();for(;t>=0;){const i=t;t=e.getByte();if(65361===(i<<8|t)){e.skip(4);const t=e.getInt32()>>>0,i=e.getInt32()>>>0,a=e.getInt32()>>>0,s=e.getInt32()>>>0;e.skip(16);return{width:t-a,height:i-s,bitsPerComponent:8,componentsCount:e.getUint16()}}}throw new JpxError("No size marker found in JPX stream")}}class JpxStream extends DecodeStream{constructor(e,t,i){super(t);this.stream=e;this.dict=e.dict;this.maybeLength=t;this.params=i}get bytes(){return shadow(this,"bytes",this.stream.getBytes(this.maybeLength))}ensureBuffer(e){}readBlock(e){this.decodeImage(null,e)}decodeImage(e,t){if(this.eof)return this.buffer;e||=this.bytes;this.buffer=JpxImage.decode(e,t);this.bufferLength=this.buffer.length;this.eof=!0;return this.buffer}get canAsyncDecodeImageFromBuffer(){return this.stream.isAsync}}class LZWStream extends DecodeStream{constructor(e,t,i){super(t);this.str=e;this.dict=e.dict;this.cachedData=0;this.bitsCached=0;const a=4096,s={earlyChange:i,codeLength:9,nextCode:258,dictionaryValues:new Uint8Array(a),dictionaryLengths:new Uint16Array(a),dictionaryPrevCodes:new Uint16Array(a),currentSequence:new Uint8Array(a),currentSequenceLength:0};for(let e=0;e<256;++e){s.dictionaryValues[e]=e;s.dictionaryLengths[e]=1}this.lzwState=s}readBits(e){let t=this.bitsCached,i=this.cachedData;for(;t>>t&(1<0;if(e<256){l[0]=e;Q=1}else{if(!(e>=258)){if(256===e){C=9;n=258;Q=0;continue}this.eof=!0;delete this.lzwState;break}if(e=0;t--){l[t]=g[i];i=c[i]}}else l[Q++]=l[0]}if(s){c[n]=h;o[n]=o[h]+1;g[n]=l[0];n++;C=n+r&n+r-1?C:0|Math.min(Math.log(n+r)/.6931471805599453+1,12)}h=e;E+=Q;if(a15))throw new FormatError(`Unsupported predictor: ${a}`);this.readBlock=2===a?this.readBlockTiff:this.readBlockPng;this.str=e;this.dict=e.dict;const s=this.colors=i.get("Colors")||1,r=this.bits=i.get("BPC","BitsPerComponent")||8,n=this.columns=i.get("Columns")||1;this.pixBytes=s*r+7>>3;this.rowBytes=n*s*r+7>>3;return this}readBlockTiff(){const e=this.rowBytes,t=this.bufferLength,i=this.ensureBuffer(t+e),a=this.bits,s=this.colors,r=this.str.getBytes(e);this.eof=!r.length;if(this.eof)return;let n,g=0,o=0,c=0,C=0,h=t;if(1===a&&1===s)for(n=0;n>1;e^=e>>2;e^=e>>4;g=(1&e)<<7;i[h++]=e}else if(8===a){for(n=0;n>8&255;i[h++]=255&e}}else{const e=new Uint8Array(s+1),h=(1<>c-a)&h;c-=a;o=o<=8){i[Q++]=o>>C-8&255;C-=8}}C>0&&(i[Q++]=(o<<8-C)+(g&(1<<8-C)-1))}this.bufferLength+=e}readBlockPng(){const e=this.rowBytes,t=this.pixBytes,i=this.str.getByte(),a=this.str.getBytes(e);this.eof=!a.length;if(this.eof)return;const s=this.bufferLength,r=this.ensureBuffer(s+e);let n=r.subarray(s-e,s);0===n.length&&(n=new Uint8Array(e));let g,o,c,C=s;switch(i){case 0:for(g=0;g>1)+a[g];for(;g>1)+a[g]&255;C++}break;case 4:for(g=0;g0){const e=this.str.getBytes(a);t.set(e,i);i+=a}}else{a=257-a;const s=e[1];t=this.ensureBuffer(i+a+1);for(let e=0;e>")&&this.buf1!==yt;){if(!(this.buf1 instanceof Name)){info("Malformed dictionary: key must be a name object");this.shift();continue}const t=this.buf1.name;this.shift();if(this.buf1===yt)break;a.set(t,this.getObj(e))}if(this.buf1===yt){if(this.recoveryMode)return a;throw new ParserEOFException("End of file inside dictionary.")}if(isCmd(this.buf2,"stream"))return this.allowStreams?this.makeStream(a,e):a;this.shift();return a;default:return t}if(Number.isInteger(t)){if(Number.isInteger(this.buf1)&&isCmd(this.buf2,"R")){const e=Ref.get(t,this.buf1);this.shift();this.shift();return e}return t}return"string"==typeof t&&e?e.decryptString(t):t}findDefaultInlineStreamEnd(e){const{knownCommands:t}=this.lexer,i=e.pos;let a,s,r=0;for(;-1!==(a=e.getByte());)if(0===r)r=69===a?1:0;else if(1===r)r=73===a?2:0;else if(32===a||10===a||13===a){s=e.pos;const i=e.peekBytes(15),n=i.length;if(0===n)break;for(let e=0;e127))){r=0;break}}if(2!==r)continue;if(!t){warn("findDefaultInlineStreamEnd - `lexer.knownCommands` is undefined.");continue}const g=new Lexer(new Stream(i.slice()),t);g._hexStringWarn=()=>{};let o=0;for(;;){const e=g.getObj();if(e===yt){r=0;break}if(e instanceof Cmd){const i=t[e.cmd];if(!i){r=0;break}if(i.variableArgs?o<=i.numArgs:o===i.numArgs)break;o=0}else o++}if(2===r)break}else r=0;if(-1===a){warn("findDefaultInlineStreamEnd: Reached the end of the stream without finding a valid EI marker");if(s){warn('... trying to recover by using the last "EI" occurrence.');e.skip(-(e.pos-s))}}let n=4;e.skip(-n);a=e.peekByte();e.skip(n);isWhiteSpace(a)||n--;return e.pos-n-i}findDCTDecodeInlineStreamEnd(e){const t=e.pos;let i,a,s=!1;for(;-1!==(i=e.getByte());)if(255===i){switch(e.getByte()){case 0:break;case 255:e.skip(-1);break;case 217:s=!0;break;case 192:case 193:case 194:case 195:case 197:case 198:case 199:case 201:case 202:case 203:case 205:case 206:case 207:case 196:case 204:case 218:case 219:case 220:case 221:case 222:case 223:case 224:case 225:case 226:case 227:case 228:case 229:case 230:case 231:case 232:case 233:case 234:case 235:case 236:case 237:case 238:case 239:case 254:a=e.getUint16();a>2?e.skip(a-2):e.skip(-2)}if(s)break}const r=e.pos-t;if(-1===i){warn("Inline DCTDecode image stream: EOI marker not found, searching for /EI/ instead.");e.skip(-r);return this.findDefaultInlineStreamEnd(e)}this.inlineStreamSkipEI(e);return r}findASCII85DecodeInlineStreamEnd(e){const t=e.pos;let i;for(;-1!==(i=e.getByte());)if(126===i){const t=e.pos;i=e.peekByte();for(;isWhiteSpace(i);){e.skip();i=e.peekByte()}if(62===i){e.skip();break}if(e.pos>t){const t=e.peekBytes(2);if(69===t[0]&&73===t[1])break}}const a=e.pos-t;if(-1===i){warn("Inline ASCII85Decode image stream: EOD marker not found, searching for /EI/ instead.");e.skip(-a);return this.findDefaultInlineStreamEnd(e)}this.inlineStreamSkipEI(e);return a}findASCIIHexDecodeInlineStreamEnd(e){const t=e.pos;let i;for(;-1!==(i=e.getByte())&&62!==i;);const a=e.pos-t;if(-1===i){warn("Inline ASCIIHexDecode image stream: EOD marker not found, searching for /EI/ instead.");e.skip(-a);return this.findDefaultInlineStreamEnd(e)}this.inlineStreamSkipEI(e);return a}inlineStreamSkipEI(e){let t,i=0;for(;-1!==(t=e.getByte());)if(0===i)i=69===t?1:0;else if(1===i)i=73===t?2:0;else if(2===i)break}makeInlineImage(e){const t=this.lexer,i=t.stream,a=Object.create(null);let s;for(;!isCmd(this.buf1,"ID")&&this.buf1!==yt;){if(!(this.buf1 instanceof Name))throw new FormatError("Dictionary key must be a name object");const t=this.buf1.name;this.shift();if(this.buf1===yt)break;a[t]=this.getObj(e)}-1!==t.beginInlineImagePos&&(s=i.pos-t.beginInlineImagePos);const r=this.xref.fetchIfRef(a.F||a.Filter);let n;if(r instanceof Name)n=r.name;else if(Array.isArray(r)){const e=this.xref.fetchIfRef(r[0]);e instanceof Name&&(n=e.name)}const g=i.pos;let o,c;switch(n){case"DCT":case"DCTDecode":o=this.findDCTDecodeInlineStreamEnd(i);break;case"A85":case"ASCII85Decode":o=this.findASCII85DecodeInlineStreamEnd(i);break;case"AHx":case"ASCIIHexDecode":o=this.findASCIIHexDecodeInlineStreamEnd(i);break;default:o=this.findDefaultInlineStreamEnd(i)}if(o<1e3&&s>0){const e=i.pos;i.pos=t.beginInlineImagePos;c=function getInlineImageCacheKey(e){const t=[],i=e.length;let a=0;for(;a=a){let a=!1;for(const e of s){const t=e.length;let s=0;for(;s=r){a=!0;break}if(s>=t){if(isWhiteSpace(n[o+g+s])){info(`Found "${bytesToString([...i,...e])}" when searching for endstream command.`);a=!0}break}}if(a){t.pos+=o;return t.pos-e}}o++}t.pos+=g}return-1}makeStream(e,t){const i=this.lexer;let a=i.stream;i.skipToNextLine();const s=a.pos-1;let r=e.get("Length");if(!Number.isInteger(r)){info(`Bad length "${r&&r.toString()}" in stream.`);r=0}a.pos=s+r;i.nextChar();if(this.tryShift()&&isCmd(this.buf2,"endstream"))this.shift();else{r=this.#D(s);if(r<0)throw new FormatError("Missing endstream command.");i.nextChar();this.shift();this.shift()}this.shift();a=a.makeSubStream(s,r,e);t&&(a=t.createStream(a,r));a=this.filter(a,e,r);a.dict=e;return a}filter(e,t,i){let a=t.get("F","Filter"),s=t.get("DP","DecodeParms");if(a instanceof Name){Array.isArray(s)&&warn("/DecodeParms should not be an Array, when /Filter is a Name.");return this.makeFilter(e,a.name,i,s)}let r=i;if(Array.isArray(a)){const t=a,i=s;for(let n=0,g=t.length;n=48&&e<=57?15&e:e>=65&&e<=70||e>=97&&e<=102?9+(15&e):-1}class Lexer{constructor(e,t=null){this.stream=e;this.nextChar();this.strBuf=[];this.knownCommands=t;this._hexStringNumWarn=0;this.beginInlineImagePos=-1}nextChar(){return this.currentChar=this.stream.getByte()}peekChar(){return this.stream.peekByte()}getNumber(){let e=this.currentChar,t=!1,i=0,a=1;if(45===e){a=-1;e=this.nextChar();45===e&&(e=this.nextChar())}else 43===e&&(e=this.nextChar());if(10===e||13===e)do{e=this.nextChar()}while(10===e||13===e);if(46===e){i=10;e=this.nextChar()}if(e<48||e>57){const t=`Invalid number: ${String.fromCharCode(e)} (charCode ${e})`;if(isWhiteSpace(e)||-1===e){info(`Lexer.getNumber - "${t}".`);return 0}throw new FormatError(t)}let s=e-48,r=0,n=1;for(;(e=this.nextChar())>=0;)if(e>=48&&e<=57){const a=e-48;if(t)r=10*r+a;else{0!==i&&(i*=10);s=10*s+a}}else if(46===e){if(0!==i)break;i=1}else if(45===e)warn("Badly formatted number: minus sign in the middle");else{if(69!==e&&101!==e)break;e=this.peekChar();if(43===e||45===e){n=45===e?-1:1;this.nextChar()}else if(e<48||e>57)break;t=!0}0!==i&&(s/=i);t&&(s*=10**(n*r));return a*s}getString(){let e=1,t=!1;const i=this.strBuf;i.length=0;let a=this.nextChar();for(;;){let s=!1;switch(0|a){case-1:warn("Unterminated string");t=!0;break;case 40:++e;i.push("(");break;case 41:if(0==--e){this.nextChar();t=!0}else i.push(")");break;case 92:a=this.nextChar();switch(a){case-1:warn("Unterminated string");t=!0;break;case 110:i.push("\n");break;case 114:i.push("\r");break;case 116:i.push("\t");break;case 98:i.push("\b");break;case 102:i.push("\f");break;case 92:case 40:case 41:i.push(String.fromCharCode(a));break;case 48:case 49:case 50:case 51:case 52:case 53:case 54:case 55:let e=15&a;a=this.nextChar();s=!0;if(a>=48&&a<=55){e=(e<<3)+(15&a);a=this.nextChar();if(a>=48&&a<=55){s=!1;e=(e<<3)+(15&a)}}i.push(String.fromCharCode(e));break;case 13:10===this.peekChar()&&this.nextChar();break;case 10:break;default:i.push(String.fromCharCode(a))}break;default:i.push(String.fromCharCode(a))}if(t)break;s||(a=this.nextChar())}return i.join("")}getName(){let e,t;const i=this.strBuf;i.length=0;for(;(e=this.nextChar())>=0&&!hi[e];)if(35===e){e=this.nextChar();if(hi[e]){warn("Lexer_getName: NUMBER SIGN (#) should be followed by a hexadecimal number.");i.push("#");break}const a=toHexDigit(e);if(-1!==a){t=e;e=this.nextChar();const s=toHexDigit(e);if(-1===s){warn(`Lexer_getName: Illegal digit (${String.fromCharCode(e)}) in hexadecimal number.`);i.push("#",String.fromCharCode(t));if(hi[e])break;i.push(String.fromCharCode(e));continue}i.push(String.fromCharCode(a<<4|s))}else i.push("#",String.fromCharCode(e))}else i.push(String.fromCharCode(e));i.length>127&&warn(`Name token is longer than allowed by the spec: ${i.length}`);return Name.get(i.join(""))}_hexStringWarn(e){5!=this._hexStringNumWarn++?this._hexStringNumWarn>5||warn(`getHexString - ignoring invalid character: ${e}`):warn("getHexString - ignoring additional invalid characters.")}getHexString(){const e=this.strBuf;e.length=0;let t=this.currentChar,i=-1,a=-1;this._hexStringNumWarn=0;for(;;){if(t<0){warn("Unterminated hex string");break}if(62===t){this.nextChar();break}if(1!==hi[t]){a=toHexDigit(t);if(-1===a)this._hexStringWarn(t);else if(-1===i)i=a;else{e.push(String.fromCharCode(i<<4|a));i=-1}t=this.nextChar()}else t=this.nextChar()}-1!==i&&e.push(String.fromCharCode(i<<4));return e.join("")}getObj(){let e=!1,t=this.currentChar;for(;;){if(t<0)return yt;if(e)10!==t&&13!==t||(e=!1);else if(37===t)e=!0;else if(1!==hi[t])break;t=this.nextChar()}switch(0|t){case 48:case 49:case 50:case 51:case 52:case 53:case 54:case 55:case 56:case 57:case 43:case 45:case 46:return this.getNumber();case 40:return this.getString();case 47:return this.getName();case 91:this.nextChar();return Cmd.get("[");case 93:this.nextChar();return Cmd.get("]");case 60:t=this.nextChar();if(60===t){this.nextChar();return Cmd.get("<<")}return this.getHexString();case 62:t=this.nextChar();if(62===t){this.nextChar();return Cmd.get(">>")}return Cmd.get(">");case 123:this.nextChar();return Cmd.get("{");case 125:this.nextChar();return Cmd.get("}");case 41:this.nextChar();throw new FormatError(`Illegal character: ${t}`)}let i=String.fromCharCode(t);if(t<32||t>127){const e=this.peekChar();if(e>=32&&e<=127){this.nextChar();return Cmd.get(i)}}const a=this.knownCommands;let s=void 0!==a?.[i];for(;(t=this.nextChar())>=0&&!hi[t];){const e=i+String.fromCharCode(t);if(s&&void 0===a[e])break;if(128===i.length)throw new FormatError(`Command token too long: ${i.length}`);i=e;s=void 0!==a?.[i]}if("true"===i)return!0;if("false"===i)return!1;if("null"===i)return null;"BI"===i&&(this.beginInlineImagePos=this.stream.pos);return Cmd.get(i)}skipToNextLine(){let e=this.currentChar;for(;e>=0;){if(13===e){e=this.nextChar();10===e&&this.nextChar();break}if(10===e){this.nextChar();break}e=this.nextChar()}}}class Linearization{static create(e){function getInt(e,t,i=!1){const a=e.get(t);if(Number.isInteger(a)&&(i?a>=0:a>0))return a;throw new Error(`The "${t}" parameter in the linearization dictionary is invalid.`)}const t=new Parser({lexer:new Lexer(e),xref:null}),i=t.getObj(),a=t.getObj(),s=t.getObj(),r=t.getObj();let n,g;if(!(Number.isInteger(i)&&Number.isInteger(a)&&isCmd(s,"obj")&&r instanceof Dict&&"number"==typeof(n=r.get("Linearized"))&&n>0))return null;if((g=getInt(r,"L"))!==e.length)throw new Error('The "L" parameter in the linearization dictionary does not equal the stream length.');return{length:g,hints:function getHints(e){const t=e.get("H");let i;if(Array.isArray(t)&&(2===(i=t.length)||4===i)){for(let e=0;e0))throw new Error(`Hint (${e}) in the linearization dictionary is invalid.`)}return t}throw new Error("Hint array in the linearization dictionary is invalid.")}(r),objectNumberFirst:getInt(r,"O"),endFirst:getInt(r,"E"),numPages:getInt(r,"N"),mainXRefEntriesOffset:getInt(r,"T"),pageFirst:r.has("P")?getInt(r,"P",!0):0}}}const li=["Adobe-GB1-UCS2","Adobe-CNS1-UCS2","Adobe-Japan1-UCS2","Adobe-Korea1-UCS2","78-EUC-H","78-EUC-V","78-H","78-RKSJ-H","78-RKSJ-V","78-V","78ms-RKSJ-H","78ms-RKSJ-V","83pv-RKSJ-H","90ms-RKSJ-H","90ms-RKSJ-V","90msp-RKSJ-H","90msp-RKSJ-V","90pv-RKSJ-H","90pv-RKSJ-V","Add-H","Add-RKSJ-H","Add-RKSJ-V","Add-V","Adobe-CNS1-0","Adobe-CNS1-1","Adobe-CNS1-2","Adobe-CNS1-3","Adobe-CNS1-4","Adobe-CNS1-5","Adobe-CNS1-6","Adobe-GB1-0","Adobe-GB1-1","Adobe-GB1-2","Adobe-GB1-3","Adobe-GB1-4","Adobe-GB1-5","Adobe-Japan1-0","Adobe-Japan1-1","Adobe-Japan1-2","Adobe-Japan1-3","Adobe-Japan1-4","Adobe-Japan1-5","Adobe-Japan1-6","Adobe-Korea1-0","Adobe-Korea1-1","Adobe-Korea1-2","B5-H","B5-V","B5pc-H","B5pc-V","CNS-EUC-H","CNS-EUC-V","CNS1-H","CNS1-V","CNS2-H","CNS2-V","ETHK-B5-H","ETHK-B5-V","ETen-B5-H","ETen-B5-V","ETenms-B5-H","ETenms-B5-V","EUC-H","EUC-V","Ext-H","Ext-RKSJ-H","Ext-RKSJ-V","Ext-V","GB-EUC-H","GB-EUC-V","GB-H","GB-V","GBK-EUC-H","GBK-EUC-V","GBK2K-H","GBK2K-V","GBKp-EUC-H","GBKp-EUC-V","GBT-EUC-H","GBT-EUC-V","GBT-H","GBT-V","GBTpc-EUC-H","GBTpc-EUC-V","GBpc-EUC-H","GBpc-EUC-V","H","HKdla-B5-H","HKdla-B5-V","HKdlb-B5-H","HKdlb-B5-V","HKgccs-B5-H","HKgccs-B5-V","HKm314-B5-H","HKm314-B5-V","HKm471-B5-H","HKm471-B5-V","HKscs-B5-H","HKscs-B5-V","Hankaku","Hiragana","KSC-EUC-H","KSC-EUC-V","KSC-H","KSC-Johab-H","KSC-Johab-V","KSC-V","KSCms-UHC-H","KSCms-UHC-HW-H","KSCms-UHC-HW-V","KSCms-UHC-V","KSCpc-EUC-H","KSCpc-EUC-V","Katakana","NWP-H","NWP-V","RKSJ-H","RKSJ-V","Roman","UniCNS-UCS2-H","UniCNS-UCS2-V","UniCNS-UTF16-H","UniCNS-UTF16-V","UniCNS-UTF32-H","UniCNS-UTF32-V","UniCNS-UTF8-H","UniCNS-UTF8-V","UniGB-UCS2-H","UniGB-UCS2-V","UniGB-UTF16-H","UniGB-UTF16-V","UniGB-UTF32-H","UniGB-UTF32-V","UniGB-UTF8-H","UniGB-UTF8-V","UniJIS-UCS2-H","UniJIS-UCS2-HW-H","UniJIS-UCS2-HW-V","UniJIS-UCS2-V","UniJIS-UTF16-H","UniJIS-UTF16-V","UniJIS-UTF32-H","UniJIS-UTF32-V","UniJIS-UTF8-H","UniJIS-UTF8-V","UniJIS2004-UTF16-H","UniJIS2004-UTF16-V","UniJIS2004-UTF32-H","UniJIS2004-UTF32-V","UniJIS2004-UTF8-H","UniJIS2004-UTF8-V","UniJISPro-UCS2-HW-V","UniJISPro-UCS2-V","UniJISPro-UTF8-V","UniJISX0213-UTF32-H","UniJISX0213-UTF32-V","UniJISX02132004-UTF32-H","UniJISX02132004-UTF32-V","UniKS-UCS2-H","UniKS-UCS2-V","UniKS-UTF16-H","UniKS-UTF16-V","UniKS-UTF32-H","UniKS-UTF32-V","UniKS-UTF8-H","UniKS-UTF8-V","V","WP-Symbol"],Bi=2**24-1;class CMap{constructor(e=!1){this.codespaceRanges=[[],[],[],[]];this.numCodespaceRanges=0;this._map=[];this.name="";this.vertical=!1;this.useCMap=null;this.builtInCMap=e}addCodespaceRange(e,t,i){this.codespaceRanges[e-1].push(t,i);this.numCodespaceRanges++}mapCidRange(e,t,i){if(t-e>Bi)throw new Error("mapCidRange - ignoring data above MAX_MAP_RANGE.");for(;e<=t;)this._map[e++]=i++}mapBfRange(e,t,i){if(t-e>Bi)throw new Error("mapBfRange - ignoring data above MAX_MAP_RANGE.");const a=i.length-1;for(;e<=t;){this._map[e++]=i;const t=i.charCodeAt(a)+1;t>255?i=i.substring(0,a-1)+String.fromCharCode(i.charCodeAt(a-1)+1)+"\0":i=i.substring(0,a)+String.fromCharCode(t)}}mapBfRangeToArray(e,t,i){if(t-e>Bi)throw new Error("mapBfRangeToArray - ignoring data above MAX_MAP_RANGE.");const a=i.length;let s=0;for(;e<=t&&s>>0;const n=s[r];for(let e=0,t=n.length;e=t&&a<=s){i.charcode=a;i.length=r+1;return}}}i.charcode=0;i.length=1}getCharCodeLength(e){const t=this.codespaceRanges;for(let i=0,a=t.length;i=s&&e<=r)return i+1}}return 1}get length(){return this._map.length}get isIdentityCMap(){if("Identity-H"!==this.name&&"Identity-V"!==this.name)return!1;if(65536!==this._map.length)return!1;for(let e=0;e<65536;e++)if(this._map[e]!==e)return!1;return!0}}class IdentityCMap extends CMap{constructor(e,t){super();this.vertical=e;this.addCodespaceRange(t,0,65535)}mapCidRange(e,t,i){unreachable("should not call mapCidRange")}mapBfRange(e,t,i){unreachable("should not call mapBfRange")}mapBfRangeToArray(e,t,i){unreachable("should not call mapBfRangeToArray")}mapOne(e,t){unreachable("should not call mapCidOne")}lookup(e){return Number.isInteger(e)&&e<=65535?e:void 0}contains(e){return Number.isInteger(e)&&e<=65535}forEach(e){for(let t=0;t<=65535;t++)e(t,t)}charCodeOf(e){return Number.isInteger(e)&&e<=65535?e:-1}getMap(){const e=new Array(65536);for(let t=0;t<=65535;t++)e[t]=t;return e}get length(){return 65536}get isIdentityCMap(){unreachable("should not access .isIdentityCMap")}}function strToInt(e){let t=0;for(let i=0;i>>0}function expectString(e){if("string"!=typeof e)throw new FormatError("Malformed CMap: expected string.")}function expectInt(e){if(!Number.isInteger(e))throw new FormatError("Malformed CMap: expected int.")}function parseBfChar(e,t){for(;;){let i=t.getObj();if(i===yt)break;if(isCmd(i,"endbfchar"))return;expectString(i);const a=strToInt(i);i=t.getObj();expectString(i);const s=i;e.mapOne(a,s)}}function parseBfRange(e,t){for(;;){let i=t.getObj();if(i===yt)break;if(isCmd(i,"endbfrange"))return;expectString(i);const a=strToInt(i);i=t.getObj();expectString(i);const s=strToInt(i);i=t.getObj();if(Number.isInteger(i)||"string"==typeof i){const t=Number.isInteger(i)?String.fromCharCode(i):i;e.mapBfRange(a,s,t)}else{if(!isCmd(i,"["))break;{i=t.getObj();const r=[];for(;!isCmd(i,"]")&&i!==yt;){r.push(i);i=t.getObj()}e.mapBfRangeToArray(a,s,r)}}}throw new FormatError("Invalid bf range.")}function parseCidChar(e,t){for(;;){let i=t.getObj();if(i===yt)break;if(isCmd(i,"endcidchar"))return;expectString(i);const a=strToInt(i);i=t.getObj();expectInt(i);const s=i;e.mapOne(a,s)}}function parseCidRange(e,t){for(;;){let i=t.getObj();if(i===yt)break;if(isCmd(i,"endcidrange"))return;expectString(i);const a=strToInt(i);i=t.getObj();expectString(i);const s=strToInt(i);i=t.getObj();expectInt(i);const r=i;e.mapCidRange(a,s,r)}}function parseCodespaceRange(e,t){for(;;){let i=t.getObj();if(i===yt)break;if(isCmd(i,"endcodespacerange"))return;if("string"!=typeof i)break;const a=strToInt(i);i=t.getObj();if("string"!=typeof i)break;const s=strToInt(i);e.addCodespaceRange(i.length,a,s)}throw new FormatError("Invalid codespace range.")}function parseWMode(e,t){const i=t.getObj();Number.isInteger(i)&&(e.vertical=!!i)}function parseCMapName(e,t){const i=t.getObj();i instanceof Name&&(e.name=i.name)}async function parseCMap(e,t,i,a){let s,r;A:for(;;)try{const i=t.getObj();if(i===yt)break;if(i instanceof Name){"WMode"===i.name?parseWMode(e,t):"CMapName"===i.name&&parseCMapName(e,t);s=i}else if(i instanceof Cmd)switch(i.cmd){case"endcmap":break A;case"usecmap":s instanceof Name&&(r=s.name);break;case"begincodespacerange":parseCodespaceRange(e,t);break;case"beginbfchar":parseBfChar(e,t);break;case"begincidchar":parseCidChar(e,t);break;case"beginbfrange":parseBfRange(e,t);break;case"begincidrange":parseCidRange(e,t)}}catch(e){if(e instanceof MissingDataException)throw e;warn("Invalid cMap data: "+e);continue}!a&&r&&(a=r);return a?extendCMap(e,i,a):e}async function extendCMap(e,t,i){e.useCMap=await createBuiltInCMap(i,t);if(0===e.numCodespaceRanges){const t=e.useCMap.codespaceRanges;for(let i=0;iextendCMap(s,t,e)));const r=new Lexer(new Stream(i));return parseCMap(s,r,t,null)}class CMapFactory{static async create({encoding:e,fetchBuiltInCMap:t,useCMap:i}){if(e instanceof Name)return createBuiltInCMap(e.name,t);if(e instanceof BaseStream){const a=await parseCMap(new CMap,new Lexer(e),t,i);return a.isIdentityCMap?createBuiltInCMap(a.name,t):a}throw new Error("Encoding required.")}}const Qi=[".notdef","space","exclam","quotedbl","numbersign","dollar","percent","ampersand","quoteright","parenleft","parenright","asterisk","plus","comma","hyphen","period","slash","zero","one","two","three","four","five","six","seven","eight","nine","colon","semicolon","less","equal","greater","question","at","A","B","C","D","E","F","G","H","I","J","K","L","M","N","O","P","Q","R","S","T","U","V","W","X","Y","Z","bracketleft","backslash","bracketright","asciicircum","underscore","quoteleft","a","b","c","d","e","f","g","h","i","j","k","l","m","n","o","p","q","r","s","t","u","v","w","x","y","z","braceleft","bar","braceright","asciitilde","exclamdown","cent","sterling","fraction","yen","florin","section","currency","quotesingle","quotedblleft","guillemotleft","guilsinglleft","guilsinglright","fi","fl","endash","dagger","daggerdbl","periodcentered","paragraph","bullet","quotesinglbase","quotedblbase","quotedblright","guillemotright","ellipsis","perthousand","questiondown","grave","acute","circumflex","tilde","macron","breve","dotaccent","dieresis","ring","cedilla","hungarumlaut","ogonek","caron","emdash","AE","ordfeminine","Lslash","Oslash","OE","ordmasculine","ae","dotlessi","lslash","oslash","oe","germandbls","onesuperior","logicalnot","mu","trademark","Eth","onehalf","plusminus","Thorn","onequarter","divide","brokenbar","degree","thorn","threequarters","twosuperior","registered","minus","eth","multiply","threesuperior","copyright","Aacute","Acircumflex","Adieresis","Agrave","Aring","Atilde","Ccedilla","Eacute","Ecircumflex","Edieresis","Egrave","Iacute","Icircumflex","Idieresis","Igrave","Ntilde","Oacute","Ocircumflex","Odieresis","Ograve","Otilde","Scaron","Uacute","Ucircumflex","Udieresis","Ugrave","Yacute","Ydieresis","Zcaron","aacute","acircumflex","adieresis","agrave","aring","atilde","ccedilla","eacute","ecircumflex","edieresis","egrave","iacute","icircumflex","idieresis","igrave","ntilde","oacute","ocircumflex","odieresis","ograve","otilde","scaron","uacute","ucircumflex","udieresis","ugrave","yacute","ydieresis","zcaron"],Ei=[".notdef","space","exclamsmall","Hungarumlautsmall","dollaroldstyle","dollarsuperior","ampersandsmall","Acutesmall","parenleftsuperior","parenrightsuperior","twodotenleader","onedotenleader","comma","hyphen","period","fraction","zerooldstyle","oneoldstyle","twooldstyle","threeoldstyle","fouroldstyle","fiveoldstyle","sixoldstyle","sevenoldstyle","eightoldstyle","nineoldstyle","colon","semicolon","commasuperior","threequartersemdash","periodsuperior","questionsmall","asuperior","bsuperior","centsuperior","dsuperior","esuperior","isuperior","lsuperior","msuperior","nsuperior","osuperior","rsuperior","ssuperior","tsuperior","ff","fi","fl","ffi","ffl","parenleftinferior","parenrightinferior","Circumflexsmall","hyphensuperior","Gravesmall","Asmall","Bsmall","Csmall","Dsmall","Esmall","Fsmall","Gsmall","Hsmall","Ismall","Jsmall","Ksmall","Lsmall","Msmall","Nsmall","Osmall","Psmall","Qsmall","Rsmall","Ssmall","Tsmall","Usmall","Vsmall","Wsmall","Xsmall","Ysmall","Zsmall","colonmonetary","onefitted","rupiah","Tildesmall","exclamdownsmall","centoldstyle","Lslashsmall","Scaronsmall","Zcaronsmall","Dieresissmall","Brevesmall","Caronsmall","Dotaccentsmall","Macronsmall","figuredash","hypheninferior","Ogoneksmall","Ringsmall","Cedillasmall","onequarter","onehalf","threequarters","questiondownsmall","oneeighth","threeeighths","fiveeighths","seveneighths","onethird","twothirds","zerosuperior","onesuperior","twosuperior","threesuperior","foursuperior","fivesuperior","sixsuperior","sevensuperior","eightsuperior","ninesuperior","zeroinferior","oneinferior","twoinferior","threeinferior","fourinferior","fiveinferior","sixinferior","seveninferior","eightinferior","nineinferior","centinferior","dollarinferior","periodinferior","commainferior","Agravesmall","Aacutesmall","Acircumflexsmall","Atildesmall","Adieresissmall","Aringsmall","AEsmall","Ccedillasmall","Egravesmall","Eacutesmall","Ecircumflexsmall","Edieresissmall","Igravesmall","Iacutesmall","Icircumflexsmall","Idieresissmall","Ethsmall","Ntildesmall","Ogravesmall","Oacutesmall","Ocircumflexsmall","Otildesmall","Odieresissmall","OEsmall","Oslashsmall","Ugravesmall","Uacutesmall","Ucircumflexsmall","Udieresissmall","Yacutesmall","Thornsmall","Ydieresissmall"],ui=[".notdef","space","dollaroldstyle","dollarsuperior","parenleftsuperior","parenrightsuperior","twodotenleader","onedotenleader","comma","hyphen","period","fraction","zerooldstyle","oneoldstyle","twooldstyle","threeoldstyle","fouroldstyle","fiveoldstyle","sixoldstyle","sevenoldstyle","eightoldstyle","nineoldstyle","colon","semicolon","commasuperior","threequartersemdash","periodsuperior","asuperior","bsuperior","centsuperior","dsuperior","esuperior","isuperior","lsuperior","msuperior","nsuperior","osuperior","rsuperior","ssuperior","tsuperior","ff","fi","fl","ffi","ffl","parenleftinferior","parenrightinferior","hyphensuperior","colonmonetary","onefitted","rupiah","centoldstyle","figuredash","hypheninferior","onequarter","onehalf","threequarters","oneeighth","threeeighths","fiveeighths","seveneighths","onethird","twothirds","zerosuperior","onesuperior","twosuperior","threesuperior","foursuperior","fivesuperior","sixsuperior","sevensuperior","eightsuperior","ninesuperior","zeroinferior","oneinferior","twoinferior","threeinferior","fourinferior","fiveinferior","sixinferior","seveninferior","eightinferior","nineinferior","centinferior","dollarinferior","periodinferior","commainferior"],di=["","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","space","exclamsmall","Hungarumlautsmall","","dollaroldstyle","dollarsuperior","ampersandsmall","Acutesmall","parenleftsuperior","parenrightsuperior","twodotenleader","onedotenleader","comma","hyphen","period","fraction","zerooldstyle","oneoldstyle","twooldstyle","threeoldstyle","fouroldstyle","fiveoldstyle","sixoldstyle","sevenoldstyle","eightoldstyle","nineoldstyle","colon","semicolon","commasuperior","threequartersemdash","periodsuperior","questionsmall","","asuperior","bsuperior","centsuperior","dsuperior","esuperior","","","","isuperior","","","lsuperior","msuperior","nsuperior","osuperior","","","rsuperior","ssuperior","tsuperior","","ff","fi","fl","ffi","ffl","parenleftinferior","","parenrightinferior","Circumflexsmall","hyphensuperior","Gravesmall","Asmall","Bsmall","Csmall","Dsmall","Esmall","Fsmall","Gsmall","Hsmall","Ismall","Jsmall","Ksmall","Lsmall","Msmall","Nsmall","Osmall","Psmall","Qsmall","Rsmall","Ssmall","Tsmall","Usmall","Vsmall","Wsmall","Xsmall","Ysmall","Zsmall","colonmonetary","onefitted","rupiah","Tildesmall","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","exclamdownsmall","centoldstyle","Lslashsmall","","","Scaronsmall","Zcaronsmall","Dieresissmall","Brevesmall","Caronsmall","","Dotaccentsmall","","","Macronsmall","","","figuredash","hypheninferior","","","Ogoneksmall","Ringsmall","Cedillasmall","","","","onequarter","onehalf","threequarters","questiondownsmall","oneeighth","threeeighths","fiveeighths","seveneighths","onethird","twothirds","","","zerosuperior","onesuperior","twosuperior","threesuperior","foursuperior","fivesuperior","sixsuperior","sevensuperior","eightsuperior","ninesuperior","zeroinferior","oneinferior","twoinferior","threeinferior","fourinferior","fiveinferior","sixinferior","seveninferior","eightinferior","nineinferior","centinferior","dollarinferior","periodinferior","commainferior","Agravesmall","Aacutesmall","Acircumflexsmall","Atildesmall","Adieresissmall","Aringsmall","AEsmall","Ccedillasmall","Egravesmall","Eacutesmall","Ecircumflexsmall","Edieresissmall","Igravesmall","Iacutesmall","Icircumflexsmall","Idieresissmall","Ethsmall","Ntildesmall","Ogravesmall","Oacutesmall","Ocircumflexsmall","Otildesmall","Odieresissmall","OEsmall","Oslashsmall","Ugravesmall","Uacutesmall","Ucircumflexsmall","Udieresissmall","Yacutesmall","Thornsmall","Ydieresissmall"],fi=["","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","space","exclamsmall","Hungarumlautsmall","centoldstyle","dollaroldstyle","dollarsuperior","ampersandsmall","Acutesmall","parenleftsuperior","parenrightsuperior","twodotenleader","onedotenleader","comma","hyphen","period","fraction","zerooldstyle","oneoldstyle","twooldstyle","threeoldstyle","fouroldstyle","fiveoldstyle","sixoldstyle","sevenoldstyle","eightoldstyle","nineoldstyle","colon","semicolon","","threequartersemdash","","questionsmall","","","","","Ethsmall","","","onequarter","onehalf","threequarters","oneeighth","threeeighths","fiveeighths","seveneighths","onethird","twothirds","","","","","","","ff","fi","fl","ffi","ffl","parenleftinferior","","parenrightinferior","Circumflexsmall","hypheninferior","Gravesmall","Asmall","Bsmall","Csmall","Dsmall","Esmall","Fsmall","Gsmall","Hsmall","Ismall","Jsmall","Ksmall","Lsmall","Msmall","Nsmall","Osmall","Psmall","Qsmall","Rsmall","Ssmall","Tsmall","Usmall","Vsmall","Wsmall","Xsmall","Ysmall","Zsmall","colonmonetary","onefitted","rupiah","Tildesmall","","","asuperior","centsuperior","","","","","Aacutesmall","Agravesmall","Acircumflexsmall","Adieresissmall","Atildesmall","Aringsmall","Ccedillasmall","Eacutesmall","Egravesmall","Ecircumflexsmall","Edieresissmall","Iacutesmall","Igravesmall","Icircumflexsmall","Idieresissmall","Ntildesmall","Oacutesmall","Ogravesmall","Ocircumflexsmall","Odieresissmall","Otildesmall","Uacutesmall","Ugravesmall","Ucircumflexsmall","Udieresissmall","","eightsuperior","fourinferior","threeinferior","sixinferior","eightinferior","seveninferior","Scaronsmall","","centinferior","twoinferior","","Dieresissmall","","Caronsmall","osuperior","fiveinferior","","commainferior","periodinferior","Yacutesmall","","dollarinferior","","","Thornsmall","","nineinferior","zeroinferior","Zcaronsmall","AEsmall","Oslashsmall","questiondownsmall","oneinferior","Lslashsmall","","","","","","","Cedillasmall","","","","","","OEsmall","figuredash","hyphensuperior","","","","","exclamdownsmall","","Ydieresissmall","","onesuperior","twosuperior","threesuperior","foursuperior","fivesuperior","sixsuperior","sevensuperior","ninesuperior","zerosuperior","","esuperior","rsuperior","tsuperior","","","isuperior","ssuperior","dsuperior","","","","","","lsuperior","Ogoneksmall","Brevesmall","Macronsmall","bsuperior","nsuperior","msuperior","commasuperior","periodsuperior","Dotaccentsmall","Ringsmall","","","",""],pi=["","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","space","exclam","quotedbl","numbersign","dollar","percent","ampersand","quotesingle","parenleft","parenright","asterisk","plus","comma","hyphen","period","slash","zero","one","two","three","four","five","six","seven","eight","nine","colon","semicolon","less","equal","greater","question","at","A","B","C","D","E","F","G","H","I","J","K","L","M","N","O","P","Q","R","S","T","U","V","W","X","Y","Z","bracketleft","backslash","bracketright","asciicircum","underscore","grave","a","b","c","d","e","f","g","h","i","j","k","l","m","n","o","p","q","r","s","t","u","v","w","x","y","z","braceleft","bar","braceright","asciitilde","","Adieresis","Aring","Ccedilla","Eacute","Ntilde","Odieresis","Udieresis","aacute","agrave","acircumflex","adieresis","atilde","aring","ccedilla","eacute","egrave","ecircumflex","edieresis","iacute","igrave","icircumflex","idieresis","ntilde","oacute","ograve","ocircumflex","odieresis","otilde","uacute","ugrave","ucircumflex","udieresis","dagger","degree","cent","sterling","section","bullet","paragraph","germandbls","registered","copyright","trademark","acute","dieresis","notequal","AE","Oslash","infinity","plusminus","lessequal","greaterequal","yen","mu","partialdiff","summation","product","pi","integral","ordfeminine","ordmasculine","Omega","ae","oslash","questiondown","exclamdown","logicalnot","radical","florin","approxequal","Delta","guillemotleft","guillemotright","ellipsis","space","Agrave","Atilde","Otilde","OE","oe","endash","emdash","quotedblleft","quotedblright","quoteleft","quoteright","divide","lozenge","ydieresis","Ydieresis","fraction","currency","guilsinglleft","guilsinglright","fi","fl","daggerdbl","periodcentered","quotesinglbase","quotedblbase","perthousand","Acircumflex","Ecircumflex","Aacute","Edieresis","Egrave","Iacute","Icircumflex","Idieresis","Igrave","Oacute","Ocircumflex","apple","Ograve","Uacute","Ucircumflex","Ugrave","dotlessi","circumflex","tilde","macron","breve","dotaccent","ring","cedilla","hungarumlaut","ogonek","caron"],mi=["","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","space","exclam","quotedbl","numbersign","dollar","percent","ampersand","quoteright","parenleft","parenright","asterisk","plus","comma","hyphen","period","slash","zero","one","two","three","four","five","six","seven","eight","nine","colon","semicolon","less","equal","greater","question","at","A","B","C","D","E","F","G","H","I","J","K","L","M","N","O","P","Q","R","S","T","U","V","W","X","Y","Z","bracketleft","backslash","bracketright","asciicircum","underscore","quoteleft","a","b","c","d","e","f","g","h","i","j","k","l","m","n","o","p","q","r","s","t","u","v","w","x","y","z","braceleft","bar","braceright","asciitilde","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","exclamdown","cent","sterling","fraction","yen","florin","section","currency","quotesingle","quotedblleft","guillemotleft","guilsinglleft","guilsinglright","fi","fl","","endash","dagger","daggerdbl","periodcentered","","paragraph","bullet","quotesinglbase","quotedblbase","quotedblright","guillemotright","ellipsis","perthousand","","questiondown","","grave","acute","circumflex","tilde","macron","breve","dotaccent","dieresis","","ring","cedilla","","hungarumlaut","ogonek","caron","emdash","","","","","","","","","","","","","","","","","AE","","ordfeminine","","","","","Lslash","Oslash","OE","ordmasculine","","","","","","ae","","","","dotlessi","","","lslash","oslash","oe","germandbls","","","",""],yi=["","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","space","exclam","quotedbl","numbersign","dollar","percent","ampersand","quotesingle","parenleft","parenright","asterisk","plus","comma","hyphen","period","slash","zero","one","two","three","four","five","six","seven","eight","nine","colon","semicolon","less","equal","greater","question","at","A","B","C","D","E","F","G","H","I","J","K","L","M","N","O","P","Q","R","S","T","U","V","W","X","Y","Z","bracketleft","backslash","bracketright","asciicircum","underscore","grave","a","b","c","d","e","f","g","h","i","j","k","l","m","n","o","p","q","r","s","t","u","v","w","x","y","z","braceleft","bar","braceright","asciitilde","bullet","Euro","bullet","quotesinglbase","florin","quotedblbase","ellipsis","dagger","daggerdbl","circumflex","perthousand","Scaron","guilsinglleft","OE","bullet","Zcaron","bullet","bullet","quoteleft","quoteright","quotedblleft","quotedblright","bullet","endash","emdash","tilde","trademark","scaron","guilsinglright","oe","bullet","zcaron","Ydieresis","space","exclamdown","cent","sterling","currency","yen","brokenbar","section","dieresis","copyright","ordfeminine","guillemotleft","logicalnot","hyphen","registered","macron","degree","plusminus","twosuperior","threesuperior","acute","mu","paragraph","periodcentered","cedilla","onesuperior","ordmasculine","guillemotright","onequarter","onehalf","threequarters","questiondown","Agrave","Aacute","Acircumflex","Atilde","Adieresis","Aring","AE","Ccedilla","Egrave","Eacute","Ecircumflex","Edieresis","Igrave","Iacute","Icircumflex","Idieresis","Eth","Ntilde","Ograve","Oacute","Ocircumflex","Otilde","Odieresis","multiply","Oslash","Ugrave","Uacute","Ucircumflex","Udieresis","Yacute","Thorn","germandbls","agrave","aacute","acircumflex","atilde","adieresis","aring","ae","ccedilla","egrave","eacute","ecircumflex","edieresis","igrave","iacute","icircumflex","idieresis","eth","ntilde","ograve","oacute","ocircumflex","otilde","odieresis","divide","oslash","ugrave","uacute","ucircumflex","udieresis","yacute","thorn","ydieresis"],wi=["","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","space","exclam","universal","numbersign","existential","percent","ampersand","suchthat","parenleft","parenright","asteriskmath","plus","comma","minus","period","slash","zero","one","two","three","four","five","six","seven","eight","nine","colon","semicolon","less","equal","greater","question","congruent","Alpha","Beta","Chi","Delta","Epsilon","Phi","Gamma","Eta","Iota","theta1","Kappa","Lambda","Mu","Nu","Omicron","Pi","Theta","Rho","Sigma","Tau","Upsilon","sigma1","Omega","Xi","Psi","Zeta","bracketleft","therefore","bracketright","perpendicular","underscore","radicalex","alpha","beta","chi","delta","epsilon","phi","gamma","eta","iota","phi1","kappa","lambda","mu","nu","omicron","pi","theta","rho","sigma","tau","upsilon","omega1","omega","xi","psi","zeta","braceleft","bar","braceright","similar","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","Euro","Upsilon1","minute","lessequal","fraction","infinity","florin","club","diamond","heart","spade","arrowboth","arrowleft","arrowup","arrowright","arrowdown","degree","plusminus","second","greaterequal","multiply","proportional","partialdiff","bullet","divide","notequal","equivalence","approxequal","ellipsis","arrowvertex","arrowhorizex","carriagereturn","aleph","Ifraktur","Rfraktur","weierstrass","circlemultiply","circleplus","emptyset","intersection","union","propersuperset","reflexsuperset","notsubset","propersubset","reflexsubset","element","notelement","angle","gradient","registerserif","copyrightserif","trademarkserif","product","radical","dotmath","logicalnot","logicaland","logicalor","arrowdblboth","arrowdblleft","arrowdblup","arrowdblright","arrowdbldown","lozenge","angleleft","registersans","copyrightsans","trademarksans","summation","parenlefttp","parenleftex","parenleftbt","bracketlefttp","bracketleftex","bracketleftbt","bracelefttp","braceleftmid","braceleftbt","braceex","","angleright","integral","integraltp","integralex","integralbt","parenrighttp","parenrightex","parenrightbt","bracketrighttp","bracketrightex","bracketrightbt","bracerighttp","bracerightmid","bracerightbt",""],Di=["","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","space","a1","a2","a202","a3","a4","a5","a119","a118","a117","a11","a12","a13","a14","a15","a16","a105","a17","a18","a19","a20","a21","a22","a23","a24","a25","a26","a27","a28","a6","a7","a8","a9","a10","a29","a30","a31","a32","a33","a34","a35","a36","a37","a38","a39","a40","a41","a42","a43","a44","a45","a46","a47","a48","a49","a50","a51","a52","a53","a54","a55","a56","a57","a58","a59","a60","a61","a62","a63","a64","a65","a66","a67","a68","a69","a70","a71","a72","a73","a74","a203","a75","a204","a76","a77","a78","a79","a81","a82","a83","a84","a97","a98","a99","a100","","a89","a90","a93","a94","a91","a92","a205","a85","a206","a86","a87","a88","a95","a96","","","","","","","","","","","","","","","","","","","","a101","a102","a103","a104","a106","a107","a108","a112","a111","a110","a109","a120","a121","a122","a123","a124","a125","a126","a127","a128","a129","a130","a131","a132","a133","a134","a135","a136","a137","a138","a139","a140","a141","a142","a143","a144","a145","a146","a147","a148","a149","a150","a151","a152","a153","a154","a155","a156","a157","a158","a159","a160","a161","a163","a164","a196","a165","a192","a166","a167","a168","a169","a170","a171","a172","a173","a162","a174","a175","a176","a177","a178","a179","a193","a180","a199","a181","a200","a182","","a201","a183","a184","a197","a185","a194","a198","a186","a195","a187","a188","a189","a190","a191",""];function getEncoding(e){switch(e){case"WinAnsiEncoding":return yi;case"StandardEncoding":return mi;case"MacRomanEncoding":return pi;case"SymbolSetEncoding":return wi;case"ZapfDingbatsEncoding":return Di;case"ExpertEncoding":return di;case"MacExpertEncoding":return fi;default:return null}}const bi=[".notdef","space","exclam","quotedbl","numbersign","dollar","percent","ampersand","quoteright","parenleft","parenright","asterisk","plus","comma","hyphen","period","slash","zero","one","two","three","four","five","six","seven","eight","nine","colon","semicolon","less","equal","greater","question","at","A","B","C","D","E","F","G","H","I","J","K","L","M","N","O","P","Q","R","S","T","U","V","W","X","Y","Z","bracketleft","backslash","bracketright","asciicircum","underscore","quoteleft","a","b","c","d","e","f","g","h","i","j","k","l","m","n","o","p","q","r","s","t","u","v","w","x","y","z","braceleft","bar","braceright","asciitilde","exclamdown","cent","sterling","fraction","yen","florin","section","currency","quotesingle","quotedblleft","guillemotleft","guilsinglleft","guilsinglright","fi","fl","endash","dagger","daggerdbl","periodcentered","paragraph","bullet","quotesinglbase","quotedblbase","quotedblright","guillemotright","ellipsis","perthousand","questiondown","grave","acute","circumflex","tilde","macron","breve","dotaccent","dieresis","ring","cedilla","hungarumlaut","ogonek","caron","emdash","AE","ordfeminine","Lslash","Oslash","OE","ordmasculine","ae","dotlessi","lslash","oslash","oe","germandbls","onesuperior","logicalnot","mu","trademark","Eth","onehalf","plusminus","Thorn","onequarter","divide","brokenbar","degree","thorn","threequarters","twosuperior","registered","minus","eth","multiply","threesuperior","copyright","Aacute","Acircumflex","Adieresis","Agrave","Aring","Atilde","Ccedilla","Eacute","Ecircumflex","Edieresis","Egrave","Iacute","Icircumflex","Idieresis","Igrave","Ntilde","Oacute","Ocircumflex","Odieresis","Ograve","Otilde","Scaron","Uacute","Ucircumflex","Udieresis","Ugrave","Yacute","Ydieresis","Zcaron","aacute","acircumflex","adieresis","agrave","aring","atilde","ccedilla","eacute","ecircumflex","edieresis","egrave","iacute","icircumflex","idieresis","igrave","ntilde","oacute","ocircumflex","odieresis","ograve","otilde","scaron","uacute","ucircumflex","udieresis","ugrave","yacute","ydieresis","zcaron","exclamsmall","Hungarumlautsmall","dollaroldstyle","dollarsuperior","ampersandsmall","Acutesmall","parenleftsuperior","parenrightsuperior","twodotenleader","onedotenleader","zerooldstyle","oneoldstyle","twooldstyle","threeoldstyle","fouroldstyle","fiveoldstyle","sixoldstyle","sevenoldstyle","eightoldstyle","nineoldstyle","commasuperior","threequartersemdash","periodsuperior","questionsmall","asuperior","bsuperior","centsuperior","dsuperior","esuperior","isuperior","lsuperior","msuperior","nsuperior","osuperior","rsuperior","ssuperior","tsuperior","ff","ffi","ffl","parenleftinferior","parenrightinferior","Circumflexsmall","hyphensuperior","Gravesmall","Asmall","Bsmall","Csmall","Dsmall","Esmall","Fsmall","Gsmall","Hsmall","Ismall","Jsmall","Ksmall","Lsmall","Msmall","Nsmall","Osmall","Psmall","Qsmall","Rsmall","Ssmall","Tsmall","Usmall","Vsmall","Wsmall","Xsmall","Ysmall","Zsmall","colonmonetary","onefitted","rupiah","Tildesmall","exclamdownsmall","centoldstyle","Lslashsmall","Scaronsmall","Zcaronsmall","Dieresissmall","Brevesmall","Caronsmall","Dotaccentsmall","Macronsmall","figuredash","hypheninferior","Ogoneksmall","Ringsmall","Cedillasmall","questiondownsmall","oneeighth","threeeighths","fiveeighths","seveneighths","onethird","twothirds","zerosuperior","foursuperior","fivesuperior","sixsuperior","sevensuperior","eightsuperior","ninesuperior","zeroinferior","oneinferior","twoinferior","threeinferior","fourinferior","fiveinferior","sixinferior","seveninferior","eightinferior","nineinferior","centinferior","dollarinferior","periodinferior","commainferior","Agravesmall","Aacutesmall","Acircumflexsmall","Atildesmall","Adieresissmall","Aringsmall","AEsmall","Ccedillasmall","Egravesmall","Eacutesmall","Ecircumflexsmall","Edieresissmall","Igravesmall","Iacutesmall","Icircumflexsmall","Idieresissmall","Ethsmall","Ntildesmall","Ogravesmall","Oacutesmall","Ocircumflexsmall","Otildesmall","Odieresissmall","OEsmall","Oslashsmall","Ugravesmall","Uacutesmall","Ucircumflexsmall","Udieresissmall","Yacutesmall","Thornsmall","Ydieresissmall","001.000","001.001","001.002","001.003","Black","Bold","Book","Light","Medium","Regular","Roman","Semibold"],Fi=391,Si=[null,{id:"hstem",min:2,stackClearing:!0,stem:!0},null,{id:"vstem",min:2,stackClearing:!0,stem:!0},{id:"vmoveto",min:1,stackClearing:!0},{id:"rlineto",min:2,resetStack:!0},{id:"hlineto",min:1,resetStack:!0},{id:"vlineto",min:1,resetStack:!0},{id:"rrcurveto",min:6,resetStack:!0},null,{id:"callsubr",min:1,undefStack:!0},{id:"return",min:0,undefStack:!0},null,null,{id:"endchar",min:0,stackClearing:!0},null,null,null,{id:"hstemhm",min:2,stackClearing:!0,stem:!0},{id:"hintmask",min:0,stackClearing:!0},{id:"cntrmask",min:0,stackClearing:!0},{id:"rmoveto",min:2,stackClearing:!0},{id:"hmoveto",min:1,stackClearing:!0},{id:"vstemhm",min:2,stackClearing:!0,stem:!0},{id:"rcurveline",min:8,resetStack:!0},{id:"rlinecurve",min:8,resetStack:!0},{id:"vvcurveto",min:4,resetStack:!0},{id:"hhcurveto",min:4,resetStack:!0},null,{id:"callgsubr",min:1,undefStack:!0},{id:"vhcurveto",min:4,resetStack:!0},{id:"hvcurveto",min:4,resetStack:!0}],ki=[null,null,null,{id:"and",min:2,stackDelta:-1},{id:"or",min:2,stackDelta:-1},{id:"not",min:1,stackDelta:0},null,null,null,{id:"abs",min:1,stackDelta:0},{id:"add",min:2,stackDelta:-1,stackFn(e,t){e[t-2]=e[t-2]+e[t-1]}},{id:"sub",min:2,stackDelta:-1,stackFn(e,t){e[t-2]=e[t-2]-e[t-1]}},{id:"div",min:2,stackDelta:-1,stackFn(e,t){e[t-2]=e[t-2]/e[t-1]}},null,{id:"neg",min:1,stackDelta:0,stackFn(e,t){e[t-1]=-e[t-1]}},{id:"eq",min:2,stackDelta:-1},null,null,{id:"drop",min:1,stackDelta:-1},null,{id:"put",min:2,stackDelta:-2},{id:"get",min:1,stackDelta:0},{id:"ifelse",min:4,stackDelta:-3},{id:"random",min:0,stackDelta:1},{id:"mul",min:2,stackDelta:-1,stackFn(e,t){e[t-2]=e[t-2]*e[t-1]}},null,{id:"sqrt",min:1,stackDelta:0},{id:"dup",min:1,stackDelta:1},{id:"exch",min:2,stackDelta:0},{id:"index",min:2,stackDelta:0},{id:"roll",min:3,stackDelta:-2},null,null,null,{id:"hflex",min:7,resetStack:!0},{id:"flex",min:13,resetStack:!0},{id:"hflex1",min:9,resetStack:!0},{id:"flex1",min:11,resetStack:!0}];class CFFParser{constructor(e,t,i){this.bytes=e.getBytes();this.properties=t;this.seacAnalysisEnabled=!!i}parse(){const e=this.properties,t=new CFF;this.cff=t;const i=this.parseHeader(),a=this.parseIndex(i.endPos),s=this.parseIndex(a.endPos),r=this.parseIndex(s.endPos),n=this.parseIndex(r.endPos),g=this.parseDict(s.obj.get(0)),o=this.createDict(CFFTopDict,g,t.strings);t.header=i.obj;t.names=this.parseNameIndex(a.obj);t.strings=this.parseStringIndex(r.obj);t.topDict=o;t.globalSubrIndex=n.obj;this.parsePrivateDict(t.topDict);t.isCIDFont=o.hasName("ROS");const c=o.getByName("CharStrings"),C=this.parseIndex(c).obj,h=o.getByName("FontMatrix");h&&(e.fontMatrix=h);const l=o.getByName("FontBBox");if(l){e.ascent=Math.max(l[3],l[1]);e.descent=Math.min(l[1],l[3]);e.ascentScaled=!0}let Q,E;if(t.isCIDFont){const e=this.parseIndex(o.getByName("FDArray")).obj;for(let i=0,a=e.count;i=t)throw new FormatError("Invalid CFF header");if(0!==i){info("cff data is shifted");e=e.subarray(i);this.bytes=e}const a=e[0],s=e[1],r=e[2],n=e[3];return{obj:new CFFHeader(a,s,r,n),endPos:r}}parseDict(e){let t=0;function parseOperand(){let i=e[t++];if(30===i)return function parseFloatOperand(){let i="";const a=15,s=["0","1","2","3","4","5","6","7","8","9",".","E","E-",null,"-"],r=e.length;for(;t>4,g=15&r;if(n===a)break;i+=s[n];if(g===a)break;i+=s[g]}return parseFloat(i)}();if(28===i){i=e[t++];i=(i<<24|e[t++]<<16)>>16;return i}if(29===i){i=e[t++];i=i<<8|e[t++];i=i<<8|e[t++];i=i<<8|e[t++];return i}if(i>=32&&i<=246)return i-139;if(i>=247&&i<=250)return 256*(i-247)+e[t++]+108;if(i>=251&&i<=254)return-256*(i-251)-e[t++]-108;warn('CFFParser_parseDict: "'+i+'" is a reserved command.');return NaN}let i=[];const a=[];t=0;const s=e.length;for(;t10)return!1;let s=e.stackSize;const r=e.stack;let n=t.length;for(let g=0;g>16;g+=2;s++}else if(14===o){if(s>=4){s-=4;if(this.seacAnalysisEnabled){e.seac=r.slice(s,s+4);return!1}}c=Si[o]}else if(o>=32&&o<=246){r[s]=o-139;s++}else if(o>=247&&o<=254){r[s]=o<251?(o-247<<8)+t[g]+108:-(o-251<<8)-t[g]-108;g++;s++}else if(255===o){r[s]=(t[g]<<24|t[g+1]<<16|t[g+2]<<8|t[g+3])/65536;g+=4;s++}else if(19===o||20===o){e.hints+=s>>1;if(0===e.hints){t.copyWithin(g-1,g,-1);g-=1;n-=1;continue}g+=e.hints+7>>3;s%=2;c=Si[o]}else{if(10===o||29===o){const t=10===o?i:a;if(!t){c=Si[o];warn("Missing subrsIndex for "+c.id);return!1}let n=32768;t.count<1240?n=107:t.count<33900&&(n=1131);const g=r[--s]+n;if(g<0||g>=t.count||isNaN(g)){c=Si[o];warn("Out of bounds subrIndex for "+c.id);return!1}e.stackSize=s;e.callDepth++;if(!this.parseCharString(e,t.get(g),i,a))return!1;e.callDepth--;s=e.stackSize;continue}if(11===o){e.stackSize=s;return!0}if(0===o&&g===t.length){t[g-1]=14;c=Si[14]}else{if(9===o){t.copyWithin(g-1,g,-1);g-=1;n-=1;continue}c=Si[o]}}if(c){if(c.stem){e.hints+=s>>1;if(3===o||23===o)e.hasVStems=!0;else if(e.hasVStems&&(1===o||18===o)){warn("CFF stem hints are in wrong order");t[g-1]=1===o?3:23}}if("min"in c&&!e.undefStack&&s=2&&c.stem?s%=2:s>1&&warn("Found too many parameters for stack-clearing command");s>0&&(e.width=r[s-1])}if("stackDelta"in c){"stackFn"in c&&c.stackFn(r,s);s+=c.stackDelta}else if(c.stackClearing)s=0;else if(c.resetStack){s=0;e.undefStack=!1}else if(c.undefStack){s=0;e.undefStack=!0;e.firstStackClearing=!1}}}n=s.length){warn("Invalid fd index for glyph index.");h=!1}if(h){Q=s[e].privateDict;l=Q.subrsIndex}}else t&&(l=t);h&&(h=this.parseCharString(C,o,l,i));if(null!==C.width){const e=Q.getByName("nominalWidthX");g[c]=e+C.width}else{const e=Q.getByName("defaultWidthX");g[c]=e}null!==C.seac&&(n[c]=C.seac);h||e.set(c,new Uint8Array([14]))}return{charStrings:e,seacs:n,widths:g}}emptyPrivateDictionary(e){const t=this.createDict(CFFPrivateDict,[],e.strings);e.setByKey(18,[0,0]);e.privateDict=t}parsePrivateDict(e){if(!e.hasName("Private")){this.emptyPrivateDictionary(e);return}const t=e.getByName("Private");if(!Array.isArray(t)||2!==t.length){e.removeByName("Private");return}const i=t[0],a=t[1];if(0===i||a>=this.bytes.length){this.emptyPrivateDictionary(e);return}const s=a+i,r=this.bytes.subarray(a,s),n=this.parseDict(r),g=this.createDict(CFFPrivateDict,n,e.strings);e.privateDict=g;0===g.getByName("ExpansionFactor")&&g.setByName("ExpansionFactor",.06);if(!g.getByName("Subrs"))return;const o=g.getByName("Subrs"),c=a+o;if(0===o||c>=this.bytes.length){this.emptyPrivateDictionary(e);return}const C=this.parseIndex(c);g.subrsIndex=C.obj}parseCharsets(e,t,i,a){if(0===e)return new CFFCharset(!0,Gi.ISO_ADOBE,Qi);if(1===e)return new CFFCharset(!0,Gi.EXPERT,Ei);if(2===e)return new CFFCharset(!0,Gi.EXPERT_SUBSET,ui);const s=this.bytes,r=e,n=s[e++],g=[a?0:".notdef"];let o,c,C;t-=1;switch(n){case 0:for(C=0;C=65535){warn("Not enough space in charstrings to duplicate first glyph.");return}const e=this.charStrings.get(0);this.charStrings.add(e);this.isCIDFont&&this.fdSelect.fdSelect.push(this.fdSelect.fdSelect[0])}hasGlyphId(e){if(e<0||e>=this.charStrings.count)return!1;return this.charStrings.get(e).length>0}}class CFFHeader{constructor(e,t,i,a){this.major=e;this.minor=t;this.hdrSize=i;this.offSize=a}}class CFFStrings{constructor(){this.strings=[]}get(e){return e>=0&&e<=390?bi[e]:e-Fi<=this.strings.length?this.strings[e-Fi]:bi[0]}getSID(e){let t=bi.indexOf(e);if(-1!==t)return t;t=this.strings.indexOf(e);return-1!==t?t+Fi:-1}add(e){this.strings.push(e)}get count(){return this.strings.length}}class CFFIndex{constructor(){this.objects=[];this.length=0}add(e){this.length+=e.length;this.objects.push(e)}set(e,t){this.length+=t.length-this.objects[e].length;this.objects[e]=t}get(e){return this.objects[e]}get count(){return this.objects.length}}class CFFDict{constructor(e,t){this.keyToNameMap=e.keyToNameMap;this.nameToKeyMap=e.nameToKeyMap;this.defaults=e.defaults;this.types=e.types;this.opcodes=e.opcodes;this.order=e.order;this.strings=t;this.values=Object.create(null)}setByKey(e,t){if(!(e in this.keyToNameMap))return!1;if(0===t.length)return!0;for(const i of t)if(isNaN(i)){warn(`Invalid CFFDict value: "${t}" for key "${e}".`);return!0}const i=this.types[e];"num"!==i&&"sid"!==i&&"offset"!==i||(t=t[0]);this.values[e]=t;return!0}setByName(e,t){if(!(e in this.nameToKeyMap))throw new FormatError(`Invalid dictionary name "${e}"`);this.values[this.nameToKeyMap[e]]=t}hasName(e){return this.nameToKeyMap[e]in this.values}getByName(e){if(!(e in this.nameToKeyMap))throw new FormatError(`Invalid dictionary name ${e}"`);const t=this.nameToKeyMap[e];return t in this.values?this.values[t]:this.defaults[t]}removeByName(e){delete this.values[this.nameToKeyMap[e]]}static createTables(e){const t={keyToNameMap:{},nameToKeyMap:{},defaults:{},types:{},opcodes:{},order:[]};for(const i of e){const e=Array.isArray(i[0])?(i[0][0]<<8)+i[0][1]:i[0];t.keyToNameMap[e]=i[1];t.nameToKeyMap[i[1]]=e;t.types[e]=i[2];t.defaults[e]=i[3];t.opcodes[e]=Array.isArray(i[0])?i[0]:[i[0]];t.order.push(e)}return t}}const Ri=[[[12,30],"ROS",["sid","sid","num"],null],[[12,20],"SyntheticBase","num",null],[0,"version","sid",null],[1,"Notice","sid",null],[[12,0],"Copyright","sid",null],[2,"FullName","sid",null],[3,"FamilyName","sid",null],[4,"Weight","sid",null],[[12,1],"isFixedPitch","num",0],[[12,2],"ItalicAngle","num",0],[[12,3],"UnderlinePosition","num",-100],[[12,4],"UnderlineThickness","num",50],[[12,5],"PaintType","num",0],[[12,6],"CharstringType","num",2],[[12,7],"FontMatrix",["num","num","num","num","num","num"],[.001,0,0,.001,0,0]],[13,"UniqueID","num",null],[5,"FontBBox",["num","num","num","num"],[0,0,0,0]],[[12,8],"StrokeWidth","num",0],[14,"XUID","array",null],[15,"charset","offset",0],[16,"Encoding","offset",0],[17,"CharStrings","offset",0],[18,"Private",["offset","offset"],null],[[12,21],"PostScript","sid",null],[[12,22],"BaseFontName","sid",null],[[12,23],"BaseFontBlend","delta",null],[[12,31],"CIDFontVersion","num",0],[[12,32],"CIDFontRevision","num",0],[[12,33],"CIDFontType","num",0],[[12,34],"CIDCount","num",8720],[[12,35],"UIDBase","num",null],[[12,37],"FDSelect","offset",null],[[12,36],"FDArray","offset",null],[[12,38],"FontName","sid",null]];class CFFTopDict extends CFFDict{static get tables(){return shadow(this,"tables",this.createTables(Ri))}constructor(e){super(CFFTopDict.tables,e);this.privateDict=null}}const Ni=[[6,"BlueValues","delta",null],[7,"OtherBlues","delta",null],[8,"FamilyBlues","delta",null],[9,"FamilyOtherBlues","delta",null],[[12,9],"BlueScale","num",.039625],[[12,10],"BlueShift","num",7],[[12,11],"BlueFuzz","num",1],[10,"StdHW","num",null],[11,"StdVW","num",null],[[12,12],"StemSnapH","delta",null],[[12,13],"StemSnapV","delta",null],[[12,14],"ForceBold","num",0],[[12,17],"LanguageGroup","num",0],[[12,18],"ExpansionFactor","num",.06],[[12,19],"initialRandomSeed","num",0],[20,"defaultWidthX","num",0],[21,"nominalWidthX","num",0],[19,"Subrs","offset",null]];class CFFPrivateDict extends CFFDict{static get tables(){return shadow(this,"tables",this.createTables(Ni))}constructor(e){super(CFFPrivateDict.tables,e);this.subrsIndex=null}}const Gi={ISO_ADOBE:0,EXPERT:1,EXPERT_SUBSET:2};class CFFCharset{constructor(e,t,i,a){this.predefined=e;this.format=t;this.charset=i;this.raw=a}}class CFFEncoding{constructor(e,t,i,a){this.predefined=e;this.format=t;this.encoding=i;this.raw=a}}class CFFFDSelect{constructor(e,t){this.format=e;this.fdSelect=t}getFDIndex(e){return e<0||e>=this.fdSelect.length?-1:this.fdSelect[e]}}class CFFOffsetTracker{constructor(){this.offsets=Object.create(null)}isTracking(e){return e in this.offsets}track(e,t){if(e in this.offsets)throw new FormatError(`Already tracking location of ${e}`);this.offsets[e]=t}offset(e){for(const t in this.offsets)this.offsets[t]+=e}setEntryLocation(e,t,i){if(!(e in this.offsets))throw new FormatError(`Not tracking location of ${e}`);const a=i.data,s=this.offsets[e];for(let e=0,i=t.length;e>24&255;a[n]=c>>16&255;a[g]=c>>8&255;a[o]=255&c}}}class CFFCompiler{constructor(e){this.cff=e}compile(){const e=this.cff,t={data:[],length:0,add(e){try{this.data.push(...e)}catch{this.data=this.data.concat(e)}this.length=this.data.length}},i=this.compileHeader(e.header);t.add(i);const a=this.compileNameIndex(e.names);t.add(a);if(e.isCIDFont&&e.topDict.hasName("FontMatrix")){const t=e.topDict.getByName("FontMatrix");e.topDict.removeByName("FontMatrix");for(const i of e.fdArray){let e=t.slice(0);i.hasName("FontMatrix")&&(e=Util.transform(e,i.getByName("FontMatrix")));i.setByName("FontMatrix",e)}}const s=e.topDict.getByName("XUID");s?.length>16&&e.topDict.removeByName("XUID");e.topDict.setByName("charset",0);let r=this.compileTopDicts([e.topDict],t.length,e.isCIDFont);t.add(r.output);const n=r.trackers[0],g=this.compileStringIndex(e.strings.strings);t.add(g);const o=this.compileIndex(e.globalSubrIndex);t.add(o);if(e.encoding&&e.topDict.hasName("Encoding"))if(e.encoding.predefined)n.setEntryLocation("Encoding",[e.encoding.format],t);else{const i=this.compileEncoding(e.encoding);n.setEntryLocation("Encoding",[t.length],t);t.add(i)}const c=this.compileCharset(e.charset,e.charStrings.count,e.strings,e.isCIDFont);n.setEntryLocation("charset",[t.length],t);t.add(c);const C=this.compileCharStrings(e.charStrings);n.setEntryLocation("CharStrings",[t.length],t);t.add(C);if(e.isCIDFont){n.setEntryLocation("FDSelect",[t.length],t);const i=this.compileFDSelect(e.fdSelect);t.add(i);r=this.compileTopDicts(e.fdArray,t.length,!0);n.setEntryLocation("FDArray",[t.length],t);t.add(r.output);const a=r.trackers;this.compilePrivateDicts(e.fdArray,a,t)}this.compilePrivateDicts([e.topDict],[n],t);t.add([0]);return t.data}encodeNumber(e){return Number.isInteger(e)?this.encodeInteger(e):this.encodeFloat(e)}static get EncodeFloatRegExp(){return shadow(this,"EncodeFloatRegExp",/\.(\d*?)(?:9{5,20}|0{5,20})\d{0,2}(?:e(.+)|$)/)}encodeFloat(e){let t=e.toString();const i=CFFCompiler.EncodeFloatRegExp.exec(t);if(i){const a=parseFloat("1e"+((i[2]?+i[2]:0)+i[1].length));t=(Math.round(e*a)/a).toString()}let a,s,r="";for(a=0,s=t.length;a=-107&&e<=107?[e+139]:e>=108&&e<=1131?[247+((e-=108)>>8),255&e]:e>=-1131&&e<=-108?[251+((e=-e-108)>>8),255&e]:e>=-32768&&e<=32767?[28,e>>8&255,255&e]:[29,e>>24&255,e>>16&255,e>>8&255,255&e];return t}compileHeader(e){return[e.major,e.minor,4,e.offSize]}compileNameIndex(e){const t=new CFFIndex;for(const i of e){const e=Math.min(i.length,127);let a=new Array(e);for(let t=0;t"~"||"["===e||"]"===e||"("===e||")"===e||"{"===e||"}"===e||"<"===e||">"===e||"/"===e||"%"===e)&&(e="_");a[t]=e}a=a.join("");""===a&&(a="Bad_Font_Name");t.add(stringToBytes(a))}return this.compileIndex(t)}compileTopDicts(e,t,i){const a=[];let s=new CFFIndex;for(const r of e){if(i){r.removeByName("CIDFontVersion");r.removeByName("CIDFontRevision");r.removeByName("CIDFontType");r.removeByName("CIDCount");r.removeByName("UIDBase")}const e=new CFFOffsetTracker,n=this.compileDict(r,e);a.push(e);s.add(n);e.offset(t)}s=this.compileIndex(s,a);return{trackers:a,output:s}}compilePrivateDicts(e,t,i){for(let a=0,s=e.length;a>8&255,255&r]);else{s=new Uint8Array(1+2*r);s[0]=0;let t=0;const a=e.charset.length;let n=!1;for(let r=1;r>8&255;s[r+1]=255&g}}return this.compileTypedArray(s)}compileEncoding(e){return this.compileTypedArray(e.raw)}compileFDSelect(e){const t=e.format;let i,a;switch(t){case 0:i=new Uint8Array(1+e.fdSelect.length);i[0]=t;for(a=0;a>8&255,255&s,r];for(a=1;a>8&255,255&a,t);r=t}}const g=(n.length-3)/3;n[1]=g>>8&255;n[2]=255&g;n.push(a>>8&255,255&a);i=new Uint8Array(n)}return this.compileTypedArray(i)}compileTypedArray(e){return Array.from(e)}compileIndex(e,t=[]){const i=e.objects,a=i.length;if(0===a)return[0,0];const s=[a>>8&255,255&a];let r,n,g=1;for(r=0;r>8&255,255&o):3===n?s.push(o>>16&255,o>>8&255,255&o):s.push(o>>>24&255,o>>16&255,o>>8&255,255&o);i[r]&&(o+=i[r].length)}for(r=0;r=5&&t<=7))return-1;a=e.substring(1)}if(a===a.toUpperCase()){i=parseInt(a,16);if(i>=0)return i}}return-1}const Ji=[[0,127],[128,255],[256,383],[384,591],[592,687,7424,7551,7552,7615],[688,767,42752,42783],[768,879,7616,7679],[880,1023],[11392,11519],[1024,1279,1280,1327,11744,11775,42560,42655],[1328,1423],[1424,1535],[42240,42559],[1536,1791,1872,1919],[1984,2047],[2304,2431],[2432,2559],[2560,2687],[2688,2815],[2816,2943],[2944,3071],[3072,3199],[3200,3327],[3328,3455],[3584,3711],[3712,3839],[4256,4351,11520,11567],[6912,7039],[4352,4607],[7680,7935,11360,11391,42784,43007],[7936,8191],[8192,8303,11776,11903],[8304,8351],[8352,8399],[8400,8447],[8448,8527],[8528,8591],[8592,8703,10224,10239,10496,10623,11008,11263],[8704,8959,10752,11007,10176,10223,10624,10751],[8960,9215],[9216,9279],[9280,9311],[9312,9471],[9472,9599],[9600,9631],[9632,9727],[9728,9983],[9984,10175],[12288,12351],[12352,12447],[12448,12543,12784,12799],[12544,12591,12704,12735],[12592,12687],[43072,43135],[12800,13055],[13056,13311],[44032,55215],[55296,57343],[67840,67871],[19968,40959,11904,12031,12032,12255,12272,12287,13312,19903,131072,173791,12688,12703],[57344,63743],[12736,12783,63744,64255,194560,195103],[64256,64335],[64336,65023],[65056,65071],[65040,65055],[65104,65135],[65136,65279],[65280,65519],[65520,65535],[3840,4095],[1792,1871],[1920,1983],[3456,3583],[4096,4255],[4608,4991,4992,5023,11648,11743],[5024,5119],[5120,5759],[5760,5791],[5792,5887],[6016,6143],[6144,6319],[10240,10495],[40960,42127],[5888,5919,5920,5951,5952,5983,5984,6015],[66304,66351],[66352,66383],[66560,66639],[118784,119039,119040,119295,119296,119375],[119808,120831],[1044480,1048573],[65024,65039,917760,917999],[917504,917631],[6400,6479],[6480,6527],[6528,6623],[6656,6687],[11264,11359],[11568,11647],[19904,19967],[43008,43055],[65536,65663,65664,65791,65792,65855],[65856,65935],[66432,66463],[66464,66527],[66640,66687],[66688,66735],[67584,67647],[68096,68191],[119552,119647],[73728,74751,74752,74879],[119648,119679],[7040,7103],[7168,7247],[7248,7295],[43136,43231],[43264,43311],[43312,43359],[43520,43615],[65936,65999],[66e3,66047],[66208,66271,66176,66207,67872,67903],[127024,127135,126976,127023]];function getUnicodeRangeFor(e,t=-1){if(-1!==t){const i=Ji[t];for(let a=0,s=i.length;a=i[a]&&e<=i[a+1])return t}for(let t=0,i=Ji.length;t=i[a]&&e<=i[a+1])return t}return-1}const Yi=new RegExp("^(\\s)|(\\p{Mn})|(\\p{Cf})$","u"),vi=new Map;const Ki=!0,Ti=1,qi=2,Oi=4,Pi=32,Wi=[".notdef",".null","nonmarkingreturn","space","exclam","quotedbl","numbersign","dollar","percent","ampersand","quotesingle","parenleft","parenright","asterisk","plus","comma","hyphen","period","slash","zero","one","two","three","four","five","six","seven","eight","nine","colon","semicolon","less","equal","greater","question","at","A","B","C","D","E","F","G","H","I","J","K","L","M","N","O","P","Q","R","S","T","U","V","W","X","Y","Z","bracketleft","backslash","bracketright","asciicircum","underscore","grave","a","b","c","d","e","f","g","h","i","j","k","l","m","n","o","p","q","r","s","t","u","v","w","x","y","z","braceleft","bar","braceright","asciitilde","Adieresis","Aring","Ccedilla","Eacute","Ntilde","Odieresis","Udieresis","aacute","agrave","acircumflex","adieresis","atilde","aring","ccedilla","eacute","egrave","ecircumflex","edieresis","iacute","igrave","icircumflex","idieresis","ntilde","oacute","ograve","ocircumflex","odieresis","otilde","uacute","ugrave","ucircumflex","udieresis","dagger","degree","cent","sterling","section","bullet","paragraph","germandbls","registered","copyright","trademark","acute","dieresis","notequal","AE","Oslash","infinity","plusminus","lessequal","greaterequal","yen","mu","partialdiff","summation","product","pi","integral","ordfeminine","ordmasculine","Omega","ae","oslash","questiondown","exclamdown","logicalnot","radical","florin","approxequal","Delta","guillemotleft","guillemotright","ellipsis","nonbreakingspace","Agrave","Atilde","Otilde","OE","oe","endash","emdash","quotedblleft","quotedblright","quoteleft","quoteright","divide","lozenge","ydieresis","Ydieresis","fraction","currency","guilsinglleft","guilsinglright","fi","fl","daggerdbl","periodcentered","quotesinglbase","quotedblbase","perthousand","Acircumflex","Ecircumflex","Aacute","Edieresis","Egrave","Iacute","Icircumflex","Idieresis","Igrave","Oacute","Ocircumflex","apple","Ograve","Uacute","Ucircumflex","Ugrave","dotlessi","circumflex","tilde","macron","breve","dotaccent","ring","cedilla","hungarumlaut","ogonek","caron","Lslash","lslash","Scaron","scaron","Zcaron","zcaron","brokenbar","Eth","eth","Yacute","yacute","Thorn","thorn","minus","multiply","onesuperior","twosuperior","threesuperior","onehalf","onequarter","threequarters","franc","Gbreve","gbreve","Idotaccent","Scedilla","scedilla","Cacute","cacute","Ccaron","ccaron","dcroat"];function recoverGlyphName(e,t){if(void 0!==t[e])return e;const i=getUnicodeForGlyph(e,t);if(-1!==i)for(const e in t)if(t[e]===i)return e;info("Unable to recover a standard glyph name for: "+e);return e}function type1FontGlyphMapping(e,t,i){const a=Object.create(null);let s,r,n;const g=!!(e.flags&Oi);if(e.isInternalFont){n=t;for(r=0;r=0?s:0}}else if(e.baseEncodingName){n=getEncoding(e.baseEncodingName);for(r=0;r=0?s:0}}else if(g)for(r in t)a[r]=t[r];else{n=mi;for(r=0;r=0?s:0}}const o=e.differences;let c;if(o)for(r in o){const e=o[r];s=i.indexOf(e);if(-1===s){c||(c=xi());const t=recoverGlyphName(e,c);t!==e&&(s=i.indexOf(t))}a[r]=s>=0?s:0}return a}function normalizeFontName(e){return e.replaceAll(/[,_]/g,"-").replaceAll(/\s/g,"")}const ji=getLookupTableFactory((e=>{e[8211]=65074;e[8212]=65073;e[8229]=65072;e[8230]=65049;e[12289]=65041;e[12290]=65042;e[12296]=65087;e[12297]=65088;e[12298]=65085;e[12299]=65086;e[12300]=65089;e[12301]=65090;e[12302]=65091;e[12303]=65092;e[12304]=65083;e[12305]=65084;e[12308]=65081;e[12309]=65082;e[12310]=65047;e[12311]=65048;e[65103]=65076;e[65281]=65045;e[65288]=65077;e[65289]=65078;e[65292]=65040;e[65306]=65043;e[65307]=65044;e[65311]=65046;e[65339]=65095;e[65341]=65096;e[65343]=65075;e[65371]=65079;e[65373]=65080})),Xi=getLookupTableFactory((function(e){e["Times-Roman"]="Times-Roman";e.Helvetica="Helvetica";e.Courier="Courier";e.Symbol="Symbol";e["Times-Bold"]="Times-Bold";e["Helvetica-Bold"]="Helvetica-Bold";e["Courier-Bold"]="Courier-Bold";e.ZapfDingbats="ZapfDingbats";e["Times-Italic"]="Times-Italic";e["Helvetica-Oblique"]="Helvetica-Oblique";e["Courier-Oblique"]="Courier-Oblique";e["Times-BoldItalic"]="Times-BoldItalic";e["Helvetica-BoldOblique"]="Helvetica-BoldOblique";e["Courier-BoldOblique"]="Courier-BoldOblique";e.ArialNarrow="Helvetica";e["ArialNarrow-Bold"]="Helvetica-Bold";e["ArialNarrow-BoldItalic"]="Helvetica-BoldOblique";e["ArialNarrow-Italic"]="Helvetica-Oblique";e.ArialBlack="Helvetica";e["ArialBlack-Bold"]="Helvetica-Bold";e["ArialBlack-BoldItalic"]="Helvetica-BoldOblique";e["ArialBlack-Italic"]="Helvetica-Oblique";e["Arial-Black"]="Helvetica";e["Arial-Black-Bold"]="Helvetica-Bold";e["Arial-Black-BoldItalic"]="Helvetica-BoldOblique";e["Arial-Black-Italic"]="Helvetica-Oblique";e.Arial="Helvetica";e["Arial-Bold"]="Helvetica-Bold";e["Arial-BoldItalic"]="Helvetica-BoldOblique";e["Arial-Italic"]="Helvetica-Oblique";e.ArialMT="Helvetica";e["Arial-BoldItalicMT"]="Helvetica-BoldOblique";e["Arial-BoldMT"]="Helvetica-Bold";e["Arial-ItalicMT"]="Helvetica-Oblique";e["Arial-BoldItalicMT-BoldItalic"]="Helvetica-BoldOblique";e["Arial-BoldMT-Bold"]="Helvetica-Bold";e["Arial-ItalicMT-Italic"]="Helvetica-Oblique";e.ArialUnicodeMS="Helvetica";e["ArialUnicodeMS-Bold"]="Helvetica-Bold";e["ArialUnicodeMS-BoldItalic"]="Helvetica-BoldOblique";e["ArialUnicodeMS-Italic"]="Helvetica-Oblique";e["Courier-BoldItalic"]="Courier-BoldOblique";e["Courier-Italic"]="Courier-Oblique";e.CourierNew="Courier";e["CourierNew-Bold"]="Courier-Bold";e["CourierNew-BoldItalic"]="Courier-BoldOblique";e["CourierNew-Italic"]="Courier-Oblique";e["CourierNewPS-BoldItalicMT"]="Courier-BoldOblique";e["CourierNewPS-BoldMT"]="Courier-Bold";e["CourierNewPS-ItalicMT"]="Courier-Oblique";e.CourierNewPSMT="Courier";e["Helvetica-BoldItalic"]="Helvetica-BoldOblique";e["Helvetica-Italic"]="Helvetica-Oblique";e["Symbol-Bold"]="Symbol";e["Symbol-BoldItalic"]="Symbol";e["Symbol-Italic"]="Symbol";e.TimesNewRoman="Times-Roman";e["TimesNewRoman-Bold"]="Times-Bold";e["TimesNewRoman-BoldItalic"]="Times-BoldItalic";e["TimesNewRoman-Italic"]="Times-Italic";e.TimesNewRomanPS="Times-Roman";e["TimesNewRomanPS-Bold"]="Times-Bold";e["TimesNewRomanPS-BoldItalic"]="Times-BoldItalic";e["TimesNewRomanPS-BoldItalicMT"]="Times-BoldItalic";e["TimesNewRomanPS-BoldMT"]="Times-Bold";e["TimesNewRomanPS-Italic"]="Times-Italic";e["TimesNewRomanPS-ItalicMT"]="Times-Italic";e.TimesNewRomanPSMT="Times-Roman";e["TimesNewRomanPSMT-Bold"]="Times-Bold";e["TimesNewRomanPSMT-BoldItalic"]="Times-BoldItalic";e["TimesNewRomanPSMT-Italic"]="Times-Italic"})),Zi=getLookupTableFactory((function(e){e.Courier="FoxitFixed.pfb";e["Courier-Bold"]="FoxitFixedBold.pfb";e["Courier-BoldOblique"]="FoxitFixedBoldItalic.pfb";e["Courier-Oblique"]="FoxitFixedItalic.pfb";e.Helvetica="LiberationSans-Regular.ttf";e["Helvetica-Bold"]="LiberationSans-Bold.ttf";e["Helvetica-BoldOblique"]="LiberationSans-BoldItalic.ttf";e["Helvetica-Oblique"]="LiberationSans-Italic.ttf";e["Times-Roman"]="FoxitSerif.pfb";e["Times-Bold"]="FoxitSerifBold.pfb";e["Times-BoldItalic"]="FoxitSerifBoldItalic.pfb";e["Times-Italic"]="FoxitSerifItalic.pfb";e.Symbol="FoxitSymbol.pfb";e.ZapfDingbats="FoxitDingbats.pfb";e["LiberationSans-Regular"]="LiberationSans-Regular.ttf";e["LiberationSans-Bold"]="LiberationSans-Bold.ttf";e["LiberationSans-Italic"]="LiberationSans-Italic.ttf";e["LiberationSans-BoldItalic"]="LiberationSans-BoldItalic.ttf"})),Vi=getLookupTableFactory((function(e){e.Calibri="Helvetica";e["Calibri-Bold"]="Helvetica-Bold";e["Calibri-BoldItalic"]="Helvetica-BoldOblique";e["Calibri-Italic"]="Helvetica-Oblique";e.CenturyGothic="Helvetica";e["CenturyGothic-Bold"]="Helvetica-Bold";e["CenturyGothic-BoldItalic"]="Helvetica-BoldOblique";e["CenturyGothic-Italic"]="Helvetica-Oblique";e.ComicSansMS="Comic Sans MS";e["ComicSansMS-Bold"]="Comic Sans MS-Bold";e["ComicSansMS-BoldItalic"]="Comic Sans MS-BoldItalic";e["ComicSansMS-Italic"]="Comic Sans MS-Italic";e.GillSansMT="Helvetica";e["GillSansMT-Bold"]="Helvetica-Bold";e["GillSansMT-BoldItalic"]="Helvetica-BoldOblique";e["GillSansMT-Italic"]="Helvetica-Oblique";e.Impact="Helvetica";e["ItcSymbol-Bold"]="Helvetica-Bold";e["ItcSymbol-BoldItalic"]="Helvetica-BoldOblique";e["ItcSymbol-Book"]="Helvetica";e["ItcSymbol-BookItalic"]="Helvetica-Oblique";e["ItcSymbol-Medium"]="Helvetica";e["ItcSymbol-MediumItalic"]="Helvetica-Oblique";e.LucidaConsole="Courier";e["LucidaConsole-Bold"]="Courier-Bold";e["LucidaConsole-BoldItalic"]="Courier-BoldOblique";e["LucidaConsole-Italic"]="Courier-Oblique";e["LucidaSans-Demi"]="Helvetica-Bold";e["MS-Gothic"]="MS Gothic";e["MS-Gothic-Bold"]="MS Gothic-Bold";e["MS-Gothic-BoldItalic"]="MS Gothic-BoldItalic";e["MS-Gothic-Italic"]="MS Gothic-Italic";e["MS-Mincho"]="MS Mincho";e["MS-Mincho-Bold"]="MS Mincho-Bold";e["MS-Mincho-BoldItalic"]="MS Mincho-BoldItalic";e["MS-Mincho-Italic"]="MS Mincho-Italic";e["MS-PGothic"]="MS PGothic";e["MS-PGothic-Bold"]="MS PGothic-Bold";e["MS-PGothic-BoldItalic"]="MS PGothic-BoldItalic";e["MS-PGothic-Italic"]="MS PGothic-Italic";e["MS-PMincho"]="MS PMincho";e["MS-PMincho-Bold"]="MS PMincho-Bold";e["MS-PMincho-BoldItalic"]="MS PMincho-BoldItalic";e["MS-PMincho-Italic"]="MS PMincho-Italic";e.NuptialScript="Times-Italic";e.SegoeUISymbol="Helvetica"})),zi=getLookupTableFactory((function(e){e["Adobe Jenson"]=!0;e["Adobe Text"]=!0;e.Albertus=!0;e.Aldus=!0;e.Alexandria=!0;e.Algerian=!0;e["American Typewriter"]=!0;e.Antiqua=!0;e.Apex=!0;e.Arno=!0;e.Aster=!0;e.Aurora=!0;e.Baskerville=!0;e.Bell=!0;e.Bembo=!0;e["Bembo Schoolbook"]=!0;e.Benguiat=!0;e["Berkeley Old Style"]=!0;e["Bernhard Modern"]=!0;e["Berthold City"]=!0;e.Bodoni=!0;e["Bauer Bodoni"]=!0;e["Book Antiqua"]=!0;e.Bookman=!0;e["Bordeaux Roman"]=!0;e["Californian FB"]=!0;e.Calisto=!0;e.Calvert=!0;e.Capitals=!0;e.Cambria=!0;e.Cartier=!0;e.Caslon=!0;e.Catull=!0;e.Centaur=!0;e["Century Old Style"]=!0;e["Century Schoolbook"]=!0;e.Chaparral=!0;e["Charis SIL"]=!0;e.Cheltenham=!0;e["Cholla Slab"]=!0;e.Clarendon=!0;e.Clearface=!0;e.Cochin=!0;e.Colonna=!0;e["Computer Modern"]=!0;e["Concrete Roman"]=!0;e.Constantia=!0;e["Cooper Black"]=!0;e.Corona=!0;e.Ecotype=!0;e.Egyptienne=!0;e.Elephant=!0;e.Excelsior=!0;e.Fairfield=!0;e["FF Scala"]=!0;e.Folkard=!0;e.Footlight=!0;e.FreeSerif=!0;e["Friz Quadrata"]=!0;e.Garamond=!0;e.Gentium=!0;e.Georgia=!0;e.Gloucester=!0;e["Goudy Old Style"]=!0;e["Goudy Schoolbook"]=!0;e["Goudy Pro Font"]=!0;e.Granjon=!0;e["Guardian Egyptian"]=!0;e.Heather=!0;e.Hercules=!0;e["High Tower Text"]=!0;e.Hiroshige=!0;e["Hoefler Text"]=!0;e["Humana Serif"]=!0;e.Imprint=!0;e["Ionic No. 5"]=!0;e.Janson=!0;e.Joanna=!0;e.Korinna=!0;e.Lexicon=!0;e.LiberationSerif=!0;e["Liberation Serif"]=!0;e["Linux Libertine"]=!0;e.Literaturnaya=!0;e.Lucida=!0;e["Lucida Bright"]=!0;e.Melior=!0;e.Memphis=!0;e.Miller=!0;e.Minion=!0;e.Modern=!0;e["Mona Lisa"]=!0;e["Mrs Eaves"]=!0;e["MS Serif"]=!0;e["Museo Slab"]=!0;e["New York"]=!0;e["Nimbus Roman"]=!0;e["NPS Rawlinson Roadway"]=!0;e.NuptialScript=!0;e.Palatino=!0;e.Perpetua=!0;e.Plantin=!0;e["Plantin Schoolbook"]=!0;e.Playbill=!0;e["Poor Richard"]=!0;e["Rawlinson Roadway"]=!0;e.Renault=!0;e.Requiem=!0;e.Rockwell=!0;e.Roman=!0;e["Rotis Serif"]=!0;e.Sabon=!0;e.Scala=!0;e.Seagull=!0;e.Sistina=!0;e.Souvenir=!0;e.STIX=!0;e["Stone Informal"]=!0;e["Stone Serif"]=!0;e.Sylfaen=!0;e.Times=!0;e.Trajan=!0;e["Trinité"]=!0;e["Trump Mediaeval"]=!0;e.Utopia=!0;e["Vale Type"]=!0;e["Bitstream Vera"]=!0;e["Vera Serif"]=!0;e.Versailles=!0;e.Wanted=!0;e.Weiss=!0;e["Wide Latin"]=!0;e.Windsor=!0;e.XITS=!0})),_i=getLookupTableFactory((function(e){e.Dingbats=!0;e.Symbol=!0;e.ZapfDingbats=!0;e.Wingdings=!0;e["Wingdings-Bold"]=!0;e["Wingdings-Regular"]=!0})),$i=getLookupTableFactory((function(e){e[2]=10;e[3]=32;e[4]=33;e[5]=34;e[6]=35;e[7]=36;e[8]=37;e[9]=38;e[10]=39;e[11]=40;e[12]=41;e[13]=42;e[14]=43;e[15]=44;e[16]=45;e[17]=46;e[18]=47;e[19]=48;e[20]=49;e[21]=50;e[22]=51;e[23]=52;e[24]=53;e[25]=54;e[26]=55;e[27]=56;e[28]=57;e[29]=58;e[30]=894;e[31]=60;e[32]=61;e[33]=62;e[34]=63;e[35]=64;e[36]=65;e[37]=66;e[38]=67;e[39]=68;e[40]=69;e[41]=70;e[42]=71;e[43]=72;e[44]=73;e[45]=74;e[46]=75;e[47]=76;e[48]=77;e[49]=78;e[50]=79;e[51]=80;e[52]=81;e[53]=82;e[54]=83;e[55]=84;e[56]=85;e[57]=86;e[58]=87;e[59]=88;e[60]=89;e[61]=90;e[62]=91;e[63]=92;e[64]=93;e[65]=94;e[66]=95;e[67]=96;e[68]=97;e[69]=98;e[70]=99;e[71]=100;e[72]=101;e[73]=102;e[74]=103;e[75]=104;e[76]=105;e[77]=106;e[78]=107;e[79]=108;e[80]=109;e[81]=110;e[82]=111;e[83]=112;e[84]=113;e[85]=114;e[86]=115;e[87]=116;e[88]=117;e[89]=118;e[90]=119;e[91]=120;e[92]=121;e[93]=122;e[94]=123;e[95]=124;e[96]=125;e[97]=126;e[98]=196;e[99]=197;e[100]=199;e[101]=201;e[102]=209;e[103]=214;e[104]=220;e[105]=225;e[106]=224;e[107]=226;e[108]=228;e[109]=227;e[110]=229;e[111]=231;e[112]=233;e[113]=232;e[114]=234;e[115]=235;e[116]=237;e[117]=236;e[118]=238;e[119]=239;e[120]=241;e[121]=243;e[122]=242;e[123]=244;e[124]=246;e[125]=245;e[126]=250;e[127]=249;e[128]=251;e[129]=252;e[130]=8224;e[131]=176;e[132]=162;e[133]=163;e[134]=167;e[135]=8226;e[136]=182;e[137]=223;e[138]=174;e[139]=169;e[140]=8482;e[141]=180;e[142]=168;e[143]=8800;e[144]=198;e[145]=216;e[146]=8734;e[147]=177;e[148]=8804;e[149]=8805;e[150]=165;e[151]=181;e[152]=8706;e[153]=8721;e[154]=8719;e[156]=8747;e[157]=170;e[158]=186;e[159]=8486;e[160]=230;e[161]=248;e[162]=191;e[163]=161;e[164]=172;e[165]=8730;e[166]=402;e[167]=8776;e[168]=8710;e[169]=171;e[170]=187;e[171]=8230;e[179]=8220;e[180]=8221;e[181]=8216;e[182]=8217;e[200]=193;e[203]=205;e[207]=211;e[210]=218;e[223]=711;e[224]=321;e[225]=322;e[226]=352;e[227]=353;e[228]=381;e[229]=382;e[233]=221;e[234]=253;e[252]=263;e[253]=268;e[254]=269;e[258]=258;e[260]=260;e[261]=261;e[265]=280;e[266]=281;e[267]=282;e[268]=283;e[269]=313;e[275]=323;e[276]=324;e[278]=328;e[283]=344;e[284]=345;e[285]=346;e[286]=347;e[292]=367;e[295]=377;e[296]=378;e[298]=380;e[305]=963;e[306]=964;e[307]=966;e[308]=8215;e[309]=8252;e[310]=8319;e[311]=8359;e[312]=8592;e[313]=8593;e[337]=9552;e[493]=1039;e[494]=1040;e[672]=1488;e[673]=1489;e[674]=1490;e[675]=1491;e[676]=1492;e[677]=1493;e[678]=1494;e[679]=1495;e[680]=1496;e[681]=1497;e[682]=1498;e[683]=1499;e[684]=1500;e[685]=1501;e[686]=1502;e[687]=1503;e[688]=1504;e[689]=1505;e[690]=1506;e[691]=1507;e[692]=1508;e[693]=1509;e[694]=1510;e[695]=1511;e[696]=1512;e[697]=1513;e[698]=1514;e[705]=1524;e[706]=8362;e[710]=64288;e[711]=64298;e[759]=1617;e[761]=1776;e[763]=1778;e[775]=1652;e[777]=1764;e[778]=1780;e[779]=1781;e[780]=1782;e[782]=771;e[783]=64726;e[786]=8363;e[788]=8532;e[790]=768;e[791]=769;e[792]=768;e[795]=803;e[797]=64336;e[798]=64337;e[799]=64342;e[800]=64343;e[801]=64344;e[802]=64345;e[803]=64362;e[804]=64363;e[805]=64364;e[2424]=7821;e[2425]=7822;e[2426]=7823;e[2427]=7824;e[2428]=7825;e[2429]=7826;e[2430]=7827;e[2433]=7682;e[2678]=8045;e[2679]=8046;e[2830]=1552;e[2838]=686;e[2840]=751;e[2842]=753;e[2843]=754;e[2844]=755;e[2846]=757;e[2856]=767;e[2857]=848;e[2858]=849;e[2862]=853;e[2863]=854;e[2864]=855;e[2865]=861;e[2866]=862;e[2906]=7460;e[2908]=7462;e[2909]=7463;e[2910]=7464;e[2912]=7466;e[2913]=7467;e[2914]=7468;e[2916]=7470;e[2917]=7471;e[2918]=7472;e[2920]=7474;e[2921]=7475;e[2922]=7476;e[2924]=7478;e[2925]=7479;e[2926]=7480;e[2928]=7482;e[2929]=7483;e[2930]=7484;e[2932]=7486;e[2933]=7487;e[2934]=7488;e[2936]=7490;e[2937]=7491;e[2938]=7492;e[2940]=7494;e[2941]=7495;e[2942]=7496;e[2944]=7498;e[2946]=7500;e[2948]=7502;e[2950]=7504;e[2951]=7505;e[2952]=7506;e[2954]=7508;e[2955]=7509;e[2956]=7510;e[2958]=7512;e[2959]=7513;e[2960]=7514;e[2962]=7516;e[2963]=7517;e[2964]=7518;e[2966]=7520;e[2967]=7521;e[2968]=7522;e[2970]=7524;e[2971]=7525;e[2972]=7526;e[2974]=7528;e[2975]=7529;e[2976]=7530;e[2978]=1537;e[2979]=1538;e[2980]=1539;e[2982]=1549;e[2983]=1551;e[2984]=1552;e[2986]=1554;e[2987]=1555;e[2988]=1556;e[2990]=1623;e[2991]=1624;e[2995]=1775;e[2999]=1791;e[3002]=64290;e[3003]=64291;e[3004]=64292;e[3006]=64294;e[3007]=64295;e[3008]=64296;e[3011]=1900;e[3014]=8223;e[3015]=8244;e[3017]=7532;e[3018]=7533;e[3019]=7534;e[3075]=7590;e[3076]=7591;e[3079]=7594;e[3080]=7595;e[3083]=7598;e[3084]=7599;e[3087]=7602;e[3088]=7603;e[3091]=7606;e[3092]=7607;e[3095]=7610;e[3096]=7611;e[3099]=7614;e[3100]=7615;e[3103]=7618;e[3104]=7619;e[3107]=8337;e[3108]=8338;e[3116]=1884;e[3119]=1885;e[3120]=1885;e[3123]=1886;e[3124]=1886;e[3127]=1887;e[3128]=1887;e[3131]=1888;e[3132]=1888;e[3135]=1889;e[3136]=1889;e[3139]=1890;e[3140]=1890;e[3143]=1891;e[3144]=1891;e[3147]=1892;e[3148]=1892;e[3153]=580;e[3154]=581;e[3157]=584;e[3158]=585;e[3161]=588;e[3162]=589;e[3165]=891;e[3166]=892;e[3169]=1274;e[3170]=1275;e[3173]=1278;e[3174]=1279;e[3181]=7622;e[3182]=7623;e[3282]=11799;e[3316]=578;e[3379]=42785;e[3393]=1159;e[3416]=8377})),Aa=getLookupTableFactory((function(e){e[227]=322;e[264]=261;e[291]=346})),ea=getLookupTableFactory((function(e){e[1]=32;e[4]=65;e[5]=192;e[6]=193;e[9]=196;e[17]=66;e[18]=67;e[21]=268;e[24]=68;e[28]=69;e[29]=200;e[30]=201;e[32]=282;e[38]=70;e[39]=71;e[44]=72;e[47]=73;e[48]=204;e[49]=205;e[58]=74;e[60]=75;e[62]=76;e[68]=77;e[69]=78;e[75]=79;e[76]=210;e[80]=214;e[87]=80;e[89]=81;e[90]=82;e[92]=344;e[94]=83;e[97]=352;e[100]=84;e[104]=85;e[109]=220;e[115]=86;e[116]=87;e[121]=88;e[122]=89;e[124]=221;e[127]=90;e[129]=381;e[258]=97;e[259]=224;e[260]=225;e[263]=228;e[268]=261;e[271]=98;e[272]=99;e[273]=263;e[275]=269;e[282]=100;e[286]=101;e[287]=232;e[288]=233;e[290]=283;e[295]=281;e[296]=102;e[336]=103;e[346]=104;e[349]=105;e[350]=236;e[351]=237;e[361]=106;e[364]=107;e[367]=108;e[371]=322;e[373]=109;e[374]=110;e[381]=111;e[382]=242;e[383]=243;e[386]=246;e[393]=112;e[395]=113;e[396]=114;e[398]=345;e[400]=115;e[401]=347;e[403]=353;e[410]=116;e[437]=117;e[442]=252;e[448]=118;e[449]=119;e[454]=120;e[455]=121;e[457]=253;e[460]=122;e[462]=382;e[463]=380;e[853]=44;e[855]=58;e[856]=46;e[876]=47;e[878]=45;e[882]=45;e[894]=40;e[895]=41;e[896]=91;e[897]=93;e[923]=64;e[1004]=48;e[1005]=49;e[1006]=50;e[1007]=51;e[1008]=52;e[1009]=53;e[1010]=54;e[1011]=55;e[1012]=56;e[1013]=57;e[1081]=37;e[1085]=43;e[1086]=45}));function getStandardFontName(e){const t=normalizeFontName(e);return Xi()[t]}function isKnownFontName(e){const t=normalizeFontName(e);return!!(Xi()[t]||Vi()[t]||zi()[t]||_i()[t])}class ToUnicodeMap{constructor(e=[]){this._map=e}get length(){return this._map.length}forEach(e){for(const t in this._map)e(t,this._map[t].charCodeAt(0))}has(e){return void 0!==this._map[e]}get(e){return this._map[e]}charCodeOf(e){const t=this._map;if(t.length<=65536)return t.indexOf(e);for(const i in t)if(t[i]===e)return 0|i;return-1}amend(e){for(const t in e)this._map[t]=e[t]}}class IdentityToUnicodeMap{constructor(e,t){this.firstChar=e;this.lastChar=t}get length(){return this.lastChar+1-this.firstChar}forEach(e){for(let t=this.firstChar,i=this.lastChar;t<=i;t++)e(t,t)}has(e){return this.firstChar<=e&&e<=this.lastChar}get(e){if(this.firstChar<=e&&e<=this.lastChar)return String.fromCharCode(e)}charCodeOf(e){return Number.isInteger(e)&&e>=this.firstChar&&e<=this.lastChar?e:-1}amend(e){unreachable("Should not call amend()")}}class CFFFont{constructor(e,t){this.properties=t;const i=new CFFParser(e,t,Ki);this.cff=i.parse();this.cff.duplicateFirstGlyph();const a=new CFFCompiler(this.cff);this.seacs=this.cff.seacs;try{this.data=a.compile()}catch{warn("Failed to compile font "+t.loadedName);this.data=e}this._createBuiltInEncoding()}get numGlyphs(){return this.cff.charStrings.count}getCharset(){return this.cff.charset.charset}getGlyphMapping(){const e=this.cff,t=this.properties,{cidToGidMap:i,cMap:a}=t,s=e.charset.charset;let r,n;if(t.composite){let t,g;if(i?.length>0){t=Object.create(null);for(let e=0,a=i.length;e=0){const a=i[t];a&&(s[e]=a)}}s.length>0&&(this.properties.builtInEncoding=s)}}function getUint32(e,t){return(e[t]<<24|e[t+1]<<16|e[t+2]<<8|e[t+3])>>>0}function getUint16(e,t){return e[t]<<8|e[t+1]}function getInt16(e,t){return(e[t]<<24|e[t+1]<<16)>>16}function getInt8(e,t){return e[t]<<24>>24}function getFloat214(e,t){return getInt16(e,t)/16384}function getSubroutineBias(e){const t=e.length;let i=32768;t<1240?i=107:t<33900&&(i=1131);return i}function parseCmap(e,t,i){const a=1===getUint16(e,t+2)?getUint32(e,t+8):getUint32(e,t+16),s=getUint16(e,t+a);let r,n,g;if(4===s){getUint16(e,t+a+2);const i=getUint16(e,t+a+6)>>1;n=t+a+14;r=[];for(g=0;g>1;i0;)C.push({flags:r})}for(i=0;i>1;p=!0;break;case 4:n+=s.pop();moveTo(r,n);p=!0;break;case 5:for(;s.length>0;){r+=s.shift();n+=s.shift();lineTo(r,n)}break;case 6:for(;s.length>0;){r+=s.shift();lineTo(r,n);if(0===s.length)break;n+=s.shift();lineTo(r,n)}break;case 7:for(;s.length>0;){n+=s.shift();lineTo(r,n);if(0===s.length)break;r+=s.shift();lineTo(r,n)}break;case 8:for(;s.length>0;){c=r+s.shift();h=n+s.shift();C=c+s.shift();l=h+s.shift();r=C+s.shift();n=l+s.shift();bezierCurveTo(c,h,C,l,r,n)}break;case 10:d=s.pop();f=null;if(i.isCFFCIDFont){const e=i.fdSelect.getFDIndex(a);if(e>=0&&eMath.abs(n-t)?r+=s.shift():n+=s.shift();bezierCurveTo(c,h,C,l,r,n);break;default:throw new FormatError(`unknown operator: 12 ${m}`)}break;case 14:if(s.length>=4){const e=s.pop(),a=s.pop();n=s.pop();r=s.pop();t.add(ut);t.add(pt,[r,n]);let g=lookupCmap(i.cmap,String.fromCharCode(i.glyphNameMap[mi[e]]));compileCharString(i.glyphs[g.glyphId],t,i,g.glyphId);t.add(Et);g=lookupCmap(i.cmap,String.fromCharCode(i.glyphNameMap[mi[a]]));compileCharString(i.glyphs[g.glyphId],t,i,g.glyphId)}return;case 19:case 20:g+=s.length>>1;o+=g+7>>3;p=!0;break;case 21:n+=s.pop();r+=s.pop();moveTo(r,n);p=!0;break;case 22:r+=s.pop();moveTo(r,n);p=!0;break;case 24:for(;s.length>2;){c=r+s.shift();h=n+s.shift();C=c+s.shift();l=h+s.shift();r=C+s.shift();n=l+s.shift();bezierCurveTo(c,h,C,l,r,n)}r+=s.shift();n+=s.shift();lineTo(r,n);break;case 25:for(;s.length>6;){r+=s.shift();n+=s.shift();lineTo(r,n)}c=r+s.shift();h=n+s.shift();C=c+s.shift();l=h+s.shift();r=C+s.shift();n=l+s.shift();bezierCurveTo(c,h,C,l,r,n);break;case 26:s.length%2&&(r+=s.shift());for(;s.length>0;){c=r;h=n+s.shift();C=c+s.shift();l=h+s.shift();r=C;n=l+s.shift();bezierCurveTo(c,h,C,l,r,n)}break;case 27:s.length%2&&(n+=s.shift());for(;s.length>0;){c=r+s.shift();h=n;C=c+s.shift();l=h+s.shift();r=C+s.shift();n=l;bezierCurveTo(c,h,C,l,r,n)}break;case 28:s.push((e[o]<<24|e[o+1]<<16)>>16);o+=2;break;case 29:d=s.pop()+i.gsubrsBias;f=i.gsubrs[d];f&&parse(f);break;case 30:for(;s.length>0;){c=r;h=n+s.shift();C=c+s.shift();l=h+s.shift();r=C+s.shift();n=l+(1===s.length?s.shift():0);bezierCurveTo(c,h,C,l,r,n);if(0===s.length)break;c=r+s.shift();h=n;C=c+s.shift();l=h+s.shift();n=l+s.shift();r=C+(1===s.length?s.shift():0);bezierCurveTo(c,h,C,l,r,n)}break;case 31:for(;s.length>0;){c=r+s.shift();h=n;C=c+s.shift();l=h+s.shift();n=l+s.shift();r=C+(1===s.length?s.shift():0);bezierCurveTo(c,h,C,l,r,n);if(0===s.length)break;c=r;h=n+s.shift();C=c+s.shift();l=h+s.shift();r=C+s.shift();n=l+(1===s.length?s.shift():0);bezierCurveTo(c,h,C,l,r,n)}break;default:if(m<32)throw new FormatError(`unknown operator: ${m}`);if(m<247)s.push(m-139);else if(m<251)s.push(256*(m-247)+e[o++]+108);else if(m<255)s.push(256*-(m-251)-e[o++]-108);else{s.push((e[o]<<24|e[o+1]<<16|e[o+2]<<8|e[o+3])/65536);o+=4}}p&&(s.length=0)}}(e)}const ta=[];class Commands{cmds=[];add(e,t){if(t)if(isNumberArray(t,null))this.cmds.push(e,...t);else{warn(`Commands.add - "${e}" has at least one non-number arg: "${t}".`);const i=t.map((e=>"number"==typeof e?e:0));this.cmds.push(e,...i)}else this.cmds.push(e)}}class CompiledFont{constructor(e){this.fontMatrix=e;this.compiledGlyphs=Object.create(null);this.compiledCharCodeToGlyphId=Object.create(null)}getPathJs(e){const{charCode:t,glyphId:i}=lookupCmap(this.cmap,e);let a,s=this.compiledGlyphs[i];if(!s){try{s=this.compileGlyph(this.glyphs[i],i)}catch(e){s=ta;a=e}this.compiledGlyphs[i]=s}this.compiledCharCodeToGlyphId[t]??=i;if(a)throw a;return s}compileGlyph(e,t){if(!e||0===e.length||14===e[0])return ta;let i=this.fontMatrix;if(this.isCFFCIDFont){const e=this.fdSelect.getFDIndex(t);if(e>=0&&e2*getUint16(e,t)}const r=[];let n=s(t,0);for(let i=a;ie+(t.getSize()+3&-4)),0)}write(){const e=this.getSize(),t=new DataView(new ArrayBuffer(e)),i=e>131070,a=i?4:2,s=new DataView(new ArrayBuffer((this.glyphs.length+1)*a));i?s.setUint32(0,0):s.setUint16(0,0);let r=0,n=0;for(const e of this.glyphs){r+=e.write(r,t);r=r+3&-4;n+=a;i?s.setUint32(n,r):s.setUint16(n,r>>1)}return{isLocationLong:i,loca:new Uint8Array(s.buffer),glyf:new Uint8Array(t.buffer)}}scale(e){for(let t=0,i=this.glyphs.length;te+t.getSize()),0);return this.header.getSize()+e}write(e,t){if(!this.header)return 0;const i=e;e+=this.header.write(e,t);if(this.simple)e+=this.simple.write(e,t);else for(const i of this.composites)e+=i.write(e,t);return e-i}scale(e){if(!this.header)return;const t=(this.header.xMin+this.header.xMax)/2;this.header.scale(t,e);if(this.simple)this.simple.scale(t,e);else for(const i of this.composites)i.scale(t,e)}}class GlyphHeader{constructor({numberOfContours:e,xMin:t,yMin:i,xMax:a,yMax:s}){this.numberOfContours=e;this.xMin=t;this.yMin=i;this.xMax=a;this.yMax=s}static parse(e,t){return[10,new GlyphHeader({numberOfContours:t.getInt16(e),xMin:t.getInt16(e+2),yMin:t.getInt16(e+4),xMax:t.getInt16(e+6),yMax:t.getInt16(e+8)})]}getSize(){return 10}write(e,t){t.setInt16(e,this.numberOfContours);t.setInt16(e+2,this.xMin);t.setInt16(e+4,this.yMin);t.setInt16(e+6,this.xMax);t.setInt16(e+8,this.yMax);return 10}scale(e,t){this.xMin=Math.round(e+(this.xMin-e)*t);this.xMax=Math.round(e+(this.xMax-e)*t)}}class Contour{constructor({flags:e,xCoordinates:t,yCoordinates:i}){this.xCoordinates=t;this.yCoordinates=i;this.flags=e}}class SimpleGlyph{constructor({contours:e,instructions:t}){this.contours=e;this.instructions=t}static parse(e,t,i){const a=[];for(let s=0;s255?e+=2:g>0&&(e+=1);t=r;g=Math.abs(n-i);g>255?e+=2:g>0&&(e+=1);i=n}}return e}write(e,t){const i=e,a=[],s=[],r=[];let n=0,g=0;for(const i of this.contours){for(let e=0,t=i.xCoordinates.length;e=0?18:2;a.push(e)}else a.push(c)}n=o;const C=i.yCoordinates[e];c=C-g;if(0===c){t|=32;s.push(0)}else{const e=Math.abs(c);if(e<=255){t|=c>=0?36:4;s.push(e)}else s.push(c)}g=C;r.push(t)}t.setUint16(e,a.length-1);e+=2}t.setUint16(e,this.instructions.length);e+=2;if(this.instructions.length){new Uint8Array(t.buffer,0,t.buffer.byteLength).set(this.instructions,e);e+=this.instructions.length}for(const i of r)t.setUint8(e++,i);for(let i=0,s=a.length;i=-128&&this.argument1<=127&&this.argument2>=-128&&this.argument2<=127||(e+=2):this.argument1>=0&&this.argument1<=255&&this.argument2>=0&&this.argument2<=255||(e+=2);return e}write(e,t){const i=e;2&this.flags?this.argument1>=-128&&this.argument1<=127&&this.argument2>=-128&&this.argument2<=127||(this.flags|=1):this.argument1>=0&&this.argument1<=255&&this.argument2>=0&&this.argument2<=255||(this.flags|=1);t.setUint16(e,this.flags);t.setUint16(e+2,this.glyphIndex);e+=4;if(1&this.flags){if(2&this.flags){t.setInt16(e,this.argument1);t.setInt16(e+2,this.argument2)}else{t.setUint16(e,this.argument1);t.setUint16(e+2,this.argument2)}e+=4}else{t.setUint8(e,this.argument1);t.setUint8(e+1,this.argument2);e+=2}if(256&this.flags){t.setUint16(e,this.instructions.length);e+=2;if(this.instructions.length){new Uint8Array(t.buffer,0,t.buffer.byteLength).set(this.instructions,e);e+=this.instructions.length}}return e-i}scale(e,t){}}function writeInt16(e,t,i){e[t]=i>>8&255;e[t+1]=255&i}function writeInt32(e,t,i){e[t]=i>>24&255;e[t+1]=i>>16&255;e[t+2]=i>>8&255;e[t+3]=255&i}function writeData(e,t,i){if(i instanceof Uint8Array)e.set(i,t);else if("string"==typeof i)for(let a=0,s=i.length;ai;){i<<=1;a++}const s=i*t;return{range:s,entry:a,rangeShift:t*e-s}}toArray(){let e=this.sfnt;const t=this.tables,i=Object.keys(t);i.sort();const a=i.length;let s,r,n,g,o,c=12+16*a;const C=[c];for(s=0;s>>0;C.push(c)}const h=new Uint8Array(c);for(s=0;s>>0}writeInt32(h,c+4,e);writeInt32(h,c+8,C[s]);writeInt32(h,c+12,t[o].length);c+=16}return h}addTable(e,t){if(e in this.tables)throw new Error("Table "+e+" already exists");this.tables[e]=t}}const sa=[4],ra=[5],na=[6],ga=[7],oa=[8],Ia=[12,35],ca=[14],Ca=[21],ha=[22],la=[30],Ba=[31];class Type1CharString{constructor(){this.width=0;this.lsb=0;this.flexing=!1;this.output=[];this.stack=[]}convert(e,t,i){const a=e.length;let s,r,n,g=!1;for(let o=0;oa)return!0;const s=a-e;for(let e=s;e>8&255,255&t);else{t=65536*t|0;this.output.push(255,t>>24&255,t>>16&255,t>>8&255,255&t)}}this.output.push(...t);i?this.stack.splice(s,e):this.stack.length=0;return!1}}function isHexDigit(e){return e>=48&&e<=57||e>=65&&e<=70||e>=97&&e<=102}function decrypt(e,t,i){if(i>=e.length)return new Uint8Array(0);let a,s,r=0|t;for(a=0;a>8;r=52845*(t+r)+22719&65535}return g}function isSpecial(e){return 47===e||91===e||93===e||123===e||125===e||40===e||41===e}class Type1Parser{constructor(e,t,i){if(t){const t=e.getBytes(),i=!((isHexDigit(t[0])||isWhiteSpace(t[0]))&&isHexDigit(t[1])&&isHexDigit(t[2])&&isHexDigit(t[3])&&isHexDigit(t[4])&&isHexDigit(t[5])&&isHexDigit(t[6])&&isHexDigit(t[7]));e=new Stream(i?decrypt(t,55665,4):function decryptAscii(e,t,i){let a=0|t;const s=e.length,r=new Uint8Array(s>>>1);let n,g;for(n=0,g=0;n>8;a=52845*(e+a)+22719&65535}}return r.slice(i,g)}(t,55665,4))}this.seacAnalysisEnabled=!!i;this.stream=e;this.nextChar()}readNumberArray(){this.getToken();const e=[];for(;;){const t=this.getToken();if(null===t||"]"===t||"}"===t)break;e.push(parseFloat(t||0))}return e}readNumber(){const e=this.getToken();return parseFloat(e||0)}readInt(){const e=this.getToken();return 0|parseInt(e||0,10)}readBoolean(){return"true"===this.getToken()?1:0}nextChar(){return this.currentChar=this.stream.getByte()}prevChar(){this.stream.skip(-2);return this.currentChar=this.stream.getByte()}getToken(){let e=!1,t=this.currentChar;for(;;){if(-1===t)return null;if(e)10!==t&&13!==t||(e=!1);else if(37===t)e=!0;else if(!isWhiteSpace(t))break;t=this.nextChar()}if(isSpecial(t)){this.nextChar();return String.fromCharCode(t)}let i="";do{i+=String.fromCharCode(t);t=this.nextChar()}while(t>=0&&!isWhiteSpace(t)&&!isSpecial(t));return i}readCharStrings(e,t){return-1===t?e:decrypt(e,4330,t)}extractFontProgram(e){const t=this.stream,i=[],a=[],s=Object.create(null);s.lenIV=4;const r={subrs:[],charstrings:[],properties:{privateData:s}};let n,g,o,c;for(;null!==(n=this.getToken());)if("/"===n){n=this.getToken();switch(n){case"CharStrings":this.getToken();this.getToken();this.getToken();this.getToken();for(;;){n=this.getToken();if(null===n||"end"===n)break;if("/"!==n)continue;const e=this.getToken();g=this.readInt();this.getToken();o=g>0?t.getBytes(g):new Uint8Array(0);c=r.properties.privateData.lenIV;const i=this.readCharStrings(o,c);this.nextChar();n=this.getToken();"noaccess"===n?this.getToken():"/"===n&&this.prevChar();a.push({glyph:e,encoded:i})}break;case"Subrs":this.readInt();this.getToken();for(;"dup"===this.getToken();){const e=this.readInt();g=this.readInt();this.getToken();o=g>0?t.getBytes(g):new Uint8Array(0);c=r.properties.privateData.lenIV;const a=this.readCharStrings(o,c);this.nextChar();n=this.getToken();"noaccess"===n&&this.getToken();i[e]=a}break;case"BlueValues":case"OtherBlues":case"FamilyBlues":case"FamilyOtherBlues":const e=this.readNumberArray();e.length>0&&e.length,0;break;case"StemSnapH":case"StemSnapV":r.properties.privateData[n]=this.readNumberArray();break;case"StdHW":case"StdVW":r.properties.privateData[n]=this.readNumberArray()[0];break;case"BlueShift":case"lenIV":case"BlueFuzz":case"BlueScale":case"LanguageGroup":r.properties.privateData[n]=this.readNumber();break;case"ExpansionFactor":r.properties.privateData[n]=this.readNumber()||.06;break;case"ForceBold":r.properties.privateData[n]=this.readBoolean()}}for(const{encoded:t,glyph:s}of a){const a=new Type1CharString,n=a.convert(t,i,this.seacAnalysisEnabled);let g=a.output;n&&(g=[14]);const o={glyphName:s,charstring:g,width:a.width,lsb:a.lsb,seac:a.seac};".notdef"===s?r.charstrings.unshift(o):r.charstrings.push(o);if(e.builtInEncoding){const t=e.builtInEncoding.indexOf(s);t>-1&&void 0===e.widths[t]&&t>=e.firstChar&&t<=e.lastChar&&(e.widths[t]=a.width)}}return r}extractFontHeader(e){let t;for(;null!==(t=this.getToken());)if("/"===t){t=this.getToken();switch(t){case"FontMatrix":const i=this.readNumberArray();e.fontMatrix=i;break;case"Encoding":const a=this.getToken();let s;if(/^\d+$/.test(a)){s=[];const e=0|parseInt(a,10);this.getToken();for(let i=0;i=s){n+=i;for(;n=0&&(a[e]=s)}}return type1FontGlyphMapping(e,a,i)}hasGlyphId(e){if(e<0||e>=this.numGlyphs)return!1;if(0===e)return!0;return this.charstrings[e-1].charstring.length>0}getSeacs(e){const t=[];for(let i=0,a=e.length;i0;e--)t[e]-=t[e-1];Q.setByName(e,t)}r.topDict.privateDict=Q;const u=new CFFIndex;for(C=0,h=a.length;C0&&e.toUnicode.amend(t)}class fonts_Glyph{constructor(e,t,i,a,s,r,n,g,o){this.originalCharCode=e;this.fontChar=t;this.unicode=i;this.accent=a;this.width=s;this.vmetric=r;this.operatorListId=n;this.isSpace=g;this.isInFont=o}get category(){return shadow(this,"category",function getCharUnicodeCategory(e){const t=vi.get(e);if(t)return t;const i=e.match(Yi),a={isWhitespace:!!i?.[1],isZeroWidthDiacritic:!!i?.[2],isInvisibleFormatMark:!!i?.[3]};vi.set(e,a);return a}(this.unicode),!0)}}function int16(e,t){return(e<<8)+t}function writeSignedInt16(e,t,i){e[t+1]=i;e[t]=i>>>8}function signedInt16(e,t){const i=(e<<8)+t;return 32768&i?i-65536:i}function string16(e){return String.fromCharCode(e>>8&255,255&e)}function safeString16(e){e>32767?e=32767:e<-32768&&(e=-32768);return String.fromCharCode(e>>8&255,255&e)}function isTrueTypeCollectionFile(e){return"ttcf"===bytesToString(e.peekBytes(4))}function getFontFileType(e,{type:t,subtype:i,composite:a}){let s,r;if(function isTrueTypeFile(e){const t=e.peekBytes(4);return 65536===readUint32(t,0)||"true"===bytesToString(t)}(e)||isTrueTypeCollectionFile(e))s=a?"CIDFontType2":"TrueType";else if(function isOpenTypeFile(e){return"OTTO"===bytesToString(e.peekBytes(4))}(e))s=a?"CIDFontType2":"OpenType";else if(function isType1File(e){const t=e.peekBytes(2);return 37===t[0]&&33===t[1]||128===t[0]&&1===t[1]}(e))s=a?"CIDFontType0":"MMType1"===t?"MMType1":"Type1";else if(function isCFFFile(e){const t=e.peekBytes(4);return t[0]>=1&&t[3]>=1&&t[3]<=4}(e))if(a){s="CIDFontType0";r="CIDFontType0C"}else{s="MMType1"===t?"MMType1":"Type1";r="Type1C"}else{warn("getFontFileType: Unable to detect correct font file Type/Subtype.");s=t;r=i}return[s,r]}function applyStandardFontGlyphMap(e,t){for(const i in t)e[+i]=t[i]}function buildToFontChar(e,t,i){const a=[];let s;for(let i=0,r=e.length;iC){o++;if(o>=Qa.length){warn("Ran out of space in font private use area.");break}c=Qa[o][0];C=Qa[o][1]}const E=c++;0===Q&&(Q=i);let u=a.get(l);"string"==typeof u&&(u=u.codePointAt(0));if(u&&!(h=u,Qa[0][0]<=h&&h<=Qa[0][1]||Qa[1][0]<=h&&h<=Qa[1][1])&&!g.has(Q)){r.set(u,Q);g.add(Q)}s[E]=Q;n[l]=E}var h;return{toFontChar:n,charCodeToGlyphId:s,toUnicodeExtraMap:r,nextAvailableFontCharCode:c}}function createCmapTable(e,t,i){const a=function getRanges(e,t,i){const a=[];for(const t in e)e[t]>=i||a.push({fontCharCode:0|t,glyphId:e[t]});if(t)for(const[e,s]of t)s>=i||a.push({fontCharCode:e,glyphId:s});0===a.length&&a.push({fontCharCode:0,glyphId:0});a.sort((function fontGetRangesSort(e,t){return e.fontCharCode-t.fontCharCode}));const s=[],r=a.length;for(let e=0;e65535?2:1;let r,n,g,o,c="\0\0"+string16(s)+"\0\0"+string32(4+8*s);for(r=a.length-1;r>=0&&!(a[r][0]<=65535);--r);const C=r+1;a[r][0]<65535&&65535===a[r][1]&&(a[r][1]=65534);const h=a[r][1]<65535?1:0,l=C+h,Q=OpenTypeFileBuilder.getSearchParams(l,2);let E,u,d,f,p="",m="",y="",w="",D="",b=0;for(r=0,n=C;r0){m+="ÿÿ";p+="ÿÿ";y+="\0";w+="\0\0"}const F="\0\0"+string16(2*l)+string16(Q.range)+string16(Q.entry)+string16(Q.rangeShift)+m+"\0\0"+p+y+w+D;let S="",k="";if(s>1){c+="\0\0\n"+string32(4+8*s+4+F.length);S="";for(r=0,n=a.length;re||!g)&&(g=e);o 123 are reserved for internal usage");n|=1<65535&&(o=65535)}else{g=0;o=255}const C=e.bbox||[0,0,0,0],h=i.unitsPerEm||(e.fontMatrix?1/Math.max(...e.fontMatrix.slice(0,4).map(Math.abs)):1e3),l=e.ascentScaled?1:h/Ea,Q=i.ascent||Math.round(l*(e.ascent||C[3]));let E=i.descent||Math.round(l*(e.descent||C[1]));E>0&&e.descent>0&&C[1]<0&&(E=-E);const u=i.yMax||Q,d=-i.yMin||-E;return"\0$ô\0\0\0Š»\0\0\0ŒŠ»\0\0ß\x001\0\0\0\0"+String.fromCharCode(e.fixedPitch?9:0)+"\0\0\0\0\0\0"+string32(a)+string32(s)+string32(r)+string32(n)+"*21*"+string16(e.italicAngle?1:0)+string16(g||e.firstChar)+string16(o||e.lastChar)+string16(Q)+string16(E)+"\0d"+string16(u)+string16(d)+"\0\0\0\0\0\0\0\0"+string16(e.xHeight)+string16(e.capHeight)+string16(0)+string16(g||e.firstChar)+"\0"}function createPostTable(e){return"\0\0\0"+string32(Math.floor(65536*e.italicAngle))+"\0\0\0\0"+string32(e.fixedPitch?1:0)+"\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"}function createPostscriptName(e){return e.replaceAll(/[^\x21-\x7E]|[[\](){}<>/%]/g,"").slice(0,63)}function createNameTable(e,t){t||(t=[[],[]]);const i=[t[0][0]||"Original licence",t[0][1]||e,t[0][2]||"Unknown",t[0][3]||"uniqueID",t[0][4]||e,t[0][5]||"Version 0.11",t[0][6]||createPostscriptName(e),t[0][7]||"Unknown",t[0][8]||"Unknown",t[0][9]||"Unknown"],a=[];let s,r,n,g,o;for(s=0,r=i.length;s0;if((n||g)&&"CIDFontType2"===i&&this.cidEncoding.startsWith("Identity-")){const i=e.cidToGidMap,a=[];applyStandardFontGlyphMap(a,$i());/Arial-?Black/i.test(t)?applyStandardFontGlyphMap(a,Aa()):/Calibri/i.test(t)&&applyStandardFontGlyphMap(a,ea());if(i){for(const e in a){const t=a[e];void 0!==i[t]&&(a[+e]=i[t])}i.length!==this.toUnicode.length&&e.hasIncludedToUnicodeMap&&this.toUnicode instanceof IdentityToUnicodeMap&&this.toUnicode.forEach((function(e,t){const s=a[e];void 0===i[s]&&(a[+e]=t)}))}this.toUnicode instanceof IdentityToUnicodeMap||this.toUnicode.forEach((function(e,t){a[+e]=t}));this.toFontChar=a;this.toUnicode=new ToUnicodeMap(a)}else if(/Symbol/i.test(a))this.toFontChar=buildToFontChar(wi,xi(),this.differences);else if(/Dingbats/i.test(a))this.toFontChar=buildToFontChar(Di,Mi(),this.differences);else if(n||g){const e=buildToFontChar(this.defaultEncoding,xi(),this.differences);"CIDFontType2"!==i||this.cidEncoding.startsWith("Identity-")||this.toUnicode instanceof IdentityToUnicodeMap||this.toUnicode.forEach((function(t,i){e[+t]=i}));this.toFontChar=e}else{const e=xi(),i=[];this.toUnicode.forEach(((t,a)=>{if(!this.composite){const i=getUnicodeForGlyph(this.differences[t]||this.defaultEncoding[t],e);-1!==i&&(a=i)}i[+t]=a}));this.composite&&this.toUnicode instanceof IdentityToUnicodeMap&&/Tahoma|Verdana/i.test(t)&&applyStandardFontGlyphMap(i,$i());this.toFontChar=i}amendFallbackToUnicode(e);this.loadedName=a.split("-",1)[0]}checkAndRepair(e,t,i){const a=["OS/2","cmap","head","hhea","hmtx","maxp","name","post","loca","glyf","fpgm","prep","cvt ","CFF "];function readTables(e,t){const i=Object.create(null);i["OS/2"]=null;i.cmap=null;i.head=null;i.hhea=null;i.hmtx=null;i.maxp=null;i.name=null;i.post=null;for(let s=0;s>>0,a=e.getInt32()>>>0,s=e.getInt32()>>>0,r=e.pos;e.pos=e.start||0;e.skip(a);const n=e.getBytes(s);e.pos=r;if("head"===t){n[8]=n[9]=n[10]=n[11]=0;n[17]|=32}return{tag:t,checksum:i,length:s,offset:a,data:n}}function readOpenTypeHeader(e){return{version:e.getString(4),numTables:e.getUint16(),searchRange:e.getUint16(),entrySelector:e.getUint16(),rangeShift:e.getUint16()}}function sanitizeGlyph(e,t,i,a,s,r){const n={length:0,sizeOfInstructions:0};if(t<0||t>=e.length||i>e.length||i-t<=12)return n;const g=e.subarray(t,i),o=signedInt16(g[2],g[3]),c=signedInt16(g[4],g[5]),C=signedInt16(g[6],g[7]),h=signedInt16(g[8],g[9]);if(o>C){writeSignedInt16(g,2,C);writeSignedInt16(g,6,o)}if(c>h){writeSignedInt16(g,4,h);writeSignedInt16(g,8,c)}const l=signedInt16(g[0],g[1]);if(l<0){if(l<-1)return n;a.set(g,s);n.length=g.length;return n}let Q,E=10,u=0;for(Q=0;Qg.length)return n;if(!r&&f>0){a.set(g.subarray(0,d),s);a.set([0,0],s+d);a.set(g.subarray(p,y),s+d+2);y-=f;g.length-y>3&&(y=y+3&-4);n.length=y;return n}if(g.length-y>3){y=y+3&-4;a.set(g.subarray(0,y),s);n.length=y;return n}a.set(g,s);n.length=g.length;return n}function readNameTable(e){const i=(t.start||0)+e.offset;t.pos=i;const a=[[],[]],s=[],r=e.length,n=i+r;if(0!==t.getUint16()||r<6)return[a,s];const g=t.getUint16(),o=t.getUint16();let c,C;for(c=0;cn)continue;t.pos=r;const g=e.name;if(e.encoding){let i="";for(let a=0,s=e.length;a0&&(c+=e-1)}}else{if(d||p){warn("TT: nested FDEFs not allowed");u=!0}d=!0;h=c;n=l.pop();t.functionsDefined[n]={data:o,i:c}}else if(!d&&!p){n=l.at(-1);if(isNaN(n))info("TT: CALL empty stack (or invalid entry).");else{t.functionsUsed[n]=!0;if(n in t.functionsStackDeltas){const e=l.length+t.functionsStackDeltas[n];if(e<0){warn("TT: CALL invalid functions stack delta.");t.hintsValid=!1;return}l.length=e}else if(n in t.functionsDefined&&!E.includes(n)){Q.push({data:o,i:c,stackTop:l.length-1});E.push(n);g=t.functionsDefined[n];if(!g){warn("TT: CALL non-existent function");t.hintsValid=!1;return}o=g.data;c=g.i}}}if(!d&&!p){let t=0;e<=142?t=s[e]:e>=192&&e<=223?t=-1:e>=224&&(t=-2);if(e>=113&&e<=117){a=l.pop();isNaN(a)||(t=2*-a)}for(;t<0&&l.length>0;){l.pop();t++}for(;t>0;){l.push(NaN);t--}}}t.tooComplexToFollowFunctions=u;const m=[o];c>o.length&&m.push(new Uint8Array(c-o.length));if(h>C){warn("TT: complementing a missing function tail");m.push(new Uint8Array([34,45]))}!function foldTTTable(e,t){if(t.length>1){let i,a,s=0;for(i=0,a=t.length;i>>0,r=[];for(let t=0;t>>0);const n={ttcTag:t,majorVersion:i,minorVersion:a,numFonts:s,offsetTable:r};switch(i){case 1:return n;case 2:n.dsigTag=e.getInt32()>>>0;n.dsigLength=e.getInt32()>>>0;n.dsigOffset=e.getInt32()>>>0;return n}throw new FormatError(`Invalid TrueType Collection majorVersion: ${i}.`)}(e),s=t.split("+");let r;for(let n=0;n0||!(i.cMap instanceof IdentityCMap));if("OTTO"===r.version&&!t||!n.head||!n.hhea||!n.maxp||!n.post){o=new Stream(n["CFF "].data);g=new CFFFont(o,i);adjustWidths(i);return this.convert(e,g,i)}delete n.glyf;delete n.loca;delete n.fpgm;delete n.prep;delete n["cvt "];this.isOpenType=!0}if(!n.maxp)throw new FormatError('Required "maxp" table is not found');t.pos=(t.start||0)+n.maxp.offset;let C=t.getInt32();const h=t.getUint16();if(65536!==C&&20480!==C){if(6===n.maxp.length)C=20480;else{if(!(n.maxp.length>=32))throw new FormatError('"maxp" table has a wrong version number');C=65536}!function writeUint32(e,t,i){e[t+3]=255&i;e[t+2]=i>>>8;e[t+1]=i>>>16;e[t]=i>>>24}(n.maxp.data,0,C)}if(i.scaleFactors?.length===h&&c){const{scaleFactors:e}=i,t=int16(n.head.data[50],n.head.data[51]),a=new GlyfTable({glyfTable:n.glyf.data,isGlyphLocationsLong:t,locaTable:n.loca.data,numGlyphs:h});a.scale(e);const{glyf:s,loca:r,isLocationLong:g}=a.write();n.glyf.data=s;n.loca.data=r;if(g!==!!t){n.head.data[50]=0;n.head.data[51]=g?1:0}const o=n.hmtx.data;for(let t=0;t>8&255;o[i+1]=255&a;writeSignedInt16(o,i+2,Math.round(e[t]*signedInt16(o[i+2],o[i+3])))}}let l=h+1,Q=!0;if(l>65535){Q=!1;l=h;warn("Not enough space in glyfs to duplicate first glyph.")}let E=0,u=0;if(C>=65536&&n.maxp.length>=32){t.pos+=8;if(t.getUint16()>2){n.maxp.data[14]=0;n.maxp.data[15]=2}t.pos+=4;E=t.getUint16();t.pos+=4;u=t.getUint16()}n.maxp.data[4]=l>>8;n.maxp.data[5]=255&l;const d=function sanitizeTTPrograms(e,t,i,a){const s={functionsDefined:[],functionsUsed:[],functionsStackDeltas:[],tooComplexToFollowFunctions:!1,hintsValid:!0};e&&sanitizeTTProgram(e,s);t&&sanitizeTTProgram(t,s);e&&function checkInvalidFunctions(e,t){if(!e.tooComplexToFollowFunctions)if(e.functionsDefined.length>t){warn("TT: more functions defined than expected");e.hintsValid=!1}else for(let i=0,a=e.functionsUsed.length;it){warn("TT: invalid function id: "+i);e.hintsValid=!1;return}if(e.functionsUsed[i]&&!e.functionsDefined[i]){warn("TT: undefined function: "+i);e.hintsValid=!1;return}}}(s,a);if(i&&1&i.length){const e=new Uint8Array(i.length+1);e.set(i.data);i.data=e}return s.hintsValid}(n.fpgm,n.prep,n["cvt "],E);if(!d){delete n.fpgm;delete n.prep;delete n["cvt "]}!function sanitizeMetrics(e,t,i,a,s,r){if(!t){i&&(i.data=null);return}e.pos=(e.start||0)+t.offset;e.pos+=4;e.pos+=2;e.pos+=2;e.pos+=2;e.pos+=2;e.pos+=2;e.pos+=2;e.pos+=2;e.pos+=2;e.pos+=2;const n=e.getUint16();e.pos+=8;e.pos+=2;let g=e.getUint16();if(0!==n){if(!(2&int16(a.data[44],a.data[45]))){t.data[22]=0;t.data[23]=0}}if(g>s){info(`The numOfMetrics (${g}) should not be greater than the numGlyphs (${s}).`);g=s;t.data[34]=(65280&g)>>8;t.data[35]=255&g}const o=s-g-(i.length-4*g>>1);if(o>0){const e=new Uint8Array(i.length+2*o);e.set(i.data);if(r){e[i.length]=i.data[2];e[i.length+1]=i.data[3]}i.data=e}}(t,n.hhea,n.hmtx,n.head,l,Q);if(!n.head)throw new FormatError('Required "head" table is not found');!function sanitizeHead(e,t,i){const a=e.data,s=function int32(e,t,i,a){return(e<<24)+(t<<16)+(i<<8)+a}(a[0],a[1],a[2],a[3]);if(s>>16!=1){info("Attempting to fix invalid version in head table: "+s);a[0]=0;a[1]=1;a[2]=0;a[3]=0}const r=int16(a[50],a[51]);if(r<0||r>1){info("Attempting to fix invalid indexToLocFormat in head table: "+r);const e=t+1;if(i===e<<1){a[50]=0;a[51]=0}else{if(i!==e<<2)throw new FormatError("Could not fix indexToLocFormat: "+r);a[50]=0;a[51]=1}}}(n.head,h,c?n.loca.length:0);let f=Object.create(null);if(c){const e=int16(n.head.data[50],n.head.data[51]),t=function sanitizeGlyphLocations(e,t,i,a,s,r,n){let g,o,c;if(a){g=4;o=function fontItemDecodeLong(e,t){return e[t]<<24|e[t+1]<<16|e[t+2]<<8|e[t+3]};c=function fontItemEncodeLong(e,t,i){e[t]=i>>>24&255;e[t+1]=i>>16&255;e[t+2]=i>>8&255;e[t+3]=255&i}}else{g=2;o=function fontItemDecode(e,t){return e[t]<<9|e[t+1]<<1};c=function fontItemEncode(e,t,i){e[t]=i>>9&255;e[t+1]=i>>1&255}}const C=r?i+1:i,h=g*(1+C),l=new Uint8Array(h);l.set(e.data.subarray(0,h));e.data=l;const Q=t.data,E=Q.length,u=new Uint8Array(E);let d,f;const p=[];for(d=0,f=0;dE&&(e=E);p.push({index:d,offset:e,endOffset:0})}p.sort(((e,t)=>e.offset-t.offset));for(d=0;de.index-t.index));for(d=0;dn&&(n=e.sizeOfInstructions);w+=t;c(l,f,w)}if(0===w){const e=new Uint8Array([0,1,0,0,0,0,0,0,0,0,0,0,0,0,49,0]);for(d=0,f=g;di+w)t.data=u.subarray(0,i+w);else{t.data=new Uint8Array(i+w);t.data.set(u.subarray(0,w))}t.data.set(u.subarray(0,i),w);c(e.data,l.length-g,w+i)}else t.data=u.subarray(0,w);return{missingGlyphs:y,maxSizeOfInstructions:n}}(n.loca,n.glyf,h,e,d,Q,u);f=t.missingGlyphs;if(C>=65536&&n.maxp.length>=32){n.maxp.data[26]=t.maxSizeOfInstructions>>8;n.maxp.data[27]=255&t.maxSizeOfInstructions}}if(!n.hhea)throw new FormatError('Required "hhea" table is not found');if(0===n.hhea.data[10]&&0===n.hhea.data[11]){n.hhea.data[10]=255;n.hhea.data[11]=255}const p={unitsPerEm:int16(n.head.data[18],n.head.data[19]),yMax:signedInt16(n.head.data[42],n.head.data[43]),yMin:signedInt16(n.head.data[38],n.head.data[39]),ascent:signedInt16(n.hhea.data[4],n.hhea.data[5]),descent:signedInt16(n.hhea.data[6],n.hhea.data[7]),lineGap:signedInt16(n.hhea.data[8],n.hhea.data[9])};this.ascent=p.ascent/p.unitsPerEm;this.descent=p.descent/p.unitsPerEm;this.lineGap=p.lineGap/p.unitsPerEm;if(this.cssFontInfo?.lineHeight){this.lineHeight=this.cssFontInfo.metrics.lineHeight;this.lineGap=this.cssFontInfo.metrics.lineGap}else this.lineHeight=this.ascent-this.descent+this.lineGap;n.post&&function readPostScriptTable(e,i,a){const s=(t.start||0)+e.offset;t.pos=s;const r=s+e.length,n=t.getInt32();t.skip(28);let g,o,c=!0;switch(n){case 65536:g=Wi;break;case 131072:const e=t.getUint16();if(e!==a){c=!1;break}const s=[];for(o=0;o=32768){c=!1;break}s.push(e)}if(!c)break;const C=[],h=[];for(;t.pos65535)throw new FormatError("Max size of CID is 65,535");let s=-1;t?s=a:void 0!==e[a]&&(s=e[a]);s>=0&&s>>0;let C=!1;if(g?.platformId!==s||g?.encodingId!==r){if(0!==s||0!==r&&1!==r&&3!==r)if(1===s&&0===r)C=!0;else if(3!==s||1!==r||!a&&g){if(i&&3===s&&0===r){C=!0;let i=!0;if(e>3;e.push(a);i=Math.max(a,i)}const a=[];for(let e=0;e<=i;e++)a.push({firstCode:t.getUint16(),entryCount:t.getUint16(),idDelta:signedInt16(t.getByte(),t.getByte()),idRangePos:t.pos+t.getUint16()});for(let i=0;i<256;i++)if(0===e[i]){t.pos=a[0].idRangePos+2*i;Q=t.getUint16();h.push({charCode:i,glyphId:Q})}else{const s=a[e[i]];for(l=0;l>1;t.skip(6);const i=[];let a;for(a=0;a>1)-(e-a);s.offsetIndex=n;g=Math.max(g,n+s.end-s.start+1)}else s.offsetIndex=-1}const o=[];for(l=0;l>>0;for(l=0;l>>0,i=t.getInt32()>>>0;let a=t.getInt32()>>>0;for(let t=e;t<=i;t++)h.push({charCode:t,glyphId:a++})}}}h.sort((function(e,t){return e.charCode-t.charCode}));for(let e=1;e=61440&&t<=61695&&(t&=255);m[t]=e.glyphId}else for(const e of r)m[e.charCode]=e.glyphId;if(i.glyphNames&&(g.length||this.differences.length))for(let e=0;e<256;++e){if(!o&&void 0!==m[e])continue;const t=this.differences[e]||g[e];if(!t)continue;const a=i.glyphNames.indexOf(t);a>0&&hasGlyph(a)&&(m[e]=a)}}0===m.length&&(m[0]=0);let y=l-1;Q||(y=0);if(!i.cssFontInfo){const e=adjustMapping(m,hasGlyph,y,this.toUnicode);this.toFontChar=e.toFontChar;n.cmap={tag:"cmap",data:createCmapTable(e.charCodeToGlyphId,e.toUnicodeExtraMap,l)};n["OS/2"]&&function validateOS2Table(e,t){t.pos=(t.start||0)+e.offset;const i=t.getUint16();t.skip(60);const a=t.getUint16();if(i<4&&768&a)return!1;if(t.getUint16()>t.getUint16())return!1;t.skip(6);if(0===t.getUint16())return!1;e.data[8]=e.data[9]=0;return!0}(n["OS/2"],t)||(n["OS/2"]={tag:"OS/2",data:createOS2Table(i,e.charCodeToGlyphId,p)})}if(!c)try{o=new Stream(n["CFF "].data);g=new CFFParser(o,i,Ki).parse();g.duplicateFirstGlyph();const e=new CFFCompiler(g);n["CFF "].data=e.compile()}catch{warn("Failed to compile font "+i.loadedName)}if(n.name){const[t,a]=readNameTable(n.name);n.name.data=createNameTable(e,t);this.psName=t[0][6]||null;i.composite||function adjustTrueTypeToUnicode(e,t,i){if(e.isInternalFont)return;if(e.hasIncludedToUnicodeMap)return;if(e.hasEncoding)return;if(e.toUnicode instanceof IdentityToUnicodeMap)return;if(!t)return;if(0===i.length)return;if(e.defaultEncoding===yi)return;for(const e of i)if(!isWinNameRecord(e))return;const a=yi,s=[],r=xi();for(const e in a){const t=a[e];if(""===t)continue;const i=r[t];void 0!==i&&(s[e]=String.fromCharCode(i))}s.length>0&&e.toUnicode.amend(s)}(i,this.isSymbolicFont,a)}else n.name={tag:"name",data:createNameTable(this.name)};const w=new OpenTypeFileBuilder(r.version);for(const e in n)w.addTable(e,n[e].data);return w.toArray()}convert(e,t,i){i.fixedPitch=!1;i.builtInEncoding&&function adjustType1ToUnicode(e,t){if(e.isInternalFont)return;if(e.hasIncludedToUnicodeMap)return;if(t===e.defaultEncoding)return;if(e.toUnicode instanceof IdentityToUnicodeMap)return;const i=[],a=xi();for(const s in t){if(e.hasEncoding&&(e.baseEncodingName||void 0!==e.differences[s]))continue;const r=getUnicodeForGlyph(t[s],a);-1!==r&&(i[s]=String.fromCharCode(r))}i.length>0&&e.toUnicode.amend(i)}(i,i.builtInEncoding);let s=1;t instanceof CFFFont&&(s=t.numGlyphs-1);const r=t.getGlyphMapping(i);let n=null,g=r,o=null;if(!i.cssFontInfo){n=adjustMapping(r,t.hasGlyphId.bind(t),s,this.toUnicode);this.toFontChar=n.toFontChar;g=n.charCodeToGlyphId;o=n.toUnicodeExtraMap}const c=t.numGlyphs;function getCharCodes(e,t){let i=null;for(const a in e)t===e[a]&&(i||=[]).push(0|a);return i}function createCharCode(e,t){for(const i in e)if(t===e[i])return 0|i;n.charCodeToGlyphId[n.nextAvailableFontCharCode]=t;return n.nextAvailableFontCharCode++}const C=t.seacs;if(n&&C?.length){const e=i.fontMatrix||a,s=t.getCharset(),g=Object.create(null);for(let t in C){t|=0;const i=C[t],a=mi[i[2]],o=mi[i[3]],c=s.indexOf(a),h=s.indexOf(o);if(c<0||h<0)continue;const l={x:i[0]*e[0]+i[1]*e[2]+e[4],y:i[0]*e[1]+i[1]*e[3]+e[5]},Q=getCharCodes(r,t);if(Q)for(const e of Q){const t=n.charCodeToGlyphId,i=createCharCode(t,c),a=createCharCode(t,h);g[e]={baseFontCharCode:i,accentFontCharCode:a,accentOffset:l}}}i.seacMap=g}const h=i.fontMatrix?1/Math.max(...i.fontMatrix.slice(0,4).map(Math.abs)):1e3,l=new OpenTypeFileBuilder("OTTO");l.addTable("CFF ",t.data);l.addTable("OS/2",createOS2Table(i,g));l.addTable("cmap",createCmapTable(g,o,c));l.addTable("head","\0\0\0\0\0\0\0\0\0\0_<õ\0\0"+safeString16(h)+"\0\0\0\0ž\v~'\0\0\0\0ž\v~'\0\0"+safeString16(i.descent)+"ÿ"+safeString16(i.ascent)+string16(i.italicAngle?2:0)+"\0\0\0\0\0\0\0");l.addTable("hhea","\0\0\0"+safeString16(i.ascent)+safeString16(i.descent)+"\0\0ÿÿ\0\0\0\0\0\0"+safeString16(i.capHeight)+safeString16(Math.tan(i.italicAngle)*i.xHeight)+"\0\0\0\0\0\0\0\0\0\0\0\0"+string16(c));l.addTable("hmtx",function fontFieldsHmtx(){const e=t.charstrings,i=t.cff?t.cff.widths:null;let a="\0\0\0\0";for(let t=1,s=c;t=65520&&e<=65535?0:e>=62976&&e<=63743?Hi()[e]||e:173===e?45:e}(i)}this.isType3Font&&(s=i);let C=null;if(this.seacMap?.[e]){c=!0;const t=this.seacMap[e];i=t.baseFontCharCode;C={fontChar:String.fromCodePoint(t.accentFontCharCode),offset:t.accentOffset}}let h="";"number"==typeof i&&(i<=1114111?h=String.fromCodePoint(i):warn(`charToGlyph - invalid fontCharCode: ${i}`));if(this.missingFile&&this.vertical&&1===h.length){const e=ji()[h.charCodeAt(0)];e&&(h=o=String.fromCharCode(e))}r=new fonts_Glyph(e,h,o,C,a,g,s,t,c);return this._glyphCache[e]=r}charsToGlyphs(e){let t=this._charsCache[e];if(t)return t;t=[];if(this.cMap){const i=Object.create(null),a=e.length;let s=0;for(;st.length%2==1,a=this.toUnicode instanceof IdentityToUnicodeMap?e=>this.toUnicode.charCodeOf(e):e=>this.toUnicode.charCodeOf(String.fromCodePoint(e));for(let s=0,r=e.length;s55295&&(r<57344||r>65533)&&s++;if(this.toUnicode){const e=a(r);if(-1!==e){if(hasCurrentBufErrors()){t.push(i.join(""));i.length=0}for(let t=(this.cMap?this.cMap.getCharCodeLength(e):1)-1;t>=0;t--)i.push(String.fromCharCode(e>>8*t&255));continue}}if(!hasCurrentBufErrors()){t.push(i.join(""));i.length=0}i.push(String.fromCodePoint(r))}t.push(i.join(""));return t}}class ErrorFont{constructor(e){this.error=e;this.loadedName="g_font_error";this.missingFile=!0}charsToGlyphs(){return[]}encodeString(e){return[e]}exportData(e=!1){return{error:this.error}}}const fa=2,pa=3,ma=4,ya=5,wa=6,Da=7;class Pattern{constructor(){unreachable("Cannot initialize Pattern.")}static parseShading(e,t,i,a,s){const r=e instanceof BaseStream?e.dict:e,n=r.get("ShadingType");try{switch(n){case fa:case pa:return new RadialAxialShading(r,t,i,a,s);case ma:case ya:case wa:case Da:return new MeshShading(e,t,i,a,s);default:throw new FormatError("Unsupported ShadingType: "+n)}}catch(e){if(e instanceof MissingDataException)throw e;warn(e);return new DummyShading}}}class BaseShading{static SMALL_NUMBER=1e-6;getIR(){unreachable("Abstract method `getIR` called.")}}class RadialAxialShading extends BaseShading{constructor(e,t,i,a,s){super();this.shadingType=e.get("ShadingType");let r=0;this.shadingType===fa?r=4:this.shadingType===pa&&(r=6);this.coordsArr=e.getArray("Coords");if(!isNumberArray(this.coordsArr,r))throw new FormatError("RadialAxialShading: Invalid /Coords array.");const n=ColorSpace.parse({cs:e.getRaw("CS")||e.getRaw("ColorSpace"),xref:t,resources:i,pdfFunctionFactory:a,localColorSpaceCache:s});this.bbox=lookupNormalRect(e.getArray("BBox"),null);let g=0,o=1;const c=e.getArray("Domain");isNumberArray(c,2)&&([g,o]=c);let C=!1,h=!1;const l=e.getArray("Extend");(function isBooleanArray(e,t){return Array.isArray(e)&&(null===t||e.length===t)&&e.every((e=>"boolean"==typeof e))})(l,2)&&([C,h]=l);if(!(this.shadingType!==pa||C&&h)){const[e,t,i,a,s,r]=this.coordsArr,n=Math.hypot(e-a,t-s);i<=r+n&&r<=i+n&&warn("Unsupported radial gradient.")}this.extendStart=C;this.extendEnd=h;const Q=e.getRaw("Function"),E=a.createFromArray(Q),u=(o-g)/840,d=this.colorStops=[];if(g>=o||u<=0){info("Bad shading domain.");return}const f=new Float32Array(n.numComps),p=new Float32Array(1);let m,y=0;p[0]=g;E(p,0,f,0);let w=n.getRgb(f,0);const D=Util.makeHexColor(w[0],w[1],w[2]);d.push([0,D]);let b=1;p[0]=g+u;E(p,0,f,0);let F=n.getRgb(f,0),S=F[0]-w[0]+1,k=F[1]-w[1]+1,R=F[2]-w[2]+1,N=F[0]-w[0]-1,G=F[1]-w[1]-1,x=F[2]-w[2]-1;for(let e=2;e<840;e++){p[0]=g+e*u;E(p,0,f,0);m=n.getRgb(f,0);const t=e-y;S=Math.min(S,(m[0]-w[0]+1)/t);k=Math.min(k,(m[1]-w[1]+1)/t);R=Math.min(R,(m[2]-w[2]+1)/t);N=Math.max(N,(m[0]-w[0]-1)/t);G=Math.max(G,(m[1]-w[1]-1)/t);x=Math.max(x,(m[2]-w[2]-1)/t);if(!(N<=S&&G<=k&&x<=R)){const e=Util.makeHexColor(F[0],F[1],F[2]);d.push([b/840,e]);S=m[0]-F[0]+1;k=m[1]-F[1]+1;R=m[2]-F[2]+1;N=m[0]-F[0]-1;G=m[1]-F[1]-1;x=m[2]-F[2]-1;y=b;w=F}b=e;F=m}const U=Util.makeHexColor(F[0],F[1],F[2]);d.push([1,U]);let M="transparent";if(e.has("Background")){m=n.getRgb(e.get("Background"),0);M=Util.makeHexColor(m[0],m[1],m[2])}if(!C){d.unshift([0,M]);d[1][0]+=BaseShading.SMALL_NUMBER}if(!h){d.at(-1)[0]-=BaseShading.SMALL_NUMBER;d.push([1,M])}this.colorStops=d}getIR(){const{coordsArr:e,shadingType:t}=this;let i,a,s,r,n;if(t===fa){a=[e[0],e[1]];s=[e[2],e[3]];r=null;n=null;i="axial"}else if(t===pa){a=[e[0],e[1]];s=[e[3],e[4]];r=e[2];n=e[5];i="radial"}else unreachable(`getPattern type unknown: ${t}`);return["RadialAxial",i,this.bbox,this.colorStops,a,s,r,n]}}class MeshStreamReader{constructor(e,t){this.stream=e;this.context=t;this.buffer=0;this.bufferLength=0;const i=t.numComps;this.tmpCompsBuf=new Float32Array(i);const a=t.colorSpace.numComps;this.tmpCsCompsBuf=t.colorFn?new Float32Array(a):this.tmpCompsBuf}get hasData(){if(this.stream.end)return this.stream.pos0)return!0;const e=this.stream.getByte();if(e<0)return!1;this.buffer=e;this.bufferLength=8;return!0}readBits(e){let t=this.buffer,i=this.bufferLength;if(32===e){if(0===i)return(this.stream.getByte()<<24|this.stream.getByte()<<16|this.stream.getByte()<<8|this.stream.getByte())>>>0;t=t<<24|this.stream.getByte()<<16|this.stream.getByte()<<8|this.stream.getByte();const e=this.stream.getByte();this.buffer=e&(1<>i)>>>0}if(8===e&&0===i)return this.stream.getByte();for(;i>i}align(){this.buffer=0;this.bufferLength=0}readFlag(){return this.readBits(this.context.bitsPerFlag)}readCoordinate(){const e=this.context.bitsPerCoordinate,t=this.readBits(e),i=this.readBits(e),a=this.context.decode,s=e<32?1/((1<r?r:e;t=t>n?n:t;i=ie*s[t])):i;let n,g=-2;const o=[];for(const[e,t]of a.map(((e,t)=>[e,t])).sort((([e],[t])=>e-t)))if(-1!==e)if(e===g+1){n.push(r[t]);g+=1}else{g=e;n=[r[t]];o.push(e,n)}return o}(e),i=new Dict(null);i.set("BaseFont",Name.get(e));i.set("Type",Name.get("Font"));i.set("Subtype",Name.get("CIDFontType2"));i.set("Encoding",Name.get("Identity-H"));i.set("CIDToGIDMap",Name.get("Identity"));i.set("W",t);i.set("FirstChar",t[0]);i.set("LastChar",t.at(-2)+t.at(-1).length-1);const a=new Dict(null);i.set("FontDescriptor",a);const s=new Dict(null);s.set("Ordering","Identity");s.set("Registry","Adobe");s.set("Supplement",0);i.set("CIDSystemInfo",s);return i}class PostScriptParser{constructor(e){this.lexer=e;this.operators=[];this.token=null;this.prev=null}nextToken(){this.prev=this.token;this.token=this.lexer.getToken()}accept(e){if(this.token.type===e){this.nextToken();return!0}return!1}expect(e){if(this.accept(e))return!0;throw new FormatError(`Unexpected symbol: found ${this.token.type} expected ${e}.`)}parse(){this.nextToken();this.expect(ls.LBRACE);this.parseBlock();this.expect(ls.RBRACE);return this.operators}parseBlock(){for(;;)if(this.accept(ls.NUMBER))this.operators.push(this.prev.value);else if(this.accept(ls.OPERATOR))this.operators.push(this.prev.value);else{if(!this.accept(ls.LBRACE))return;this.parseCondition()}}parseCondition(){const e=this.operators.length;this.operators.push(null,null);this.parseBlock();this.expect(ls.RBRACE);if(this.accept(ls.IF)){this.operators[e]=this.operators.length;this.operators[e+1]="jz"}else{if(!this.accept(ls.LBRACE))throw new FormatError("PS Function: error parsing conditional.");{const t=this.operators.length;this.operators.push(null,null);const i=this.operators.length;this.parseBlock();this.expect(ls.RBRACE);this.expect(ls.IFELSE);this.operators[t]=this.operators.length;this.operators[t+1]="j";this.operators[e]=i;this.operators[e+1]="jz"}}}}const ls={LBRACE:0,RBRACE:1,NUMBER:2,OPERATOR:3,IF:4,IFELSE:5};class PostScriptToken{static get opCache(){return shadow(this,"opCache",Object.create(null))}constructor(e,t){this.type=e;this.value=t}static getOperator(e){return PostScriptToken.opCache[e]||=new PostScriptToken(ls.OPERATOR,e)}static get LBRACE(){return shadow(this,"LBRACE",new PostScriptToken(ls.LBRACE,"{"))}static get RBRACE(){return shadow(this,"RBRACE",new PostScriptToken(ls.RBRACE,"}"))}static get IF(){return shadow(this,"IF",new PostScriptToken(ls.IF,"IF"))}static get IFELSE(){return shadow(this,"IFELSE",new PostScriptToken(ls.IFELSE,"IFELSE"))}}class PostScriptLexer{constructor(e){this.stream=e;this.nextChar();this.strBuf=[]}nextChar(){return this.currentChar=this.stream.getByte()}getToken(){let e=!1,t=this.currentChar;for(;;){if(t<0)return yt;if(e)10!==t&&13!==t||(e=!1);else if(37===t)e=!0;else if(!isWhiteSpace(t))break;t=this.nextChar()}switch(0|t){case 48:case 49:case 50:case 51:case 52:case 53:case 54:case 55:case 56:case 57:case 43:case 45:case 46:return new PostScriptToken(ls.NUMBER,this.getNumber());case 123:this.nextChar();return PostScriptToken.LBRACE;case 125:this.nextChar();return PostScriptToken.RBRACE}const i=this.strBuf;i.length=0;i[0]=String.fromCharCode(t);for(;(t=this.nextChar())>=0&&(t>=65&&t<=90||t>=97&&t<=122);)i.push(String.fromCharCode(t));const a=i.join("");switch(a.toLowerCase()){case"if":return PostScriptToken.IF;case"ifelse":return PostScriptToken.IFELSE;default:return PostScriptToken.getOperator(a)}}getNumber(){let e=this.currentChar;const t=this.strBuf;t.length=0;t[0]=String.fromCharCode(e);for(;(e=this.nextChar())>=0&&(e>=48&&e<=57||45===e||46===e);)t.push(String.fromCharCode(e));const i=parseFloat(t.join(""));if(isNaN(i))throw new FormatError(`Invalid floating point number: ${i}`);return i}}class BaseLocalCache{constructor(e){this._onlyRefs=!0===e?.onlyRefs;if(!this._onlyRefs){this._nameRefMap=new Map;this._imageMap=new Map}this._imageCache=new RefSetCache}getByName(e){this._onlyRefs&&unreachable("Should not call `getByName` method.");const t=this._nameRefMap.get(e);return t?this.getByRef(t):this._imageMap.get(e)||null}getByRef(e){return this._imageCache.get(e)||null}set(e,t,i){unreachable("Abstract method `set` called.")}}class LocalImageCache extends BaseLocalCache{set(e,t=null,i){if("string"!=typeof e)throw new Error('LocalImageCache.set - expected "name" argument.');if(t){if(this._imageCache.has(t))return;this._nameRefMap.set(e,t);this._imageCache.put(t,i)}else this._imageMap.has(e)||this._imageMap.set(e,i)}}class LocalColorSpaceCache extends BaseLocalCache{set(e=null,t=null,i){if("string"!=typeof e&&!t)throw new Error('LocalColorSpaceCache.set - expected "name" and/or "ref" argument.');if(t){if(this._imageCache.has(t))return;null!==e&&this._nameRefMap.set(e,t);this._imageCache.put(t,i)}else this._imageMap.has(e)||this._imageMap.set(e,i)}}class LocalFunctionCache extends BaseLocalCache{constructor(e){super({onlyRefs:!0})}set(e=null,t,i){if(!t)throw new Error('LocalFunctionCache.set - expected "ref" argument.');this._imageCache.has(t)||this._imageCache.put(t,i)}}class LocalGStateCache extends BaseLocalCache{set(e,t=null,i){if("string"!=typeof e)throw new Error('LocalGStateCache.set - expected "name" argument.');if(t){if(this._imageCache.has(t))return;this._nameRefMap.set(e,t);this._imageCache.put(t,i)}else this._imageMap.has(e)||this._imageMap.set(e,i)}}class LocalTilingPatternCache extends BaseLocalCache{constructor(e){super({onlyRefs:!0})}set(e=null,t,i){if(!t)throw new Error('LocalTilingPatternCache.set - expected "ref" argument.');this._imageCache.has(t)||this._imageCache.put(t,i)}}class RegionalImageCache extends BaseLocalCache{constructor(e){super({onlyRefs:!0})}set(e=null,t,i){if(!t)throw new Error('RegionalImageCache.set - expected "ref" argument.');this._imageCache.has(t)||this._imageCache.put(t,i)}}class GlobalImageCache{static NUM_PAGES_THRESHOLD=2;static MIN_IMAGES_TO_CACHE=10;static MAX_BYTE_SIZE=5e7;#b=new RefSet;constructor(){this._refCache=new RefSetCache;this._imageCache=new RefSetCache}get#F(){let e=0;for(const t of this._imageCache)e+=t.byteSize;return e}get#S(){return!(this._imageCache.size+e)):null}class PDFFunction{static getSampleArray(e,t,i,a){let s,r,n=1;for(s=0,r=e.length;s>o)*C;c&=(1<i?e=i:e0&&(l=r[h-1]);let Q=a[1];h>1,c=s.length>>1,C=new PostScriptEvaluator(g),h=Object.create(null);let l=8192;const Q=new Float32Array(c);return function constructPostScriptFn(e,t,i,a){let s,n,g="";const E=Q;for(s=0;se&&(n=e)}d[s]=n}if(l>0){l--;h[g]=d}i.set(d,a)}}}function isPDFFunction(e){let t;if(e instanceof Dict)t=e;else{if(!(e instanceof BaseStream))return!1;t=e.dict}return t.has("FunctionType")}class PostScriptStack{static MAX_STACK_SIZE=100;constructor(e){this.stack=e?Array.from(e):[]}push(e){if(this.stack.length>=PostScriptStack.MAX_STACK_SIZE)throw new Error("PostScript function stack overflow.");this.stack.push(e)}pop(){if(this.stack.length<=0)throw new Error("PostScript function stack underflow.");return this.stack.pop()}copy(e){if(this.stack.length+e>=PostScriptStack.MAX_STACK_SIZE)throw new Error("PostScript function stack overflow.");const t=this.stack;for(let i=t.length-e,a=e-1;a>=0;a--,i++)t.push(t[i])}index(e){this.push(this.stack[this.stack.length-e-1])}roll(e,t){const i=this.stack,a=i.length-e,s=i.length-1,r=a+(t-Math.floor(t/e)*e);for(let e=a,t=s;e0?t.push(n<>g);break;case"ceiling":n=t.pop();t.push(Math.ceil(n));break;case"copy":n=t.pop();t.copy(n);break;case"cos":n=t.pop();t.push(Math.cos(n%360/180*Math.PI));break;case"cvi":n=0|t.pop();t.push(n);break;case"cvr":break;case"div":g=t.pop();n=t.pop();t.push(n/g);break;case"dup":t.copy(1);break;case"eq":g=t.pop();n=t.pop();t.push(n===g);break;case"exch":t.roll(2,1);break;case"exp":g=t.pop();n=t.pop();t.push(n**g);break;case"false":t.push(!1);break;case"floor":n=t.pop();t.push(Math.floor(n));break;case"ge":g=t.pop();n=t.pop();t.push(n>=g);break;case"gt":g=t.pop();n=t.pop();t.push(n>g);break;case"idiv":g=t.pop();n=t.pop();t.push(n/g|0);break;case"index":n=t.pop();t.index(n);break;case"le":g=t.pop();n=t.pop();t.push(n<=g);break;case"ln":n=t.pop();t.push(Math.log(n));break;case"log":n=t.pop();t.push(Math.log10(n));break;case"lt":g=t.pop();n=t.pop();t.push(n=t?new AstLiteral(t):e.max<=t?e:new AstMin(e,t)}class PostScriptCompiler{compile(e,t,i){const a=[],s=[],r=t.length>>1,n=i.length>>1;let g,o,c,C,h,l,Q,E,u=0;for(let e=0;et.min){g.unshift("Math.max(",r,", ");g.push(")")}if(n4){a=!0;t=0}else{a=!1;t=1}const o=[];for(r=0;r=0&&"ET"===us[e];--e)us[e]="EN";for(let e=r+1;e0&&(t=us[r-1]);let i=h;e+1E&&isOdd(E)&&(d=E)}for(E=u;E>=d;--E){let e=-1;for(r=0,n=o.length;r=0){reverseValues(Es,e,r);e=-1}}else e<0&&(e=r);e>=0&&reverseValues(Es,e,o.length)}for(r=0,n=Es.length;r"!==e||(Es[r]="")}return createBidiText(Es.join(""),a)}const ds={style:"normal",weight:"normal"},fs={style:"normal",weight:"bold"},ps={style:"italic",weight:"normal"},ms={style:"italic",weight:"bold"},ys=new Map([["Times-Roman",{local:["Times New Roman","Times-Roman","Times","Liberation Serif","Nimbus Roman","Nimbus Roman L","Tinos","Thorndale","TeX Gyre Termes","FreeSerif","Linux Libertine O","Libertinus Serif","DejaVu Serif","Bitstream Vera Serif","Ubuntu"],style:ds,ultimate:"serif"}],["Times-Bold",{alias:"Times-Roman",style:fs,ultimate:"serif"}],["Times-Italic",{alias:"Times-Roman",style:ps,ultimate:"serif"}],["Times-BoldItalic",{alias:"Times-Roman",style:ms,ultimate:"serif"}],["Helvetica",{local:["Helvetica","Helvetica Neue","Arial","Arial Nova","Liberation Sans","Arimo","Nimbus Sans","Nimbus Sans L","A030","TeX Gyre Heros","FreeSans","DejaVu Sans","Albany","Bitstream Vera Sans","Arial Unicode MS","Microsoft Sans Serif","Apple Symbols","Cantarell"],path:"LiberationSans-Regular.ttf",style:ds,ultimate:"sans-serif"}],["Helvetica-Bold",{alias:"Helvetica",path:"LiberationSans-Bold.ttf",style:fs,ultimate:"sans-serif"}],["Helvetica-Oblique",{alias:"Helvetica",path:"LiberationSans-Italic.ttf",style:ps,ultimate:"sans-serif"}],["Helvetica-BoldOblique",{alias:"Helvetica",path:"LiberationSans-BoldItalic.ttf",style:ms,ultimate:"sans-serif"}],["Courier",{local:["Courier","Courier New","Liberation Mono","Nimbus Mono","Nimbus Mono L","Cousine","Cumberland","TeX Gyre Cursor","FreeMono","Linux Libertine Mono O","Libertinus Mono"],style:ds,ultimate:"monospace"}],["Courier-Bold",{alias:"Courier",style:fs,ultimate:"monospace"}],["Courier-Oblique",{alias:"Courier",style:ps,ultimate:"monospace"}],["Courier-BoldOblique",{alias:"Courier",style:ms,ultimate:"monospace"}],["ArialBlack",{local:["Arial Black"],style:{style:"normal",weight:"900"},fallback:"Helvetica-Bold"}],["ArialBlack-Bold",{alias:"ArialBlack"}],["ArialBlack-Italic",{alias:"ArialBlack",style:{style:"italic",weight:"900"},fallback:"Helvetica-BoldOblique"}],["ArialBlack-BoldItalic",{alias:"ArialBlack-Italic"}],["ArialNarrow",{local:["Arial Narrow","Liberation Sans Narrow","Helvetica Condensed","Nimbus Sans Narrow","TeX Gyre Heros Cn"],style:ds,fallback:"Helvetica"}],["ArialNarrow-Bold",{alias:"ArialNarrow",style:fs,fallback:"Helvetica-Bold"}],["ArialNarrow-Italic",{alias:"ArialNarrow",style:ps,fallback:"Helvetica-Oblique"}],["ArialNarrow-BoldItalic",{alias:"ArialNarrow",style:ms,fallback:"Helvetica-BoldOblique"}],["Calibri",{local:["Calibri","Carlito"],style:ds,fallback:"Helvetica"}],["Calibri-Bold",{alias:"Calibri",style:fs,fallback:"Helvetica-Bold"}],["Calibri-Italic",{alias:"Calibri",style:ps,fallback:"Helvetica-Oblique"}],["Calibri-BoldItalic",{alias:"Calibri",style:ms,fallback:"Helvetica-BoldOblique"}],["Wingdings",{local:["Wingdings","URW Dingbats"],style:ds}],["Wingdings-Regular",{alias:"Wingdings"}],["Wingdings-Bold",{alias:"Wingdings"}]]),ws=new Map([["Arial-Black","ArialBlack"]]);function getFamilyName(e){const t=new Set(["thin","extralight","ultralight","demilight","semilight","light","book","regular","normal","medium","demibold","semibold","bold","extrabold","ultrabold","black","heavy","extrablack","ultrablack","roman","italic","oblique","ultracondensed","extracondensed","condensed","semicondensed","normal","semiexpanded","expanded","extraexpanded","ultraexpanded","bolditalic"]);return e.split(/[- ,+]+/g).filter((e=>!t.has(e.toLowerCase()))).join(" ")}function generateFont({alias:e,local:t,path:i,fallback:a,style:s,ultimate:r},n,g,o=!0,c=!0,C=""){const h={style:null,ultimate:null};if(t){const e=C?` ${C}`:"";for(const i of t)n.push(`local(${i}${e})`)}if(e){const t=ys.get(e),r=C||function getStyleToAppend(e){switch(e){case fs:return"Bold";case ps:return"Italic";case ms:return"Bold Italic";default:if("bold"===e?.weight)return"Bold";if("italic"===e?.style)return"Italic"}return""}(s);Object.assign(h,generateFont(t,n,g,o&&!a,c&&!i,r))}s&&(h.style=s);r&&(h.ultimate=r);if(o&&a){const e=ys.get(a),{ultimate:t}=generateFont(e,n,g,o,c&&!i,C);h.ultimate||=t}c&&i&&g&&n.push(`url(${g}${i})`);return h}function getFontSubstitution(e,t,i,a,s,r){if(a.startsWith("InvalidPDFjsFont_"))return null;"TrueType"!==r&&"Type1"!==r||!/^[A-Z]{6}\+/.test(a)||(a=a.slice(7));const n=a=normalizeFontName(a);let g=e.get(n);if(g)return g;let o=ys.get(a);if(!o)for(const[e,t]of ws)if(a.startsWith(e)){a=`${t}${a.substring(e.length)}`;o=ys.get(a);break}let c=!1;if(!o){o=ys.get(s);c=!0}const C=`${t.getDocId()}_s${t.createFontId()}`;if(!o){if(!validateFontName(a)){warn(`Cannot substitute the font because of its name: ${a}`);e.set(n,null);return null}const t=/bold/gi.test(a),i=/oblique|italic/gi.test(a),s=t&&i&&ms||t&&fs||i&&ps||ds;g={css:`"${getFamilyName(a)}",${C}`,guessFallback:!0,loadedName:C,baseFontName:a,src:`local(${a})`,style:s};e.set(n,g);return g}const h=[];c&&validateFontName(a)&&h.push(`local(${a})`);const{style:l,ultimate:Q}=generateFont(o,h,i),E=null===Q,u=E?"":`,${Q}`;g={css:`"${getFamilyName(a)}",${C}${u}`,guessFallback:E,loadedName:C,baseFontName:a,src:h.join(","),style:l};e.set(n,g);return g}class ImageResizer{static#k=2048;static#R=!1;constructor(e,t){this._imgData=e;this._isMask=t}static get canUseImageDecoder(){return shadow(this,"canUseImageDecoder",this.#R||"undefined"==typeof ImageDecoder?Promise.resolve(!1):ImageDecoder.isTypeSupported("image/bmp"))}static needsToBeResized(e,t){if(e<=this.#k&&t<=this.#k)return!1;const{MAX_DIM:i}=this;if(e>i||t>i)return!0;const a=e*t;if(this._hasMaxArea)return a>this.MAX_AREA;if(a(this.MAX_AREA=this.#k**2)}static get MAX_DIM(){return shadow(this,"MAX_DIM",this._guessMax(2048,65537,0,1))}static get MAX_AREA(){this._hasMaxArea=!0;return shadow(this,"MAX_AREA",this._guessMax(this.#k,this.MAX_DIM,128,0)**2)}static set MAX_AREA(e){if(e>=0){this._hasMaxArea=!0;shadow(this,"MAX_AREA",e)}}static setMaxArea(e){this._hasMaxArea||(this.MAX_AREA=e>>2)}static setOptions(e){this.setMaxArea(e.maxArea??-1);this.#R=e.isChrome??!1}static _areGoodDims(e,t){try{const i=new OffscreenCanvas(e,t),a=i.getContext("2d");a.fillRect(0,0,1,1);const s=a.getImageData(0,0,1,1).data[3];i.width=i.height=1;return 0!==s}catch{return!1}}static _guessMax(e,t,i,a){for(;e+i+1{warn(`BMP image decoding failed: ${e}`);return createImageBitmap(new Blob([this._encodeBMP().buffer],{type:"image/bmp"}))})).finally((()=>{t.close()}))}else i=createImageBitmap(new Blob([e.buffer],{type:"image/bmp"}));const{MAX_AREA:a,MAX_DIM:s}=ImageResizer,{_imgData:r}=this,{width:n,height:g}=r,o=Math.max(n/s,g/s,Math.sqrt(n*g/a)),c=Math.max(o,2),C=Math.round(10*(o+1.25))/10/c,h=Math.floor(Math.log2(C)),l=new Array(h+2).fill(2);l[0]=c;l.splice(-1,1,C/(1<>3,n=i+3&-4;if(i!==n){const e=new Uint8Array(n*t);let a=0;for(let r=0,g=t*i;r>>8;t[i++]=255&s}}}else{if(!ArrayBuffer.isView(e))throw new Error("Invalid data format, must be a string or TypedArray.");t=e.slice();i=t.byteLength}const a=i>>2,s=i-4*a,r=new Uint32Array(t.buffer,0,a);let n=0,g=0,o=this.h1,c=this.h2;const C=3432918353,h=461845907,l=11601,Q=13715;for(let e=0;e>>17;n=n*h&bs|n*Q&Fs;o^=n;o=o<<13|o>>>19;o=5*o+3864292196}else{g=r[e];g=g*C&bs|g*l&Fs;g=g<<15|g>>>17;g=g*h&bs|g*Q&Fs;c^=g;c=c<<13|c>>>19;c=5*c+3864292196}n=0;switch(s){case 3:n^=t[4*a+2]<<16;case 2:n^=t[4*a+1]<<8;case 1:n^=t[4*a];n=n*C&bs|n*l&Fs;n=n<<15|n>>>17;n=n*h&bs|n*Q&Fs;1&a?o^=n:c^=n}this.h1=o;this.h2=c}hexdigest(){let e=this.h1,t=this.h2;e^=t>>>1;e=3981806797*e&bs|36045*e&Fs;t=4283543511*t&bs|(2950163797*(t<<16|e>>>16)&bs)>>>16;e^=t>>>1;e=444984403*e&bs|60499*e&Fs;t=3301882366*t&bs|(3120437893*(t<<16|e>>>16)&bs)>>>16;e^=t>>>1;return(e>>>0).toString(16).padStart(8,"0")+(t>>>0).toString(16).padStart(8,"0")}}function addState(e,t,i,a,s){let r=e;for(let e=0,i=t.length-1;e1e3){c=Math.max(c,l);Q+=h+2;l=0;h=0}C.push({transform:t,x:l,y:Q,w:i.width,h:i.height});l+=i.width+2;h=Math.max(h,i.height)}const E=Math.max(c,l)+1,u=Q+h+1,d=new Uint8Array(E*u*4),f=E<<2;for(let e=0;e=0;){t[r-4]=t[r];t[r-3]=t[r+1];t[r-2]=t[r+2];t[r-1]=t[r+3];t[r+i]=t[r+i-4];t[r+i+1]=t[r+i-3];t[r+i+2]=t[r+i-2];t[r+i+3]=t[r+i-1];r-=f}}const p={width:E,height:u};if(e.isOffscreenCanvasSupported){const e=new OffscreenCanvas(E,u);e.getContext("2d").putImageData(new ImageData(new Uint8ClampedArray(d.buffer),E,u),0,0);p.bitmap=e.transferToImageBitmap();p.data=null}else{p.kind=S;p.data=d}i.splice(r,4*o,_e);a.splice(r,4*o,[p,C]);return r+1}));addState(Ss,[GA,UA,Xe,xA],null,(function iterateImageMaskGroup(e,t){const i=e.fnArray,a=(t-(e.iCurr-3))%4;switch(a){case 0:return i[t]===GA;case 1:return i[t]===UA;case 2:return i[t]===Xe;case 3:return i[t]===xA}throw new Error(`iterateImageMaskGroup - invalid pos: ${a}`)}),(function foundImageMaskGroup(e,t){const i=e.fnArray,a=e.argsArray,s=e.iCurr,r=s-3,n=s-2,g=s-1;let o=Math.floor((t-r)/4);if(o<10)return t-(t-r)%4;let c,C,h=!1;const l=a[g][0],Q=a[n][0],E=a[n][1],u=a[n][2],d=a[n][3];if(E===u){h=!0;c=n+4;let e=g+4;for(let t=1;t=4&&i[r-4]===i[n]&&i[r-3]===i[g]&&i[r-2]===i[o]&&i[r-1]===i[c]&&a[r-4][0]===C&&a[r-4][1]===h){l++;Q-=5}let E=Q+4;for(let e=1;e=i)break}a=(a||Ss)[e[t]];if(a&&!Array.isArray(a)){r.iCurr=t;t++;if(!a.checkFn||(0,a.checkFn)(r)){s=a;a=null}else a=null}else t++}this.state=a;this.match=s;this.lastProcessed=t}flush(){for(;this.match;){const e=this.queue.fnArray.length;this.lastProcessed=(0,this.match.processFn)(this.context,e);this.match=null;this.state=null;this._optimize()}}reset(){this.state=null;this.match=null;this.lastProcessed=0}}class OperatorList{static CHUNK_SIZE=1e3;static CHUNK_SIZE_ABOUT=this.CHUNK_SIZE-5;constructor(e=0,t){this._streamSink=t;this.fnArray=[];this.argsArray=[];this.optimizer=!t||e&E?new NullOptimizer(this):new QueueOptimizer(this);this.dependencies=new Set;this._totalLength=0;this.weight=0;this._resolved=t?null:Promise.resolve()}set isOffscreenCanvasSupported(e){this.optimizer.isOffscreenCanvasSupported=e}get length(){return this.argsArray.length}get ready(){return this._resolved||this._streamSink.ready}get totalLength(){return this._totalLength+this.length}addOp(e,t){this.optimizer.push(e,t);this.weight++;this._streamSink&&(this.weight>=OperatorList.CHUNK_SIZE||this.weight>=OperatorList.CHUNK_SIZE_ABOUT&&(e===xA||e===Ae))&&this.flush()}addImageOps(e,t,i){void 0!==i&&this.addOp(Je,["OC",i]);this.addOp(e,t);void 0!==i&&this.addOp(Ye,[])}addDependency(e){if(!this.dependencies.has(e)){this.dependencies.add(e);this.addOp(yA,[e])}}addDependencies(e){for(const t of e)this.addDependency(t)}addOpList(e){if(e instanceof OperatorList){for(const t of e.dependencies)this.dependencies.add(t);for(let t=0,i=e.length;ta&&(e=a);return e}function resizeImageMask(e,t,i,a,s,r){const n=s*r;let g;g=t<=8?new Uint8Array(n):t<=16?new Uint16Array(n):new Uint32Array(n);const o=i/s,c=a/r;let C,h,l,Q,E=0;const u=new Uint16Array(s),d=i;for(C=0;C0&&Number.isInteger(i.height)&&i.height>0&&(i.width!==l||i.height!==Q)){warn("PDFImage - using the Width/Height of the image data, rather than the image dictionary.");l=i.width;Q=i.height}if(l<1||Q<1)throw new FormatError(`Invalid image width: ${l} or height: ${Q}`);this.width=l;this.height=Q;this.interpolate=c.get("I","Interpolate");this.imageMask=c.get("IM","ImageMask")||!1;this.matte=c.get("Matte")||!1;let E=i.bitsPerComponent;if(!E){E=c.get("BPC","BitsPerComponent");if(!E){if(!this.imageMask)throw new FormatError(`Bits per component missing in image: ${this.imageMask}`);E=1}}this.bpc=E;if(!this.imageMask){let s=c.getRaw("CS")||c.getRaw("ColorSpace");const r=!!s;if(r)this.jpxDecoderOptions?.smaskInData&&(s=Name.get("DeviceRGBA"));else if(this.jpxDecoderOptions)s=Name.get("DeviceRGBA");else switch(i.numComps){case 1:s=Name.get("DeviceGray");break;case 3:s=Name.get("DeviceRGB");break;case 4:s=Name.get("DeviceCMYK");break;default:throw new Error(`Images with ${i.numComps} color components not supported.`)}this.colorSpace=ColorSpace.parse({cs:s,xref:e,resources:a?t:null,pdfFunctionFactory:g,localColorSpaceCache:o});this.numComps=this.colorSpace.numComps;if(this.jpxDecoderOptions){this.jpxDecoderOptions.numComponents=r?this.numComp:0;this.jpxDecoderOptions.isIndexedColormap="Indexed"===this.colorSpace.name}}this.decode=c.getArray("D","Decode");this.needsDecode=!1;if(this.decode&&(this.colorSpace&&!this.colorSpace.isDefaultDecode(this.decode,E)||n&&!ColorSpace.isDefaultDecode(this.decode,1))){this.needsDecode=!0;const e=(1<>3)*i,g=e.byteLength;let o,c;if(!a||s&&!(n===g))if(s){o=new Uint8Array(n);o.set(e);o.fill(255,g)}else o=new Uint8Array(e);else o=e;if(s)for(c=0;c>7&1;n[l+1]=h>>6&1;n[l+2]=h>>5&1;n[l+3]=h>>4&1;n[l+4]=h>>3&1;n[l+5]=h>>2&1;n[l+6]=h>>1&1;n[l+7]=1&h;l+=8}if(l>=1}}}}else{let i=0;h=0;for(l=0,C=r;l>a;s<0?s=0:s>c&&(s=c);n[l]=s;h&=(1<n[a+1]){t=255;break}}g[C]=t}}}if(g)for(C=0,l=3,h=t*a;C>3,C=t&&ImageResizer.needsToBeResized(i,a);if(!this.smask&&!this.mask&&"DeviceRGBA"===this.colorSpace.name){s.kind=S;const e=s.data=await this.getImageBytes(g*n*4,{});return t?C?ImageResizer.createImage(s,!1):this.createBitmap(S,i,a,e):s}if(!e){let e;"DeviceGray"===this.colorSpace.name&&1===o?e=b:"DeviceRGB"!==this.colorSpace.name||8!==o||this.needsDecode||(e=F);if(e&&!this.smask&&!this.mask&&i===n&&a===g){const r=await this.#N(n,g);if(r)return r;const o=await this.getImageBytes(g*c,{});if(t)return C?ImageResizer.createImage({data:o,kind:e,width:i,height:a,interpolate:this.interpolate},this.needsDecode):this.createBitmap(e,n,g,o);s.kind=e;s.data=o;if(this.needsDecode){assert(e===b,"PDFImage.createImageData: The image must be grayscale.");const t=s.data;for(let e=0,i=t.length;e>3,n=await this.getImageBytes(a*r,{internal:!0}),g=this.getComponents(n);let o,c;if(1===s){c=i*a;if(this.needsDecode)for(o=0;o0&&t.args[0].count++}class TimeSlotManager{static TIME_SLOT_DURATION_MS=20;static CHECK_TIME_EVERY=100;constructor(){this.reset()}check(){if(++this.checkedh){const e="Image exceeded maximum allowed size and was removed.";if(this.options.ignoreErrors){warn(e);return}throw new Error(e)}let l;g.has("OC")&&(l=await this.parseMarkedContentProps(g.get("OC"),e));let Q,E;if(g.get("IM","ImageMask")||!1){const e=g.get("I","Interpolate"),i=c+7>>3,n=t.getBytes(i*C),h=g.getArray("D","Decode");if(this.parsingType3Font){Q=PDFImage.createRawMask({imgArray:n,width:c,height:C,imageIsFromDecodeStream:t instanceof DecodeStream,inverseDecode:h?.[0]>0,interpolate:e});Q.cached=!!s;E=[Q];a.addImageOps(Xe,E,l);if(s){const e={fn:Xe,args:E,optionalContent:l};r.set(s,o,e);o&&this._regionalImageCache.set(null,o,e)}return}Q=await PDFImage.createMask({imgArray:n,width:c,height:C,imageIsFromDecodeStream:t instanceof DecodeStream,inverseDecode:h?.[0]>0,interpolate:e,isOffscreenCanvasSupported:this.options.isOffscreenCanvasSupported});if(Q.isSingleOpaquePixel){a.addImageOps(et,[],l);if(s){const e={fn:et,args:[],optionalContent:l};r.set(s,o,e);o&&this._regionalImageCache.set(null,o,e)}return}const u=`mask_${this.idFactory.createObjId()}`;a.addDependency(u);Q.dataLen=Q.bitmap?Q.width*Q.height*4:Q.data.length;this._sendImgData(u,Q);E=[{data:u,width:Q.width,height:Q.height,interpolate:Q.interpolate,count:1}];a.addImageOps(Xe,E,l);if(s){const e={objId:u,fn:Xe,args:E,optionalContent:l};r.set(s,o,e);o&&this._regionalImageCache.set(null,o,e)}return}if(i&&c+C<200&&!g.has("SMask")&&!g.has("Mask")){try{const s=new PDFImage({xref:this.xref,res:e,image:t,isInline:i,pdfFunctionFactory:this._pdfFunctionFactory,localColorSpaceCache:n});Q=await s.createImageData(!0,!1);a.isOffscreenCanvasSupported=this.options.isOffscreenCanvasSupported;a.addImageOps(ze,[Q],l)}catch(e){const t=`Unable to decode inline image: "${e}".`;if(!this.options.ignoreErrors)throw new Error(t);warn(t)}return}let u=`img_${this.idFactory.createObjId()}`,d=!1;if(this.parsingType3Font)u=`${this.idFactory.getDocId()}_type3_${u}`;else if(s&&o){d=this.globalImageCache.shouldCache(o,this.pageIndex);if(d){assert(!i,"Cannot cache an inline image globally.");u=`${this.idFactory.getDocId()}_${u}`}}a.addDependency(u);E=[u,c,C];a.addImageOps(Ve,E,l);if(d){if(this.globalImageCache.hasDecodeFailed(o)){this.globalImageCache.setData(o,{objId:u,fn:Ve,args:E,optionalContent:l,byteSize:0});this._sendImgData(u,null,d);return}if(c*C>25e4||g.has("SMask")||g.has("Mask")){const e=await this.handler.sendWithPromise("commonobj",[u,"CopyLocalImage",{imageRef:o}]);if(e){this.globalImageCache.setData(o,{objId:u,fn:Ve,args:E,optionalContent:l,byteSize:0});this.globalImageCache.addByteSize(o,e);return}}}PDFImage.buildImage({xref:this.xref,res:e,image:t,isInline:i,pdfFunctionFactory:this._pdfFunctionFactory,localColorSpaceCache:n}).then((async e=>{Q=await e.createImageData(!1,this.options.isOffscreenCanvasSupported);Q.dataLen=Q.bitmap?Q.width*Q.height*4:Q.data.length;Q.ref=o;d&&this.globalImageCache.addByteSize(o,Q.dataLen);return this._sendImgData(u,Q,d)})).catch((e=>{warn(`Unable to decode image "${u}": "${e}".`);o&&this.globalImageCache.addDecodeFailed(o);return this._sendImgData(u,null,d)}));if(s){const e={objId:u,fn:Ve,args:E,optionalContent:l};r.set(s,o,e);if(o){this._regionalImageCache.set(null,o,e);d&&this.globalImageCache.setData(o,{objId:u,fn:Ve,args:E,optionalContent:l,byteSize:0})}}}handleSMask(e,t,i,a,s,r){const n=e.get("G"),g={subtype:e.get("S").name,backdrop:e.get("BC")},o=e.get("TR");if(isPDFFunction(o)){const e=this._pdfFunctionFactory.create(o),t=new Uint8Array(256),i=new Float32Array(1);for(let a=0;a<256;a++){i[0]=a/255;e(i,0,i,0);t[a]=255*i[0]|0}g.transferMap=t}return this.buildFormXObject(t,n,g,i,a,s.state.clone(),r)}handleTransferFunction(e){let t;if(Array.isArray(e))t=e;else{if(!isPDFFunction(e))return null;t=[e]}const i=[];let a=0,s=0;for(const e of t){const t=this.xref.fetchIfRef(e);a++;if(isName(t,"Identity")){i.push(null);continue}if(!isPDFFunction(t))return null;const r=this._pdfFunctionFactory.create(t),n=new Uint8Array(256),g=new Float32Array(1);for(let e=0;e<256;e++){g[0]=e/255;r(g,0,g,0);n[e]=255*g[0]|0}i.push(n);s++}return 1!==a&&4!==a||0===s?null:i}handleTilingType(e,t,i,a,s,r,n,g){const o=new OperatorList,c=Dict.merge({xref:this.xref,dictArray:[s.get("Resources"),i]});return this.getOperatorList({stream:a,task:n,resources:c,operatorList:o}).then((function(){const i=o.getIR(),a=getTilingPatternIR(i,s,t);r.addDependencies(o.dependencies);r.addOp(e,a);s.objId&&g.set(null,s.objId,{operatorListIR:i,dict:s})})).catch((e=>{if(!(e instanceof AbortException)){if(!this.options.ignoreErrors)throw e;warn(`handleTilingType - ignoring pattern: "${e}".`)}}))}async handleSetFont(e,t,i,a,s,r,n=null,g=null){const o=t?.[0]instanceof Name?t[0].name:null;let c=await this.loadFont(o,i,e,n,g);if(c.font.isType3Font)try{await c.loadType3Data(this,e,s);a.addDependencies(c.type3Dependencies)}catch(e){c=new TranslatedFont({loadedName:"g_font_error",font:new ErrorFont(`Type3 font load error: ${e}`),dict:c.font,evaluatorOptions:this.options})}r.font=c.font;c.send(this.handler);return c.loadedName}handleText(e,t){const i=t.font,a=i.charsToGlyphs(e);if(i.data){(!!(t.textRenderingMode&D)||"Pattern"===t.fillColorSpace.name||i.disableFontFace||this.options.disableFontFace)&&PartialEvaluator.buildFontPaths(i,a,this.handler,this.options)}return a}ensureStateFont(e){if(e.font)return;const t=new FormatError("Missing setFont (Tf) operator before text rendering operator.");if(!this.options.ignoreErrors)throw t;warn(`ensureStateFont: "${t}".`)}async setGState({resources:e,gState:t,operatorList:i,cacheKey:a,task:s,stateManager:r,localGStateCache:n,localColorSpaceCache:g}){const o=t.objId;let c=!0;const C=[];let h=Promise.resolve();for(const a of t.getKeys()){const n=t.get(a);switch(a){case"Type":break;case"LW":case"LC":case"LJ":case"ML":case"D":case"RI":case"FL":case"CA":case"ca":C.push([a,n]);break;case"Font":c=!1;h=h.then((()=>this.handleSetFont(e,null,n[0],i,s,r.state).then((function(e){i.addDependency(e);C.push([a,[e,n[1]]])}))));break;case"BM":C.push([a,normalizeBlendMode(n)]);break;case"SMask":if(isName(n,"None")){C.push([a,!1]);break}if(n instanceof Dict){c=!1;h=h.then((()=>this.handleSMask(n,e,i,s,r,g)));C.push([a,!0])}else warn("Unsupported SMask type");break;case"TR":const t=this.handleTransferFunction(n);C.push([a,t]);break;case"OP":case"op":case"OPM":case"BG":case"BG2":case"UCR":case"UCR2":case"TR2":case"HT":case"SM":case"SA":case"AIS":case"TK":info("graphic state operator "+a);break;default:info("Unknown graphic state operator "+a)}}await h;C.length>0&&i.addOp(NA,[C]);c&&n.set(a,o,C)}loadFont(e,t,i,a=null,s=null){const errorFont=async()=>new TranslatedFont({loadedName:"g_font_error",font:new ErrorFont(`Font "${e}" is not available.`),dict:t,evaluatorOptions:this.options});let r;if(t)t instanceof Ref&&(r=t);else{const t=i.get("Font");t&&(r=t.getRaw(e))}if(r){if(this.type3FontRefs?.has(r))return errorFont();if(this.fontCache.has(r))return this.fontCache.get(r);try{t=this.xref.fetchIfRef(r)}catch(e){warn(`loadFont - lookup failed: "${e}".`)}}if(!(t instanceof Dict)){if(!this.options.ignoreErrors&&!this.parsingType3Font){warn(`Font "${e}" is not available.`);return errorFont()}warn(`Font "${e}" is not available -- attempting to fallback to a default font.`);t=a||PartialEvaluator.fallbackFontDict}if(t.cacheKey&&this.fontCache.has(t.cacheKey))return this.fontCache.get(t.cacheKey);const{promise:n,resolve:g}=Promise.withResolvers();let o;try{o=this.preEvaluateFont(t);o.cssFontInfo=s}catch(e){warn(`loadFont - preEvaluateFont failed: "${e}".`);return errorFont()}const{descriptor:c,hash:C}=o,h=r instanceof Ref;let l;if(C&&c instanceof Dict){const e=c.fontAliases||=Object.create(null);if(e[C]){const t=e[C].aliasRef;if(h&&t&&this.fontCache.has(t)){this.fontCache.putAlias(r,t);return this.fontCache.get(r)}}else e[C]={fontID:this.idFactory.createFontId()};h&&(e[C].aliasRef=r);l=e[C].fontID}else l=this.idFactory.createFontId();assert(l?.startsWith("f"),'The "fontID" must be (correctly) defined.');if(h)this.fontCache.put(r,n);else{t.cacheKey=`cacheKey_${l}`;this.fontCache.put(t.cacheKey,n)}t.loadedName=`${this.idFactory.getDocId()}_${l}`;this.translateFont(o).then((e=>{g(new TranslatedFont({loadedName:t.loadedName,font:e,dict:t,evaluatorOptions:this.options}))})).catch((e=>{warn(`loadFont - translateFont failed: "${e}".`);g(new TranslatedFont({loadedName:t.loadedName,font:new ErrorFont(e instanceof Error?e.message:e),dict:t,evaluatorOptions:this.options}))}));return n}buildPath(e,t,i,a=!1){const s=e.length-1;i||(i=[]);if(s<0||e.fnArray[s]!==tt){if(a){warn(`Encountered path operator "${t}" inside of a text object.`);e.addOp(GA,null)}let s;switch(t){case KA:const e=i[0]+i[2],t=i[1]+i[3];s=[Math.min(i[0],e),Math.min(i[1],t),Math.max(i[0],e),Math.max(i[1],t)];break;case MA:case LA:s=[i[0],i[1],i[0],i[1]];break;default:s=[1/0,1/0,-1/0,-1/0]}e.addOp(tt,[[t],i,s]);a&&e.addOp(xA,null)}else{const a=e.argsArray[s];a[0].push(t);a[1].push(...i);const r=a[2];switch(t){case KA:const e=i[0]+i[2],t=i[1]+i[3];r[0]=Math.min(r[0],i[0],e);r[1]=Math.min(r[1],i[1],t);r[2]=Math.max(r[2],i[0],e);r[3]=Math.max(r[3],i[1],t);break;case MA:case LA:r[0]=Math.min(r[0],i[0]);r[1]=Math.min(r[1],i[1]);r[2]=Math.max(r[2],i[0]);r[3]=Math.max(r[3],i[1])}}}parseColorSpace({cs:e,resources:t,localColorSpaceCache:i}){return ColorSpace.parseAsync({cs:e,xref:this.xref,resources:t,pdfFunctionFactory:this._pdfFunctionFactory,localColorSpaceCache:i}).catch((e=>{if(e instanceof AbortException)return null;if(this.options.ignoreErrors){warn(`parseColorSpace - ignoring ColorSpace: "${e}".`);return null}throw e}))}parseShading({shading:e,resources:t,localColorSpaceCache:i,localShadingPatternCache:a}){let s,r=a.get(e);if(r)return r;try{s=Pattern.parseShading(e,this.xref,t,this._pdfFunctionFactory,i).getIR()}catch(t){if(t instanceof AbortException)return null;if(this.options.ignoreErrors){warn(`parseShading - ignoring shading: "${t}".`);a.set(e,null);return null}throw t}r=`pattern_${this.idFactory.createObjId()}`;this.parsingType3Font&&(r=`${this.idFactory.getDocId()}_type3_${r}`);a.set(e,r);this.parsingType3Font?this.handler.send("commonobj",[r,"Pattern",s]):this.handler.send("obj",[r,this.pageIndex,"Pattern",s]);return r}handleColorN(e,t,i,a,s,r,n,g,o,c){const C=i.pop();if(C instanceof Name){const h=s.getRaw(C.name),l=h instanceof Ref&&o.getByRef(h);if(l)try{const s=a.base?a.base.getRgb(i,0):null,r=getTilingPatternIR(l.operatorListIR,l.dict,s);e.addOp(t,r);return}catch{}const Q=this.xref.fetchIfRef(h);if(Q){const s=Q instanceof BaseStream?Q.dict:Q,C=s.get("PatternType");if(C===Rs){const g=a.base?a.base.getRgb(i,0):null;return this.handleTilingType(t,g,r,Q,s,e,n,o)}if(C===Ns){const i=s.get("Shading"),a=this.parseShading({shading:i,resources:r,localColorSpaceCache:g,localShadingPatternCache:c});if(a){const i=lookupMatrix(s.getArray("Matrix"),null);e.addOp(t,["Shading",a,i])}return}throw new FormatError(`Unknown PatternType: ${C}`)}}throw new FormatError(`Unknown PatternName: ${C}`)}_parseVisibilityExpression(e,t,i){if(++t>10){warn("Visibility expression is too deeply nested");return}const a=e.length,s=this.xref.fetchIfRef(e[0]);if(!(a<2)&&s instanceof Name){switch(s.name){case"And":case"Or":case"Not":i.push(s.name);break;default:warn(`Invalid operator ${s.name} in visibility expression`);return}for(let s=1;s0)return{type:"OCMD",expression:t}}const t=i.get("OCGs");if(Array.isArray(t)||t instanceof Dict){const e=[];if(Array.isArray(t))for(const i of t)e.push(i.toString());else e.push(t.objId);return{type:a,ids:e,policy:i.get("P")instanceof Name?i.get("P").name:null,expression:null}}if(t instanceof Ref)return{type:a,id:t.toString()}}return null}getOperatorList({stream:e,task:t,resources:i,operatorList:a,initialState:s=null,fallbackFontDict:r=null}){i||=Dict.empty;s||=new EvalState;if(!a)throw new Error('getOperatorList: missing "operatorList" parameter');const n=this,g=this.xref;let o=!1;const c=new LocalImageCache,C=new LocalColorSpaceCache,h=new LocalGStateCache,l=new LocalTilingPatternCache,Q=new Map,E=i.get("XObject")||Dict.empty,u=i.get("Pattern")||Dict.empty,d=new StateManager(s),f=new EvaluatorPreprocessor(e,g,d),p=new TimeSlotManager;function closePendingRestoreOPS(e){for(let e=0,t=f.savedStatesDepth;e0&&a.addOp(NA,[t]);e=null;continue}}next(new Promise((function(e,s){if(!S)throw new FormatError("GState must be referred to by name.");const r=i.get("ExtGState");if(!(r instanceof Dict))throw new FormatError("ExtGState should be a dictionary.");const g=r.get(F);if(!(g instanceof Dict))throw new FormatError("GState should be a dictionary.");n.setGState({resources:i,gState:g,operatorList:a,cacheKey:F,task:t,stateManager:d,localGStateCache:h,localColorSpaceCache:C}).then(e,s)})).catch((function(e){if(!(e instanceof AbortException)){if(!n.options.ignoreErrors)throw e;warn(`getOperatorList - ignoring ExtGState: "${e}".`)}})));return;case MA:case LA:case HA:case JA:case YA:case vA:case KA:n.buildPath(a,s,e,o);continue;case Me:case Le:case ve:case Ke:continue;case Je:if(!(e[0]instanceof Name)){warn(`Expected name for beginMarkedContentProps arg0=${e[0]}`);a.addOp(Je,["OC",null]);continue}if("OC"===e[0].name){next(n.parseMarkedContentProps(e[1],i).then((e=>{a.addOp(Je,["OC",e])})).catch((e=>{if(!(e instanceof AbortException)){if(!n.options.ignoreErrors)throw e;warn(`getOperatorList - ignoring beginMarkedContentProps: "${e}".`);a.addOp(Je,["OC",null])}})));return}e=[e[0].name,e[1]instanceof Dict?e[1].get("MCID"):null];break;default:if(null!==e){for(w=0,D=e.length;w{if(!(e instanceof AbortException)){if(!this.options.ignoreErrors)throw e;warn(`getOperatorList - ignoring errors during "${t.name}" task: "${e}".`);closePendingRestoreOPS()}}))}getTextContent({stream:e,task:t,resources:s,stateManager:r=null,includeMarkedContent:n=!1,sink:g,seenStyles:o=new Set,viewBox:c,lang:C=null,markedContentData:h=null,disableNormalization:l=!1,keepWhiteSpace:Q=!1}){s||=Dict.empty;r||=new StateManager(new TextState);n&&(h||={level:0});const E={items:[],styles:Object.create(null),lang:C},u={initialized:!1,str:[],totalWidth:0,totalHeight:0,width:0,height:0,vertical:!1,prevTransform:null,textAdvanceScale:0,spaceInFlowMin:0,spaceInFlowMax:0,trackingSpaceMin:1/0,negativeSpaceMax:-1/0,notASpace:-1/0,transform:null,fontName:null,hasEOL:!1},d=[" "," "];let f=0;function saveLastChar(e){const t=(f+1)%2,i=" "!==d[f]&&" "===d[t];d[f]=e;f=t;return!Q&&i}function shouldAddWhitepsace(){return!Q&&" "!==d[f]&&" "===d[(f+1)%2]}function resetLastChars(){d[0]=d[1]=" ";f=0}const p=this,m=this.xref,y=[];let w=null;const D=new LocalImageCache,b=new LocalGStateCache,F=new EvaluatorPreprocessor(e,m,r);let S;function pushWhitespace({width:e=0,height:t=0,transform:i=u.prevTransform,fontName:a=u.fontName}){E.items.push({str:" ",dir:"ltr",width:e,height:t,transform:i,fontName:a,hasEOL:!1})}function getCurrentTextTransform(){const e=S.font,t=[S.fontSize*S.textHScale,0,0,S.fontSize,0,S.textRise];if(e.isType3Font&&(S.fontSize<=1||e.isCharBBox)&&!isArrayEqual(S.fontMatrix,a)){const i=e.bbox[3]-e.bbox[1];i>0&&(t[3]*=i*S.fontMatrix[3])}return Util.transform(S.ctm,Util.transform(S.textMatrix,t))}function ensureTextContentItem(){if(u.initialized)return u;const{font:e,loadedName:t}=S;if(!o.has(t)){o.add(t);E.styles[t]={fontFamily:e.fallbackName,ascent:e.ascent,descent:e.descent,vertical:e.vertical};if(p.options.fontExtraProperties&&e.systemFontInfo){const i=E.styles[t];i.fontSubstitution=e.systemFontInfo.css;i.fontSubstitutionLoadedName=e.systemFontInfo.loadedName}}u.fontName=t;const i=u.transform=getCurrentTextTransform();if(e.vertical){u.width=u.totalWidth=Math.hypot(i[0],i[1]);u.height=u.totalHeight=0;u.vertical=!0}else{u.width=u.totalWidth=0;u.height=u.totalHeight=Math.hypot(i[2],i[3]);u.vertical=!1}const a=Math.hypot(S.textLineMatrix[0],S.textLineMatrix[1]),s=Math.hypot(S.ctm[0],S.ctm[1]);u.textAdvanceScale=s*a;const{fontSize:r}=S;u.trackingSpaceMin=.102*r;u.notASpace=.03*r;u.negativeSpaceMax=-.2*r;u.spaceInFlowMin=.102*r;u.spaceInFlowMax=.6*r;u.hasEOL=!1;u.initialized=!0;return u}function updateAdvanceScale(){if(!u.initialized)return;const e=Math.hypot(S.textLineMatrix[0],S.textLineMatrix[1]),t=Math.hypot(S.ctm[0],S.ctm[1])*e;if(t!==u.textAdvanceScale){if(u.vertical){u.totalHeight+=u.height*u.textAdvanceScale;u.height=0}else{u.totalWidth+=u.width*u.textAdvanceScale;u.width=0}u.textAdvanceScale=t}}function runBidiTransform(e){let t=e.str.join("");l||(t=function normalizeUnicode(e){if(!ct){ct=/([\u00a0\u00b5\u037e\u0eb3\u2000-\u200a\u202f\u2126\ufb00-\ufb04\ufb06\ufb20-\ufb36\ufb38-\ufb3c\ufb3e\ufb40-\ufb41\ufb43-\ufb44\ufb46-\ufba1\ufba4-\ufba9\ufbae-\ufbb1\ufbd3-\ufbdc\ufbde-\ufbe7\ufbea-\ufbf8\ufbfc-\ufbfd\ufc00-\ufc5d\ufc64-\ufcf1\ufcf5-\ufd3d\ufd88\ufdf4\ufdfa-\ufdfb\ufe71\ufe77\ufe79\ufe7b\ufe7d]+)|(\ufb05+)/gu;Ct=new Map([["ſt","ſt"]])}return e.replaceAll(ct,((e,t,i)=>t?t.normalize("NFKC"):Ct.get(i)))}(t));const i=bidi(t,-1,e.vertical);return{str:i.str,dir:i.dir,width:Math.abs(e.totalWidth),height:Math.abs(e.totalHeight),transform:e.transform,fontName:e.fontName,hasEOL:e.hasEOL}}async function handleSetFont(e,i){const r=await p.loadFont(e,i,s);if(r.font.isType3Font)try{await r.loadType3Data(p,s,t)}catch{}S.loadedName=r.loadedName;S.font=r.font;S.fontMatrix=r.font.fontMatrix||a}function applyInverseRotation(e,t,i){const a=Math.hypot(i[0],i[1]);return[(i[0]*e+i[1]*t)/a,(i[2]*e+i[3]*t)/a]}function compareWithLastPosition(e){const t=getCurrentTextTransform();let i=t[4],a=t[5];if(S.font?.vertical){if(ic[2]||a+ec[3])return!1}else if(i+ec[2]||ac[3])return!1;if(!S.font||!u.prevTransform)return!0;let s=u.prevTransform[4],r=u.prevTransform[5];if(s===i&&r===a)return!0;let n=-1;t[0]&&0===t[1]&&0===t[2]?n=t[0]>0?0:180:t[1]&&0===t[0]&&0===t[3]&&(n=t[1]>0?90:270);switch(n){case 0:break;case 90:[i,a]=[a,i];[s,r]=[r,s];break;case 180:[i,a,s,r]=[-i,-a,-s,-r];break;case 270:[i,a]=[-a,-i];[s,r]=[-r,-s];break;default:[i,a]=applyInverseRotation(i,a,t);[s,r]=applyInverseRotation(s,r,u.prevTransform)}if(S.font.vertical){const e=(r-a)/u.textAdvanceScale,t=i-s,n=Math.sign(u.height);if(e.5*u.width){appendEOL();return!0}resetLastChars();flushTextContentItem();return!0}if(Math.abs(t)>u.width){appendEOL();return!0}e<=n*u.notASpace&&resetLastChars();if(e<=n*u.trackingSpaceMin)if(shouldAddWhitepsace()){resetLastChars();flushTextContentItem();pushWhitespace({height:Math.abs(e)})}else u.height+=e;else if(!addFakeSpaces(e,u.prevTransform,n))if(0===u.str.length){resetLastChars();pushWhitespace({height:Math.abs(e)})}else u.height+=e;Math.abs(t)>.25*u.width&&flushTextContentItem();return!0}const g=(i-s)/u.textAdvanceScale,o=a-r,C=Math.sign(u.width);if(g.5*u.height){appendEOL();return!0}resetLastChars();flushTextContentItem();return!0}if(Math.abs(o)>u.height){appendEOL();return!0}g<=C*u.notASpace&&resetLastChars();if(g<=C*u.trackingSpaceMin)if(shouldAddWhitepsace()){resetLastChars();flushTextContentItem();pushWhitespace({width:Math.abs(g)})}else u.width+=g;else if(!addFakeSpaces(g,u.prevTransform,C))if(0===u.str.length){resetLastChars();pushWhitespace({width:Math.abs(g)})}else u.width+=g;Math.abs(o)>.25*u.height&&flushTextContentItem();return!0}function buildTextContentItem({chars:e,extraSpacing:t}){const i=S.font;if(!e){const e=S.charSpacing+t;e&&(i.vertical?S.translateTextMatrix(0,-e):S.translateTextMatrix(e*S.textHScale,0));Q&&compareWithLastPosition(0);return}const a=i.charsToGlyphs(e),s=S.fontMatrix[0]*S.fontSize;for(let e=0,r=a.length;e0){const e=y.join("");y.length=0;buildTextContentItem({chars:e,extraSpacing:0})}break;case Ce:if(!r.state.font){p.ensureStateFont(r.state);continue}buildTextContentItem({chars:f[0],extraSpacing:0});break;case le:if(!r.state.font){p.ensureStateFont(r.state);continue}S.carriageReturn();buildTextContentItem({chars:f[0],extraSpacing:0});break;case Be:if(!r.state.font){p.ensureStateFont(r.state);continue}S.wordSpacing=f[0];S.charSpacing=f[1];S.carriageReturn();buildTextContentItem({chars:f[2],extraSpacing:0});break;case Ue:flushTextContentItem();w||(w=s.get("XObject")||Dict.empty);var G=f[0]instanceof Name,x=f[0].name;if(G&&D.getByName(x))break;next(new Promise((function(e,i){if(!G)throw new FormatError("XObject must be referred to by name.");let a=w.getRaw(x);if(a instanceof Ref){if(D.getByRef(a)){e();return}if(p.globalImageCache.getData(a,p.pageIndex)){e();return}a=m.fetch(a)}if(!(a instanceof BaseStream))throw new FormatError("XObject should be a stream");const E=a.dict.get("Subtype");if(!(E instanceof Name))throw new FormatError("XObject should have a Name subtype");if("Form"!==E.name){D.set(x,a.dict.objId,!0);e();return}const u=r.state.clone(),d=new StateManager(u),f=lookupMatrix(a.dict.getArray("Matrix"),null);f&&d.transform(f);enqueueChunk();const y={enqueueInvoked:!1,enqueue(e,t){this.enqueueInvoked=!0;g.enqueue(e,t)},get desiredSize(){return g.desiredSize},get ready(){return g.ready}};p.getTextContent({stream:a,task:t,resources:a.dict.get("Resources")||s,stateManager:d,includeMarkedContent:n,sink:y,seenStyles:o,viewBox:c,lang:C,markedContentData:h,disableNormalization:l,keepWhiteSpace:Q}).then((function(){y.enqueueInvoked||D.set(x,a.dict.objId,!0);e()}),i)})).catch((function(e){if(!(e instanceof AbortException)){if(!p.options.ignoreErrors)throw e;warn(`getTextContent - ignoring XObject: "${e}".`)}})));return;case NA:G=f[0]instanceof Name;x=f[0].name;if(G&&b.getByName(x))break;next(new Promise((function(e,t){if(!G)throw new FormatError("GState must be referred to by name.");const i=s.get("ExtGState");if(!(i instanceof Dict))throw new FormatError("ExtGState should be a dictionary.");const a=i.get(x);if(!(a instanceof Dict))throw new FormatError("GState should be a dictionary.");const r=a.get("Font");if(r){flushTextContentItem();S.fontName=null;S.fontSize=r[1];handleSetFont(null,r[0]).then(e,t)}else{b.set(x,a.objId,!0);e()}})).catch((function(e){if(!(e instanceof AbortException)){if(!p.options.ignoreErrors)throw e;warn(`getTextContent - ignoring ExtGState: "${e}".`)}})));return;case He:flushTextContentItem();if(n){h.level++;E.items.push({type:"beginMarkedContent",tag:f[0]instanceof Name?f[0].name:null})}break;case Je:flushTextContentItem();if(n){h.level++;let e=null;f[1]instanceof Dict&&(e=f[1].get("MCID"));E.items.push({type:"beginMarkedContentProps",id:Number.isInteger(e)?`${p.idFactory.getPageObjId()}_mc${e}`:null,tag:f[0]instanceof Name?f[0].name:null})}break;case Ye:flushTextContentItem();if(n){if(0===h.level)break;h.level--;E.items.push({type:"endMarkedContent"})}break;case xA:!e||e.font===S.font&&e.fontSize===S.fontSize&&e.fontName===S.fontName||flushTextContentItem()}if(E.items.length>=g.desiredSize){d=!0;break}}if(d)next(Gs);else{flushTextContentItem();enqueueChunk();e()}})).catch((e=>{if(!(e instanceof AbortException)){if(!this.options.ignoreErrors)throw e;warn(`getTextContent - ignoring errors during "${t.name}" task: "${e}".`);flushTextContentItem();enqueueChunk()}}))}async extractDataStructures(e,t){const i=this.xref;let a;const s=this.readToUnicode(t.toUnicode);if(t.composite){const i=e.get("CIDSystemInfo");i instanceof Dict&&(t.cidSystemInfo={registry:stringToPDFString(i.get("Registry")),ordering:stringToPDFString(i.get("Ordering")),supplement:i.get("Supplement")});try{const t=e.get("CIDToGIDMap");t instanceof BaseStream&&(a=t.getBytes())}catch(e){if(!this.options.ignoreErrors)throw e;warn(`extractDataStructures - ignoring CIDToGIDMap data: "${e}".`)}}const r=[];let n,g=null;if(e.has("Encoding")){n=e.get("Encoding");if(n instanceof Dict){g=n.get("BaseEncoding");g=g instanceof Name?g.name:null;if(n.has("Differences")){const e=n.get("Differences");let t=0;for(const a of e){const e=i.fetchIfRef(a);if("number"==typeof e)t=e;else{if(!(e instanceof Name))throw new FormatError(`Invalid entry in 'Differences' array: ${e}`);r[t++]=e.name}}}}else if(n instanceof Name)g=n.name;else{const e="Encoding is not a Name nor a Dict";if(!this.options.ignoreErrors)throw new FormatError(e);warn(e)}"MacRomanEncoding"!==g&&"MacExpertEncoding"!==g&&"WinAnsiEncoding"!==g&&(g=null)}const o=!t.file||t.isInternalFont,c=_i()[t.name];g&&o&&c&&(g=null);if(g)t.defaultEncoding=getEncoding(g);else{const e=!!(t.flags&Oi),i=!!(t.flags&Pi);n=mi;"TrueType"!==t.type||i||(n=yi);if(e||c){n=pi;o&&(/Symbol/i.test(t.name)?n=wi:/Dingbats/i.test(t.name)?n=Di:/Wingdings/i.test(t.name)&&(n=yi))}t.defaultEncoding=n}t.differences=r;t.baseEncodingName=g;t.hasEncoding=!!g||r.length>0;t.dict=e;t.toUnicode=await s;const C=await this.buildToUnicode(t);t.toUnicode=C;a&&(t.cidToGidMap=this.readCidToGidMap(a,C));return t}_simpleFontToUnicode(e,t=!1){assert(!e.composite,"Must be a simple font.");const i=[],a=e.defaultEncoding.slice(),s=e.baseEncodingName,r=e.differences;for(const e in r){const t=r[e];".notdef"!==t&&(a[e]=t)}const n=xi();for(const r in a){let g=a[r];if(""===g)continue;let o=n[g];if(void 0!==o){i[r]=String.fromCharCode(o);continue}let c=0;switch(g[0]){case"G":3===g.length&&(c=parseInt(g.substring(1),16));break;case"g":5===g.length&&(c=parseInt(g.substring(1),16));break;case"C":case"c":if(g.length>=3&&g.length<=4){const i=g.substring(1);if(t){c=parseInt(i,16);break}c=+i;if(Number.isNaN(c)&&Number.isInteger(parseInt(i,16)))return this._simpleFontToUnicode(e,!0)}break;case"u":o=getUnicodeForGlyph(g,n);-1!==o&&(c=o);break;default:switch(g){case"f_h":case"f_t":case"T_h":i[r]=g.replaceAll("_","");continue}}if(c>0&&c<=1114111&&Number.isInteger(c)){if(s&&c===+r){const e=getEncoding(s);if(e&&(g=e[r])){i[r]=String.fromCharCode(n[g]);continue}}i[r]=String.fromCodePoint(c)}}return i}async buildToUnicode(e){e.hasIncludedToUnicodeMap=e.toUnicode?.length>0;if(e.hasIncludedToUnicodeMap){!e.composite&&e.hasEncoding&&(e.fallbackToUnicode=this._simpleFontToUnicode(e));return e.toUnicode}if(!e.composite)return new ToUnicodeMap(this._simpleFontToUnicode(e));if(e.composite&&(e.cMap.builtInCMap&&!(e.cMap instanceof IdentityCMap)||"Adobe"===e.cidSystemInfo?.registry&&("GB1"===e.cidSystemInfo.ordering||"CNS1"===e.cidSystemInfo.ordering||"Japan1"===e.cidSystemInfo.ordering||"Korea1"===e.cidSystemInfo.ordering))){const{registry:t,ordering:i}=e.cidSystemInfo,a=Name.get(`${t}-${i}-UCS2`),s=await CMapFactory.create({encoding:a,fetchBuiltInCMap:this._fetchBuiltInCMapBound,useCMap:null}),r=[],n=[];e.cMap.forEach((function(e,t){if(t>65535)throw new FormatError("Max size of CID is 65,535");const i=s.lookup(t);if(i){n.length=0;for(let e=0,t=i.length;e>1;(0!==s||t.has(r))&&(i[r]=s)}return i}extractWidths(e,t,i){const a=this.xref;let s=[],r=0;const n=[];let g;if(i.composite){const t=e.get("DW");r="number"==typeof t?Math.ceil(t):1e3;const o=e.get("W");if(Array.isArray(o))for(let e=0,t=o.length;e{const t=o.get(e),s=new OperatorList;return a.getOperatorList({stream:t,task:i,resources:c,operatorList:s}).then((()=>{s.fnArray[0]===Ee&&this._removeType3ColorOperators(s,E);C[e]=s.getIR();for(const e of s.dependencies)n.add(e)})).catch((function(t){warn(`Type3 font resource "${e}" is not available.`);const i=new OperatorList;C[e]=i.getIR()}))}));this.type3Loaded=g.then((()=>{r.charProcOperatorList=C;if(this._bbox){r.isCharBBox=!0;r.bbox=this._bbox}}));return this.type3Loaded}_removeType3ColorOperators(e,t=NaN){const i=Util.normalizeRect(e.argsArray[0].slice(2)),a=i[2]-i[0],s=i[3]-i[1],r=Math.hypot(a,s);if(0===a||0===s){e.fnArray.splice(0,1);e.argsArray.splice(0,1)}else if(0===t||Math.round(r/t)>=10){this._bbox||(this._bbox=[1/0,1/0,-1/0,-1/0]);this._bbox[0]=Math.min(this._bbox[0],i[0]);this._bbox[1]=Math.min(this._bbox[1],i[1]);this._bbox[2]=Math.max(this._bbox[2],i[2]);this._bbox[3]=Math.max(this._bbox[3],i[3])}let n=0,g=e.length;for(;n=MA&&r<=VA;if(s.variableArgs)g>n&&info(`Command ${a}: expected [0, ${n}] args, but received ${g} args.`);else{if(g!==n){const e=this.nonProcessedArgs;for(;g>n;){e.push(t.shift());g--}for(;gEvaluatorPreprocessor.MAX_INVALID_PATH_OPS)throw new FormatError(`Invalid ${e}`);warn(`Skipping ${e}`);null!==t&&(t.length=0);continue}}this.preprocessCommand(r,t);e.fn=r;e.args=t;return!0}if(i===yt)return!1;if(null!==i){null===t&&(t=[]);t.push(i);if(t.length>33)throw new FormatError("Too many arguments")}}}preprocessCommand(e,t){switch(0|e){case GA:this.stateManager.save();break;case xA:this.stateManager.restore();break;case UA:this.stateManager.transform(t)}}}class DefaultAppearanceEvaluator extends EvaluatorPreprocessor{constructor(e){super(new StringStream(e))}parse(){const e={fn:0,args:[]},t={fontSize:0,fontName:"",fontColor:new Uint8ClampedArray(3)};try{for(;;){e.args.length=0;if(!this.read(e))break;if(0!==this.savedStatesDepth)continue;const{fn:i,args:a}=e;switch(0|i){case se:const[e,i]=a;e instanceof Name&&(t.fontName=e.name);"number"==typeof i&&i>0&&(t.fontSize=i);break;case Fe:ColorSpace.singletons.rgb.getRgbItem(a,0,t.fontColor,0);break;case De:ColorSpace.singletons.gray.getRgbItem(a,0,t.fontColor,0);break;case ke:ColorSpace.singletons.cmyk.getRgbItem(a,0,t.fontColor,0)}}}catch(e){warn(`parseDefaultAppearance - ignoring errors: "${e}".`)}return t}}function parseDefaultAppearance(e){return new DefaultAppearanceEvaluator(e).parse()}class AppearanceStreamEvaluator extends EvaluatorPreprocessor{constructor(e,t,i){super(e);this.stream=e;this.evaluatorOptions=t;this.xref=i;this.resources=e.dict?.get("Resources")}parse(){const e={fn:0,args:[]};let t={scaleFactor:1,fontSize:0,fontName:"",fontColor:new Uint8ClampedArray(3),fillColorSpace:ColorSpace.singletons.gray},i=!1;const a=[];try{for(;;){e.args.length=0;if(i||!this.read(e))break;const{fn:s,args:r}=e;switch(0|s){case GA:a.push({scaleFactor:t.scaleFactor,fontSize:t.fontSize,fontName:t.fontName,fontColor:t.fontColor.slice(),fillColorSpace:t.fillColorSpace});break;case xA:t=a.pop()||t;break;case Ie:t.scaleFactor*=Math.hypot(r[0],r[1]);break;case se:const[e,s]=r;e instanceof Name&&(t.fontName=e.name);"number"==typeof s&&s>0&&(t.fontSize=s*t.scaleFactor);break;case de:t.fillColorSpace=ColorSpace.parse({cs:r[0],xref:this.xref,resources:this.resources,pdfFunctionFactory:this._pdfFunctionFactory,localColorSpaceCache:this._localColorSpaceCache});break;case me:t.fillColorSpace.getRgbItem(r,0,t.fontColor,0);break;case Fe:ColorSpace.singletons.rgb.getRgbItem(r,0,t.fontColor,0);break;case De:ColorSpace.singletons.gray.getRgbItem(r,0,t.fontColor,0);break;case ke:ColorSpace.singletons.cmyk.getRgbItem(r,0,t.fontColor,0);break;case Ce:case he:case le:case Be:i=!0}}}catch(e){warn(`parseAppearanceStream - ignoring errors: "${e}".`)}this.stream.reset();delete t.scaleFactor;delete t.fillColorSpace;return t}get _localColorSpaceCache(){return shadow(this,"_localColorSpaceCache",new LocalColorSpaceCache)}get _pdfFunctionFactory(){return shadow(this,"_pdfFunctionFactory",new PDFFunctionFactory({xref:this.xref,isEvalSupported:this.evaluatorOptions.isEvalSupported}))}}function getPdfColor(e,t){if(e[0]===e[1]&&e[1]===e[2]){return`${numberToString(e[0]/255)} ${t?"g":"G"}`}return Array.from(e,(e=>numberToString(e/255))).join(" ")+" "+(t?"rg":"RG")}class FakeUnicodeFont{constructor(e,t){this.xref=e;this.widths=null;this.firstChar=1/0;this.lastChar=-1/0;this.fontFamily=t;const i=new OffscreenCanvas(1,1);this.ctxMeasure=i.getContext("2d",{willReadFrequently:!0});FakeUnicodeFont._fontNameId||(FakeUnicodeFont._fontNameId=1);this.fontName=Name.get(`InvalidPDFjsFont_${t}_${FakeUnicodeFont._fontNameId++}`)}get fontDescriptorRef(){if(!FakeUnicodeFont._fontDescriptorRef){const e=new Dict(this.xref);e.set("Type",Name.get("FontDescriptor"));e.set("FontName",this.fontName);e.set("FontFamily","MyriadPro Regular");e.set("FontBBox",[0,0,0,0]);e.set("FontStretch",Name.get("Normal"));e.set("FontWeight",400);e.set("ItalicAngle",0);FakeUnicodeFont._fontDescriptorRef=this.xref.getNewPersistentRef(e)}return FakeUnicodeFont._fontDescriptorRef}get descendantFontRef(){const e=new Dict(this.xref);e.set("BaseFont",this.fontName);e.set("Type",Name.get("Font"));e.set("Subtype",Name.get("CIDFontType0"));e.set("CIDToGIDMap",Name.get("Identity"));e.set("FirstChar",this.firstChar);e.set("LastChar",this.lastChar);e.set("FontDescriptor",this.fontDescriptorRef);e.set("DW",1e3);const t=[],i=[...this.widths.entries()].sort();let a=null,s=null;for(const[e,r]of i)if(a)if(e===a+s.length)s.push(r);else{t.push(a,s);a=e;s=[r]}else{a=e;s=[r]}a&&t.push(a,s);e.set("W",t);const r=new Dict(this.xref);r.set("Ordering","Identity");r.set("Registry","Adobe");r.set("Supplement",0);e.set("CIDSystemInfo",r);return this.xref.getNewPersistentRef(e)}get baseFontRef(){const e=new Dict(this.xref);e.set("BaseFont",this.fontName);e.set("Type",Name.get("Font"));e.set("Subtype",Name.get("Type0"));e.set("Encoding",Name.get("Identity-H"));e.set("DescendantFonts",[this.descendantFontRef]);e.set("ToUnicode",Name.get("Identity-H"));return this.xref.getNewPersistentRef(e)}get resources(){const e=new Dict(this.xref),t=new Dict(this.xref);t.set(this.fontName.name,this.baseFontRef);e.set("Font",t);return e}_createContext(){this.widths=new Map;this.ctxMeasure.font=`1000px ${this.fontFamily}`;return this.ctxMeasure}createFontResources(e){const t=this._createContext();for(const i of e.split(/\r\n?|\n/))for(const e of i.split("")){const i=e.charCodeAt(0);if(this.widths.has(i))continue;const a=t.measureText(e),s=Math.ceil(a.width);this.widths.set(i,s);this.firstChar=Math.min(i,this.firstChar);this.lastChar=Math.max(i,this.lastChar)}return this.resources}static getFirstPositionInfo(e,t,i){const[a,n,g,o]=e;let c=g-a,C=o-n;t%180!=0&&([c,C]=[C,c]);const h=s*i;return{coords:[0,C+r*i-h],bbox:[0,0,c,C],matrix:0!==t?getRotationMatrix(t,C,h):void 0}}createAppearance(e,t,i,a,n,g){const o=this._createContext(),c=[];let C=-1/0;for(const t of e.split(/\r\n?|\n/)){c.push(t);const e=o.measureText(t).width;C=Math.max(C,e);for(const e of codePointIter(t)){const t=String.fromCodePoint(e);let i=this.widths.get(e);if(void 0===i){const a=o.measureText(t);i=Math.ceil(a.width);this.widths.set(e,i);this.firstChar=Math.min(e,this.firstChar);this.lastChar=Math.max(e,this.lastChar)}}}C*=a/1e3;const[h,l,Q,E]=t;let u=Q-h,d=E-l;i%180!=0&&([u,d]=[d,u]);let f=1;C>u&&(f=u/C);let p=1;const m=s*a,y=r*a,w=m*c.length;w>d&&(p=d/w);const D=a*Math.min(f,p),b=["q",`0 0 ${numberToString(u)} ${numberToString(d)} re W n`,"BT",`1 0 0 1 0 ${numberToString(d+y)} Tm 0 Tc ${getPdfColor(n,!0)}`,`/${this.fontName.name} ${numberToString(D)} Tf`],{resources:F}=this;if(1!==(g="number"==typeof g&&g>=0&&g<=1?g:1)){b.push("/R0 gs");const e=new Dict(this.xref),t=new Dict(this.xref);t.set("ca",g);t.set("CA",g);t.set("Type",Name.get("ExtGState"));e.set("R0",t);F.set("ExtGState",e)}const S=numberToString(m);for(const e of c)b.push(`0 -${S} Td <${stringToUTF16HexString(e)}> Tj`);b.push("ET","Q");const k=b.join("\n"),R=new Dict(this.xref);R.set("Subtype",Name.get("Form"));R.set("Type",Name.get("XObject"));R.set("BBox",[0,0,u,d]);R.set("Length",k.length);R.set("Resources",F);if(i){const e=getRotationMatrix(i,u,d);R.set("Matrix",e)}const N=new StringStream(k);N.dict=R;return N}}class NameOrNumberTree{constructor(e,t,i){this.root=e;this.xref=t;this._type=i}getAll(){const e=new Map;if(!this.root)return e;const t=this.xref,i=new RefSet;i.put(this.root);const a=[this.root];for(;a.length>0;){const s=t.fetchIfRef(a.shift());if(!(s instanceof Dict))continue;if(s.has("Kids")){const e=s.get("Kids");if(!Array.isArray(e))continue;for(const t of e){if(i.has(t))throw new FormatError(`Duplicate entry in "${this._type}" tree.`);a.push(t);i.put(t)}continue}const r=s.get(this._type);if(Array.isArray(r))for(let i=0,a=r.length;i10){warn(`Search depth limit reached for "${this._type}" tree.`);return null}const s=i.get("Kids");if(!Array.isArray(s))return null;let r=0,n=s.length-1;for(;r<=n;){const a=r+n>>1,g=t.fetchIfRef(s[a]),o=g.get("Limits");if(et.fetchIfRef(o[1]))){i=g;break}r=a+1}}if(r>n)return null}const s=i.get(this._type);if(Array.isArray(s)){let i=0,a=s.length-2;for(;i<=a;){const r=i+a>>1,n=r+(1&r),g=t.fetchIfRef(s[n]);if(eg))return s[n+1];i=n+2}}}return null}get(e){return this.xref.fetchIfRef(this.getRaw(e))}}class NameTree extends NameOrNumberTree{constructor(e,t){super(e,t,"Names")}}class NumberTree extends NameOrNumberTree{constructor(e,t){super(e,t,"Nums")}}function clearGlobalCaches(){!function clearPatternCaches(){ba=Object.create(null)}();!function clearPrimitiveCaches(){wt=Object.create(null);Dt=Object.create(null);bt=Object.create(null)}();!function clearUnicodeCaches(){vi.clear()}();JpxImage.cleanup()}function pickPlatformItem(e){return e instanceof Dict?e.has("UF")?e.get("UF"):e.has("F")?e.get("F"):e.has("Unix")?e.get("Unix"):e.has("Mac")?e.get("Mac"):e.has("DOS")?e.get("DOS"):null:null}class FileSpec{#G=!1;constructor(e,t,i=!1){if(e instanceof Dict){this.xref=t;this.root=e;e.has("FS")&&(this.fs=e.get("FS"));e.has("RF")&&warn("Related file specifications are not supported");i||(e.has("EF")?this.#G=!0:warn("Non-embedded file specifications are not supported"))}}get filename(){let e="";const t=pickPlatformItem(this.root);t&&"string"==typeof t&&(e=stringToPDFString(t).replaceAll("\\\\","\\").replaceAll("\\/","/").replaceAll("\\","/"));return shadow(this,"filename",e||"unnamed")}get content(){if(!this.#G)return null;this._contentRef||=pickPlatformItem(this.root?.get("EF"));let e=null;if(this._contentRef){const t=this.xref.fetchIfRef(this._contentRef);t instanceof BaseStream?e=t.getBytes():warn("Embedded file specification points to non-existing/invalid content")}else warn("Embedded file specification does not have any content");return e}get description(){let e="";const t=this.root?.get("Desc");t&&"string"==typeof t&&(e=stringToPDFString(t));return shadow(this,"description",e)}get serializable(){return{rawFilename:this.filename,filename:(e=this.filename,e.substring(e.lastIndexOf("/")+1)),content:this.content,description:this.description};var e}}const xs=0,Us=-2,Ms=-3,Ls=-4,Hs=-5,Js=-6,Ys=-9;function isWhitespace(e,t){const i=e[t];return" "===i||"\n"===i||"\r"===i||"\t"===i}class XMLParserBase{_resolveEntities(e){return e.replaceAll(/&([^;]+);/g,((e,t)=>{if("#x"===t.substring(0,2))return String.fromCodePoint(parseInt(t.substring(2),16));if("#"===t.substring(0,1))return String.fromCodePoint(parseInt(t.substring(1),10));switch(t){case"lt":return"<";case"gt":return">";case"amp":return"&";case"quot":return'"';case"apos":return"'"}return this.onResolveEntity(t)}))}_parseContent(e,t){const i=[];let a=t;function skipWs(){for(;a"!==e[a]&&"/"!==e[a];)++a;const s=e.substring(t,a);skipWs();for(;a"!==e[a]&&"/"!==e[a]&&"?"!==e[a];){skipWs();let t="",s="";for(;a"!==e[i]&&"?"!==e[i]&&"/"!==e[i];)++i;const a=e.substring(t,i);!function skipWs(){for(;i"!==e[i+1]);)++i;return{name:a,value:e.substring(s,i),parsed:i-t}}parseXml(e){let t=0;for(;t",i);if(t<0){this.onError(Ys);return}this.onEndElement(e.substring(i,t));i=t+1;break;case"?":++i;const a=this._parseProcessingInstruction(e,i);if("?>"!==e.substring(i+a.parsed,i+a.parsed+2)){this.onError(Ms);return}this.onPi(a.name,a.value);i+=a.parsed+2;break;case"!":if("--"===e.substring(i+1,i+3)){t=e.indexOf("--\x3e",i+3);if(t<0){this.onError(Hs);return}this.onComment(e.substring(i+3,t));i=t+3}else if("[CDATA["===e.substring(i+1,i+8)){t=e.indexOf("]]>",i+8);if(t<0){this.onError(Us);return}this.onCdata(e.substring(i+8,t));i=t+3}else{if("DOCTYPE"!==e.substring(i+1,i+8)){this.onError(Js);return}{const a=e.indexOf("[",i+8);let s=!1;t=e.indexOf(">",i+8);if(t<0){this.onError(Ls);return}if(a>0&&t>a){t=e.indexOf("]>",i+8);if(t<0){this.onError(Ls);return}s=!0}const r=e.substring(i+8,t+(s?1:0));this.onDoctype(r);i=t+(s?2:1)}}break;default:const s=this._parseContent(e,i);if(null===s){this.onError(Js);return}let r=!1;if("/>"===e.substring(i+s.parsed,i+s.parsed+2))r=!0;else if(">"!==e.substring(i+s.parsed,i+s.parsed+1)){this.onError(Ys);return}this.onBeginElement(s.name,s.attributes,r);i+=s.parsed+(r?2:1)}}else{for(;i0}searchNode(e,t){if(t>=e.length)return this;const i=e[t];if(i.name.startsWith("#")&&t0){a.push([s,0]);s=s.childNodes[0]}else{if(0===a.length)return null;for(;0!==a.length;){const[e,t]=a.pop(),i=t+1;if(i");for(const t of this.childNodes)t.dump(e);e.push(``)}else this.nodeValue?e.push(`>${encodeToXmlString(this.nodeValue)}`):e.push("/>")}else e.push(encodeToXmlString(this.nodeValue))}}class SimpleXMLParser extends XMLParserBase{constructor({hasAttributes:e=!1,lowerCaseName:t=!1}){super();this._currentFragment=null;this._stack=null;this._errorCode=xs;this._hasAttributes=e;this._lowerCaseName=t}parseFromString(e){this._currentFragment=[];this._stack=[];this._errorCode=xs;this.parseXml(e);if(this._errorCode!==xs)return;const[t]=this._currentFragment;return t?{documentElement:t}:void 0}onText(e){if(function isWhitespaceString(e){for(let t=0,i=e.length;t\\376\\377([^<]+)/g,(function(e,t){const i=t.replaceAll(/\\([0-3])([0-7])([0-7])/g,(function(e,t,i,a){return String.fromCharCode(64*t+8*i+1*a)})).replaceAll(/&(amp|apos|gt|lt|quot);/g,(function(e,t){switch(t){case"amp":return"&";case"apos":return"'";case"gt":return">";case"lt":return"<";case"quot":return'"'}throw new Error(`_repair: ${t} isn't defined.`)})),a=[">"];for(let e=0,t=i.length;e=32&&t<127&&60!==t&&62!==t&&38!==t?a.push(String.fromCharCode(t)):a.push("&#x"+(65536+t).toString(16).substring(1)+";")}return a.join("")}))}_getSequence(e){const t=e.nodeName;return"rdf:bag"!==t&&"rdf:seq"!==t&&"rdf:alt"!==t?null:e.childNodes.filter((e=>"rdf:li"===e.nodeName))}_parseArray(e){if(!e.hasChildNodes())return;const[t]=e.childNodes,i=this._getSequence(t)||[];this._metadataMap.set(e.nodeName,i.map((e=>e.textContent.trim())))}_parse(e){let t=e.documentElement;if("rdf:rdf"!==t.nodeName){t=t.firstChild;for(;t&&"rdf:rdf"!==t.nodeName;)t=t.nextSibling}if(t&&"rdf:rdf"===t.nodeName&&t.hasChildNodes())for(const e of t.childNodes)if("rdf:description"===e.nodeName)for(const t of e.childNodes){const e=t.nodeName;switch(e){case"#text":continue;case"dc:creator":case"dc:subject":this._parseArray(t);continue}this._metadataMap.set(e,t.textContent.trim())}}get serializable(){return{parsedData:this._metadataMap,rawData:this._data}}}class DecryptStream extends DecodeStream{constructor(e,t,i){super(t);this.str=e;this.dict=e.dict;this.decrypt=i;this.nextChunk=null;this.initialized=!1}readBlock(){let e;if(this.initialized)e=this.nextChunk;else{e=this.str.getBytes(512);this.initialized=!0}if(!e||0===e.length){this.eof=!0;return}this.nextChunk=this.str.getBytes(512);const t=this.nextChunk?.length>0;e=(0,this.decrypt)(e,!t);const i=this.bufferLength,a=i+e.length;this.ensureBuffer(a).set(e,i);this.bufferLength=a}}class ARCFourCipher{constructor(e){this.a=0;this.b=0;const t=new Uint8Array(256),i=e.length;for(let e=0;e<256;++e)t[e]=e;for(let a=0,s=0;a<256;++a){const r=t[a];s=s+r+e[a%i]&255;t[a]=t[s];t[s]=r}this.s=t}encryptBlock(e){let t=this.a,i=this.b;const a=this.s,s=e.length,r=new Uint8Array(s);for(let n=0;n>5&255;C[h++]=s>>13&255;C[h++]=s>>21&255;C[h++]=s>>>29&255;C[h++]=0;C[h++]=0;C[h++]=0;const E=new Int32Array(16);for(h=0;h>>32-g)|0;s=r}r=r+s|0;n=n+c|0;g=g+Q|0;o=o+u|0}return new Uint8Array([255&r,r>>8&255,r>>16&255,r>>>24&255,255&n,n>>8&255,n>>16&255,n>>>24&255,255&g,g>>8&255,g>>16&255,g>>>24&255,255&o,o>>8&255,o>>16&255,o>>>24&255])}}();class Word64{constructor(e,t){this.high=0|e;this.low=0|t}and(e){this.high&=e.high;this.low&=e.low}xor(e){this.high^=e.high;this.low^=e.low}or(e){this.high|=e.high;this.low|=e.low}shiftRight(e){if(e>=32){this.low=this.high>>>e-32|0;this.high=0}else{this.low=this.low>>>e|this.high<<32-e;this.high=this.high>>>e|0}}shiftLeft(e){if(e>=32){this.high=this.low<>>32-e;this.low<<=e}}rotateRight(e){let t,i;if(32&e){i=this.low;t=this.high}else{t=this.low;i=this.high}e&=31;this.low=t>>>e|i<<32-e;this.high=i>>>e|t<<32-e}not(){this.high=~this.high;this.low=~this.low}add(e){const t=(this.low>>>0)+(e.low>>>0);let i=(this.high>>>0)+(e.high>>>0);t>4294967295&&(i+=1);this.low=0|t;this.high=0|i}copyTo(e,t){e[t]=this.high>>>24&255;e[t+1]=this.high>>16&255;e[t+2]=this.high>>8&255;e[t+3]=255&this.high;e[t+4]=this.low>>>24&255;e[t+5]=this.low>>16&255;e[t+6]=this.low>>8&255;e[t+7]=255&this.low}assign(e){this.high=e.high;this.low=e.low}}const Ks=function calculateSHA256Closure(){function rotr(e,t){return e>>>t|e<<32-t}function ch(e,t,i){return e&t^~e&i}function maj(e,t,i){return e&t^e&i^t&i}function sigma(e){return rotr(e,2)^rotr(e,13)^rotr(e,22)}function sigmaPrime(e){return rotr(e,6)^rotr(e,11)^rotr(e,25)}function littleSigma(e){return rotr(e,7)^rotr(e,18)^e>>>3}const e=[1116352408,1899447441,3049323471,3921009573,961987163,1508970993,2453635748,2870763221,3624381080,310598401,607225278,1426881987,1925078388,2162078206,2614888103,3248222580,3835390401,4022224774,264347078,604807628,770255983,1249150122,1555081692,1996064986,2554220882,2821834349,2952996808,3210313671,3336571891,3584528711,113926993,338241895,666307205,773529912,1294757372,1396182291,1695183700,1986661051,2177026350,2456956037,2730485921,2820302411,3259730800,3345764771,3516065817,3600352804,4094571909,275423344,430227734,506948616,659060556,883997877,958139571,1322822218,1537002063,1747873779,1955562222,2024104815,2227730452,2361852424,2428436474,2756734187,3204031479,3329325298];return function hash(t,i,a){let s=1779033703,r=3144134277,n=1013904242,g=2773480762,o=1359893119,c=2600822924,C=528734635,h=1541459225;const l=64*Math.ceil((a+9)/64),Q=new Uint8Array(l);let E,u;for(E=0;E>>29&255;Q[E++]=a>>21&255;Q[E++]=a>>13&255;Q[E++]=a>>5&255;Q[E++]=a<<3&255;const f=new Uint32Array(64);for(E=0;E>>10)+f[u-7]+littleSigma(f[u-15])+f[u-16]|0;let t,i,a=s,l=r,d=n,m=g,y=o,w=c,D=C,b=h;for(u=0;u<64;++u){t=b+sigmaPrime(y)+ch(y,w,D)+e[u]+f[u];i=sigma(a)+maj(a,l,d);b=D;D=w;w=y;y=m+t|0;m=d;d=l;l=a;a=t+i|0}s=s+a|0;r=r+l|0;n=n+d|0;g=g+m|0;o=o+y|0;c=c+w|0;C=C+D|0;h=h+b|0}var p;return new Uint8Array([s>>24&255,s>>16&255,s>>8&255,255&s,r>>24&255,r>>16&255,r>>8&255,255&r,n>>24&255,n>>16&255,n>>8&255,255&n,g>>24&255,g>>16&255,g>>8&255,255&g,o>>24&255,o>>16&255,o>>8&255,255&o,c>>24&255,c>>16&255,c>>8&255,255&c,C>>24&255,C>>16&255,C>>8&255,255&C,h>>24&255,h>>16&255,h>>8&255,255&h])}}(),Ts=function calculateSHA512Closure(){function ch(e,t,i,a,s){e.assign(t);e.and(i);s.assign(t);s.not();s.and(a);e.xor(s)}function maj(e,t,i,a,s){e.assign(t);e.and(i);s.assign(t);s.and(a);e.xor(s);s.assign(i);s.and(a);e.xor(s)}function sigma(e,t,i){e.assign(t);e.rotateRight(28);i.assign(t);i.rotateRight(34);e.xor(i);i.assign(t);i.rotateRight(39);e.xor(i)}function sigmaPrime(e,t,i){e.assign(t);e.rotateRight(14);i.assign(t);i.rotateRight(18);e.xor(i);i.assign(t);i.rotateRight(41);e.xor(i)}function littleSigma(e,t,i){e.assign(t);e.rotateRight(1);i.assign(t);i.rotateRight(8);e.xor(i);i.assign(t);i.shiftRight(7);e.xor(i)}function littleSigmaPrime(e,t,i){e.assign(t);e.rotateRight(19);i.assign(t);i.rotateRight(61);e.xor(i);i.assign(t);i.shiftRight(6);e.xor(i)}const e=[new Word64(1116352408,3609767458),new Word64(1899447441,602891725),new Word64(3049323471,3964484399),new Word64(3921009573,2173295548),new Word64(961987163,4081628472),new Word64(1508970993,3053834265),new Word64(2453635748,2937671579),new Word64(2870763221,3664609560),new Word64(3624381080,2734883394),new Word64(310598401,1164996542),new Word64(607225278,1323610764),new Word64(1426881987,3590304994),new Word64(1925078388,4068182383),new Word64(2162078206,991336113),new Word64(2614888103,633803317),new Word64(3248222580,3479774868),new Word64(3835390401,2666613458),new Word64(4022224774,944711139),new Word64(264347078,2341262773),new Word64(604807628,2007800933),new Word64(770255983,1495990901),new Word64(1249150122,1856431235),new Word64(1555081692,3175218132),new Word64(1996064986,2198950837),new Word64(2554220882,3999719339),new Word64(2821834349,766784016),new Word64(2952996808,2566594879),new Word64(3210313671,3203337956),new Word64(3336571891,1034457026),new Word64(3584528711,2466948901),new Word64(113926993,3758326383),new Word64(338241895,168717936),new Word64(666307205,1188179964),new Word64(773529912,1546045734),new Word64(1294757372,1522805485),new Word64(1396182291,2643833823),new Word64(1695183700,2343527390),new Word64(1986661051,1014477480),new Word64(2177026350,1206759142),new Word64(2456956037,344077627),new Word64(2730485921,1290863460),new Word64(2820302411,3158454273),new Word64(3259730800,3505952657),new Word64(3345764771,106217008),new Word64(3516065817,3606008344),new Word64(3600352804,1432725776),new Word64(4094571909,1467031594),new Word64(275423344,851169720),new Word64(430227734,3100823752),new Word64(506948616,1363258195),new Word64(659060556,3750685593),new Word64(883997877,3785050280),new Word64(958139571,3318307427),new Word64(1322822218,3812723403),new Word64(1537002063,2003034995),new Word64(1747873779,3602036899),new Word64(1955562222,1575990012),new Word64(2024104815,1125592928),new Word64(2227730452,2716904306),new Word64(2361852424,442776044),new Word64(2428436474,593698344),new Word64(2756734187,3733110249),new Word64(3204031479,2999351573),new Word64(3329325298,3815920427),new Word64(3391569614,3928383900),new Word64(3515267271,566280711),new Word64(3940187606,3454069534),new Word64(4118630271,4000239992),new Word64(116418474,1914138554),new Word64(174292421,2731055270),new Word64(289380356,3203993006),new Word64(460393269,320620315),new Word64(685471733,587496836),new Word64(852142971,1086792851),new Word64(1017036298,365543100),new Word64(1126000580,2618297676),new Word64(1288033470,3409855158),new Word64(1501505948,4234509866),new Word64(1607167915,987167468),new Word64(1816402316,1246189591)];return function hash(t,i,a,s=!1){let r,n,g,o,c,C,h,l;if(s){r=new Word64(3418070365,3238371032);n=new Word64(1654270250,914150663);g=new Word64(2438529370,812702999);o=new Word64(355462360,4144912697);c=new Word64(1731405415,4290775857);C=new Word64(2394180231,1750603025);h=new Word64(3675008525,1694076839);l=new Word64(1203062813,3204075428)}else{r=new Word64(1779033703,4089235720);n=new Word64(3144134277,2227873595);g=new Word64(1013904242,4271175723);o=new Word64(2773480762,1595750129);c=new Word64(1359893119,2917565137);C=new Word64(2600822924,725511199);h=new Word64(528734635,4215389547);l=new Word64(1541459225,327033209)}const Q=128*Math.ceil((a+17)/128),E=new Uint8Array(Q);let u,d;for(u=0;u>>29&255;E[u++]=a>>21&255;E[u++]=a>>13&255;E[u++]=a>>5&255;E[u++]=a<<3&255;const p=new Array(80);for(u=0;u<80;u++)p[u]=new Word64(0,0);let m=new Word64(0,0),y=new Word64(0,0),w=new Word64(0,0),D=new Word64(0,0),b=new Word64(0,0),F=new Word64(0,0),S=new Word64(0,0),k=new Word64(0,0);const R=new Word64(0,0),N=new Word64(0,0),G=new Word64(0,0),x=new Word64(0,0);let U,M;for(u=0;u=1;--e){i=r[13];r[13]=r[9];r[9]=r[5];r[5]=r[1];r[1]=i;i=r[14];a=r[10];r[14]=r[6];r[10]=r[2];r[6]=i;r[2]=a;i=r[15];a=r[11];s=r[7];r[15]=r[3];r[11]=i;r[7]=a;r[3]=s;for(let e=0;e<16;++e)r[e]=this._inv_s[r[e]];for(let i=0,a=16*e;i<16;++i,++a)r[i]^=t[a];for(let e=0;e<16;e+=4){const t=this._mix[r[e]],a=this._mix[r[e+1]],s=this._mix[r[e+2]],n=this._mix[r[e+3]];i=t^a>>>8^a<<24^s>>>16^s<<16^n>>>24^n<<8;r[e]=i>>>24&255;r[e+1]=i>>16&255;r[e+2]=i>>8&255;r[e+3]=255&i}}i=r[13];r[13]=r[9];r[9]=r[5];r[5]=r[1];r[1]=i;i=r[14];a=r[10];r[14]=r[6];r[10]=r[2];r[6]=i;r[2]=a;i=r[15];a=r[11];s=r[7];r[15]=r[3];r[11]=i;r[7]=a;r[3]=s;for(let e=0;e<16;++e){r[e]=this._inv_s[r[e]];r[e]^=t[e]}return r}_encrypt(e,t){const i=this._s;let a,s,r;const n=new Uint8Array(16);n.set(e);for(let e=0;e<16;++e)n[e]^=t[e];for(let e=1;e=a;--i)if(e[i]!==t){t=0;break}g-=t;r[r.length-1]=e.subarray(0,16-t)}}const o=new Uint8Array(g);for(let e=0,t=0,i=r.length;e=256&&(g=255&(27^g))}for(let t=0;t<4;++t){i[e]=a^=i[e-32];e++;i[e]=s^=i[e-32];e++;i[e]=r^=i[e-32];e++;i[e]=n^=i[e-32];e++}}return i}}class PDF17{checkOwnerPassword(e,t,i,a){const s=new Uint8Array(e.length+56);s.set(e,0);s.set(t,e.length);s.set(i,e.length+t.length);return isArrayEqual(Ks(s,0,s.length),a)}checkUserPassword(e,t,i){const a=new Uint8Array(e.length+8);a.set(e,0);a.set(t,e.length);return isArrayEqual(Ks(a,0,a.length),i)}getOwnerKey(e,t,i,a){const s=new Uint8Array(e.length+56);s.set(e,0);s.set(t,e.length);s.set(i,e.length+t.length);const r=Ks(s,0,s.length);return new AES256Cipher(r).decryptBlock(a,!1,new Uint8Array(16))}getUserKey(e,t,i){const a=new Uint8Array(e.length+8);a.set(e,0);a.set(t,e.length);const s=Ks(a,0,a.length);return new AES256Cipher(s).decryptBlock(i,!1,new Uint8Array(16))}}class PDF20{_hash(e,t,i){let a=Ks(t,0,t.length).subarray(0,32),s=[0],r=0;for(;r<64||s.at(-1)>r-32;){const t=e.length+a.length+i.length,c=new Uint8Array(t);let C=0;c.set(e,C);C+=e.length;c.set(a,C);C+=a.length;c.set(i,C);const h=new Uint8Array(64*t);for(let e=0,i=0;e<64;e++,i+=t)h.set(c,i);s=new AES128Cipher(a.subarray(0,16)).encrypt(h,a.subarray(16,32));const l=s.slice(0,16).reduce(((e,t)=>e+t),0)%3;0===l?a=Ks(s,0,s.length):1===l?a=(n=s,g=0,o=s.length,Ts(n,g,o,!0)):2===l&&(a=Ts(s,0,s.length));r++}var n,g,o;return a.subarray(0,32)}checkOwnerPassword(e,t,i,a){const s=new Uint8Array(e.length+56);s.set(e,0);s.set(t,e.length);s.set(i,e.length+t.length);return isArrayEqual(this._hash(e,s,i),a)}checkUserPassword(e,t,i){const a=new Uint8Array(e.length+8);a.set(e,0);a.set(t,e.length);return isArrayEqual(this._hash(e,a,[]),i)}getOwnerKey(e,t,i,a){const s=new Uint8Array(e.length+56);s.set(e,0);s.set(t,e.length);s.set(i,e.length+t.length);const r=this._hash(e,s,i);return new AES256Cipher(r).decryptBlock(a,!1,new Uint8Array(16))}getUserKey(e,t,i){const a=new Uint8Array(e.length+8);a.set(e,0);a.set(t,e.length);const s=this._hash(e,a,[]);return new AES256Cipher(s).decryptBlock(i,!1,new Uint8Array(16))}}class CipherTransform{constructor(e,t){this.StringCipherConstructor=e;this.StreamCipherConstructor=t}createStream(e,t){const i=new this.StreamCipherConstructor;return new DecryptStream(e,t,(function cipherTransformDecryptStream(e,t){return i.decryptBlock(e,t)}))}decryptString(e){const t=new this.StringCipherConstructor;let i=stringToBytes(e);i=t.decryptBlock(i,!0);return bytesToString(i)}encryptString(e){const t=new this.StringCipherConstructor;if(t instanceof AESBaseCipher){const i=16-e.length%16;e+=String.fromCharCode(i).repeat(i);const a=new Uint8Array(16);if("undefined"!=typeof crypto)crypto.getRandomValues(a);else for(let e=0;e<16;e++)a[e]=Math.floor(256*Math.random());let s=stringToBytes(e);s=t.encrypt(s,a);const r=new Uint8Array(16+s.length);r.set(a);r.set(s,16);return bytesToString(r)}let i=stringToBytes(e);i=t.encrypt(i);return bytesToString(i)}}class CipherTransformFactory{static#x=new Uint8Array([40,191,78,94,78,117,138,65,100,0,78,86,255,250,1,8,46,46,0,182,208,104,62,128,47,12,169,254,100,83,105,122]);#U(e,t,i,a,s,r,n,g,o,c,C,h){if(t){const e=Math.min(127,t.length);t=t.subarray(0,e)}else t=[];const l=6===e?new PDF20:new PDF17;return l.checkUserPassword(t,g,n)?l.getUserKey(t,o,C):t.length&&l.checkOwnerPassword(t,a,r,i)?l.getOwnerKey(t,s,r,c):null}#M(e,t,i,a,s,r,n,g){const o=40+i.length+e.length,c=new Uint8Array(o);let C,h,l=0;if(t){h=Math.min(32,t.length);for(;l>8&255;c[l++]=s>>16&255;c[l++]=s>>>24&255;for(C=0,h=e.length;C=4&&!g){c[l++]=255;c[l++]=255;c[l++]=255;c[l++]=255}let Q=vs(c,0,l);const E=n>>3;if(r>=3)for(C=0;C<50;++C)Q=vs(Q,0,E);const u=Q.subarray(0,E);let d,f;if(r>=3){for(l=0;l<32;++l)c[l]=CipherTransformFactory.#x[l];for(C=0,h=e.length;C>3;if(i>=3)for(g=0;g<50;++g)o=vs(o,0,o.length);let C,h;if(i>=3){h=t;const e=new Uint8Array(c);for(g=19;g>=0;g--){for(let t=0;t>8&255;s[n++]=e>>16&255;s[n++]=255&t;s[n++]=t>>8&255;if(a){s[n++]=115;s[n++]=65;s[n++]=108;s[n++]=84}return vs(s,0,n).subarray(0,Math.min(i.length+5,16))}#J(e,t,i,a,s){if(!(t instanceof Name))throw new FormatError("Invalid crypt filter name.");const r=this,n=e.get(t.name),g=n?.get("CFM");if(!g||"None"===g.name)return function(){return new NullCipher};if("V2"===g.name)return function(){return new ARCFourCipher(r.#H(i,a,s,!1))};if("AESV2"===g.name)return function(){return new AES128Cipher(r.#H(i,a,s,!0))};if("AESV3"===g.name)return function(){return new AES256Cipher(s)};throw new FormatError("Unknown crypto method")}constructor(e,t,i){const a=e.get("Filter");if(!isName(a,"Standard"))throw new FormatError("unknown encryption method");this.filterName=a.name;this.dict=e;const s=e.get("V");if(!Number.isInteger(s)||1!==s&&2!==s&&4!==s&&5!==s)throw new FormatError("unsupported encryption algorithm");this.algorithm=s;let r=e.get("Length");if(!r)if(s<=3)r=40;else{const t=e.get("CF"),i=e.get("StmF");if(t instanceof Dict&&i instanceof Name){t.suppressEncryption=!0;const e=t.get(i.name);r=e?.get("Length")||128;r<40&&(r<<=3)}}if(!Number.isInteger(r)||r<40||r%8!=0)throw new FormatError("invalid key length");const n=stringToBytes(e.get("O")),g=stringToBytes(e.get("U")),o=n.subarray(0,32),c=g.subarray(0,32),C=e.get("P"),h=e.get("R"),l=(4===s||5===s)&&!1!==e.get("EncryptMetadata");this.encryptMetadata=l;const Q=stringToBytes(t);let E,u;if(i){if(6===h)try{i=utf8StringToString(i)}catch{warn("CipherTransformFactory: Unable to convert UTF8 encoded password.")}E=stringToBytes(i)}if(5!==s)u=this.#M(Q,E,o,c,C,h,r,l);else{const t=n.subarray(32,40),i=n.subarray(40,48),a=g.subarray(0,48),s=g.subarray(32,40),r=g.subarray(40,48),C=stringToBytes(e.get("OE")),l=stringToBytes(e.get("UE")),Q=stringToBytes(e.get("Perms"));u=this.#U(h,E,o,t,i,a,c,s,r,C,l,Q)}if(!u&&!i)throw new PasswordException("No password given",st);if(!u&&i){const e=this.#L(E,o,h,r);u=this.#M(Q,e,o,c,C,h,r,l)}if(!u)throw new PasswordException("Incorrect Password",rt);this.encryptionKey=u;if(s>=4){const t=e.get("CF");t instanceof Dict&&(t.suppressEncryption=!0);this.cf=t;this.stmf=e.get("StmF")||Name.get("Identity");this.strf=e.get("StrF")||Name.get("Identity");this.eff=e.get("EFF")||this.stmf}}createCipherTransform(e,t){if(4===this.algorithm||5===this.algorithm)return new CipherTransform(this.#J(this.cf,this.strf,e,t,this.encryptionKey),this.#J(this.cf,this.stmf,e,t,this.encryptionKey));const i=this.#H(e,t,this.encryptionKey,!1),cipherConstructor=function(){return new ARCFourCipher(i)};return new CipherTransform(cipherConstructor,cipherConstructor)}}async function writeObject(e,t,i,{encrypt:a=null}){const s=a?.createCipherTransform(e.num,e.gen);i.push(`${e.num} ${e.gen} obj\n`);t instanceof Dict?await writeDict(t,i,s):t instanceof BaseStream?await writeStream(t,i,s):(Array.isArray(t)||ArrayBuffer.isView(t))&&await writeArray(t,i,s);i.push("\nendobj\n")}async function writeDict(e,t,i){t.push("<<");for(const a of e.getKeys()){t.push(` /${escapePDFName(a)} `);await writeValue(e.getRaw(a),t,i)}t.push(">>")}async function writeStream(e,t,i){let a=e.getBytes();const{dict:s}=e,[r,n]=await Promise.all([s.getAsync("Filter"),s.getAsync("DecodeParms")]),g=isName(Array.isArray(r)?await s.xref.fetchIfRefAsync(r[0]):r,"FlateDecode");if(a.length>=256||g)try{const e=new CompressionStream("deflate"),t=e.writable.getWriter();await t.ready;t.write(a).then((async()=>{await t.ready;await t.close()})).catch((()=>{}));const i=await new Response(e.readable).arrayBuffer();a=new Uint8Array(i);let o,c;if(r){if(!g){o=Array.isArray(r)?[Name.get("FlateDecode"),...r]:[Name.get("FlateDecode"),r];n&&(c=Array.isArray(n)?[null,...n]:[null,n])}}else o=Name.get("FlateDecode");o&&s.set("Filter",o);c&&s.set("DecodeParms",c)}catch(e){info(`writeStream - cannot compress data: "${e}".`)}let o=bytesToString(a);i&&(o=i.encryptString(o));s.set("Length",o.length);await writeDict(s,t,i);t.push(" stream\n",o,"\nendstream")}async function writeArray(e,t,i){t.push("[");let a=!0;for(const s of e){a?a=!1:t.push(" ");await writeValue(s,t,i)}t.push("]")}async function writeValue(e,t,i){if(e instanceof Name)t.push(`/${escapePDFName(e.name)}`);else if(e instanceof Ref)t.push(`${e.num} ${e.gen} R`);else if(Array.isArray(e)||ArrayBuffer.isView(e))await writeArray(e,t,i);else if("string"==typeof e){i&&(e=i.encryptString(e));t.push(`(${escapeString(e)})`)}else"number"==typeof e?t.push(numberToString(e)):"boolean"==typeof e?t.push(e.toString()):e instanceof Dict?await writeDict(e,t,i):e instanceof BaseStream?await writeStream(e,t,i):null===e?t.push("null"):warn(`Unhandled value in writer: ${typeof e}, please file a bug.`)}function writeInt(e,t,i,a){for(let s=t+i-1;s>i-1;s--){a[s]=255&e;e>>=8}return i+t}function writeString(e,t,i){for(let a=0,s=e.length;a1&&(r=i.documentElement.searchNode([s.at(-1)],0));r?r.childNodes=Array.isArray(a)?a.map((e=>new SimpleDOMNode("value",e))):[new SimpleDOMNode("#text",a)]:warn(`Node not found for path: ${t}`)}const a=[];i.documentElement.dump(a);return a.join("")}(a.fetchIfRef(t).getString(),i)}const s=a.encrypt;if(s){e=s.createCipherTransform(t.num,t.gen).encryptString(e)}const r=`${t.num} ${t.gen} obj\n<< /Type /EmbeddedFile /Length ${e.length}>>\nstream\n`+e+"\nendstream\nendobj\n";i.push({ref:t,data:r})}function getIndexes(e){const t=[];for(const{ref:i}of e)i.num===t.at(-2)+t.at(-1)?t[t.length-1]+=1:t.push(i.num,1);return t}function computeIDs(e,t,i){if(Array.isArray(t.fileIds)&&t.fileIds.length>0){const a=function computeMD5(e,t){const i=Math.floor(Date.now()/1e3),a=t.filename||"",s=[i.toString(),a,e.toString()];let r=s.reduce(((e,t)=>e+t.length),0);for(const e of Object.values(t.info)){s.push(e);r+=e.length}const n=new Uint8Array(r);let g=0;for(const e of s){writeString(e,g,n);g+=e.length}return bytesToString(vs(n))}(e,t);i.set("ID",[t.fileIds[0],a])}}async function incrementalUpdate({originalData:e,xrefInfo:t,newRefs:i,xref:a=null,hasXfa:s=!1,xfaDatasetsRef:r=null,hasXfaDatasetsEntry:n=!1,needAppearances:g,acroFormRef:o=null,acroForm:c=null,xfaData:C=null,useXrefStream:h=!1}){await async function updateAcroform({xref:e,acroForm:t,acroFormRef:i,hasXfa:a,hasXfaDatasetsEntry:s,xfaDatasetsRef:r,needAppearances:n,newRefs:g}){!a||s||r||warn("XFA - Cannot save it");if(!n&&(!a||!r||s))return;const o=t.clone();if(a&&!s){const e=t.get("XFA").slice();e.splice(2,0,"datasets");e.splice(3,0,r);o.set("XFA",e)}n&&o.set("NeedAppearances",!0);const c=[];await writeObject(i,o,c,e);g.push({ref:i,data:c.join("")})}({xref:a,acroForm:c,acroFormRef:o,hasXfa:s,hasXfaDatasetsEntry:n,xfaDatasetsRef:r,needAppearances:g,newRefs:i});s&&updateXFA({xfaData:C,xfaDatasetsRef:r,newRefs:i,xref:a});const l=[];let Q=e.length;const E=e.at(-1);if(10!==E&&13!==E){l.push("\n");Q+=1}const u=function getTrailerDict(e,t,i){const a=new Dict(null);a.set("Prev",e.startXRef);const s=e.newRef;if(i){t.push({ref:s,data:""});a.set("Size",s.num+1);a.set("Type",Name.get("XRef"))}else a.set("Size",s.num);null!==e.rootRef&&a.set("Root",e.rootRef);null!==e.infoRef&&a.set("Info",e.infoRef);null!==e.encryptRef&&a.set("Encrypt",e.encryptRef);return a}(t,i,h);i=i.sort(((e,t)=>e.ref.num-t.ref.num));for(const{data:e}of i)null!==e&&l.push(e);await(h?async function getXRefStreamTable(e,t,i,a,s){const r=[];let n=0,g=0;for(const{ref:e,data:a}of i){let i;n=Math.max(n,t);if(null!==a){i=Math.min(e.gen,65535);r.push([1,t,i]);t+=a.length}else{i=Math.min(e.gen+1,65535);r.push([0,0,i])}g=Math.max(g,i)}a.set("Index",getIndexes(i));const o=[1,getSizeInBytes(n),getSizeInBytes(g)];a.set("W",o);computeIDs(t,e,a);const c=o.reduce(((e,t)=>e+t),0),C=new Uint8Array(c*r.length),h=new Stream(C);h.dict=a;let l=0;for(const[e,t,i]of r){l=writeInt(e,o[0],l,C);l=writeInt(t,o[1],l,C);l=writeInt(i,o[2],l,C)}await writeObject(e.newRef,h,s,{});s.push("startxref\n",t.toString(),"\n%%EOF\n")}(t,Q,i,u,l):async function getXRefTable(e,t,i,a,s){s.push("xref\n");const r=getIndexes(i);let n=0;for(const{ref:e,data:a}of i){if(e.num===r[n]){s.push(`${r[n]} ${r[n+1]}\n`);n+=2}if(null!==a){s.push(`${t.toString().padStart(10,"0")} ${Math.min(e.gen,65535).toString().padStart(5,"0")} n\r\n`);t+=a.length}else s.push(`0000000000 ${Math.min(e.gen+1,65535).toString().padStart(5,"0")} f\r\n`)}computeIDs(t,e,a);s.push("trailer\n");await writeDict(a,s);s.push("\nstartxref\n",t.toString(),"\n%%EOF\n")}(t,Q,i,u,l));const d=l.reduce(((e,t)=>e+t.length),e.length),f=new Uint8Array(d);f.set(e);let p=e.length;for(const e of l){writeString(e,p,f);p+=e.length}return f}const qs=1,Os=2,Ws=3,js=4,Xs=5;class StructTreeRoot{constructor(e,t){this.dict=e;this.ref=t instanceof Ref?t:null;this.roleMap=new Map;this.structParentIds=null}init(){this.readRoleMap()}#Y(e,t,i){if(!(e instanceof Ref)||t<0)return;this.structParentIds||=new RefSetCache;let a=this.structParentIds.get(e);if(!a){a=[];this.structParentIds.put(e,a)}a.push([t,i])}addAnnotationIdToPage(e,t){this.#Y(e,t,js)}readRoleMap(){const e=this.dict.get("RoleMap");e instanceof Dict&&e.forEach(((e,t)=>{t instanceof Name&&this.roleMap.set(e,t.name)}))}static async canCreateStructureTree({catalogRef:e,pdfManager:t,newAnnotationsByPage:i}){if(!(e instanceof Ref)){warn("Cannot save the struct tree: no catalog reference.");return!1}let a=0,s=!0;for(const[e,r]of i){const{ref:i}=await t.getPage(e);if(!(i instanceof Ref)){warn(`Cannot save the struct tree: page ${e} has no ref.`);s=!0;break}for(const e of r)if(e.accessibilityData?.type){e.parentTreeId=a++;s=!1}}if(s){for(const e of i.values())for(const t of e)delete t.parentTreeId;return!1}return!0}static async createStructureTree({newAnnotationsByPage:e,xref:t,catalogRef:i,pdfManager:a,newRefs:s}){const r=a.catalog.cloneDict(),n=new RefSetCache;n.put(i,r);const g=t.getNewTemporaryRef();r.set("StructTreeRoot",g);const o=new Dict(t);o.set("Type",Name.get("StructTreeRoot"));const c=t.getNewTemporaryRef();o.set("ParentTree",c);const C=[];o.set("K",C);n.put(g,o);const h=new Dict(t),l=[];h.set("Nums",l);const Q=await this.#v({newAnnotationsByPage:e,structTreeRootRef:g,structTreeRoot:null,kids:C,nums:l,xref:t,pdfManager:a,newRefs:s,cache:n});o.set("ParentTreeNextKey",Q);n.put(c,h);const E=[];for(const[e,i]of n.items()){E.length=0;await writeObject(e,i,E,t);s.push({ref:e,data:E.join("")})}}async canUpdateStructTree({pdfManager:e,xref:t,newAnnotationsByPage:i}){if(!this.ref){warn("Cannot update the struct tree: no root reference.");return!1}let a=this.dict.get("ParentTreeNextKey");if(!Number.isInteger(a)||a<0){warn("Cannot update the struct tree: invalid next key.");return!1}const s=this.dict.get("ParentTree");if(!(s instanceof Dict)){warn("Cannot update the struct tree: ParentTree isn't a dict.");return!1}const r=s.get("Nums");if(!Array.isArray(r)){warn("Cannot update the struct tree: nums isn't an array.");return!1}const n=new NumberTree(s,t);for(const t of i.keys()){const{pageDict:i}=await e.getPage(t);if(!i.has("StructParents"))continue;const a=i.get("StructParents");if(!Number.isInteger(a)||!Array.isArray(n.get(a))){warn(`Cannot save the struct tree: page ${t} has a wrong id.`);return!1}}let g=!0;for(const[t,s]of i){const{pageDict:i}=await e.getPage(t);StructTreeRoot.#K({elements:s,xref:this.dict.xref,pageDict:i,numberTree:n});for(const e of s)if(e.accessibilityData?.type){e.accessibilityData.structParent>=0||(e.parentTreeId=a++);g=!1}}if(g){for(const e of i.values())for(const t of e){delete t.parentTreeId;delete t.structTreeParent}return!1}return!0}async updateStructureTree({newAnnotationsByPage:e,pdfManager:t,newRefs:i}){const a=this.dict.xref,s=this.dict.clone(),r=this.ref,n=new RefSetCache;n.put(r,s);let g,o=s.getRaw("ParentTree");if(o instanceof Ref)g=a.fetch(o);else{g=o;o=a.getNewTemporaryRef();s.set("ParentTree",o)}g=g.clone();n.put(o,g);let c=g.getRaw("Nums"),C=null;if(c instanceof Ref){C=c;c=a.fetch(C)}c=c.slice();C||g.set("Nums",c);const h=await StructTreeRoot.#v({newAnnotationsByPage:e,structTreeRootRef:r,structTreeRoot:this,kids:null,nums:c,xref:a,pdfManager:t,newRefs:i,cache:n});if(-1===h)return;s.set("ParentTreeNextKey",h);C&&n.put(C,c);const l=[];for(const[e,t]of n.items()){l.length=0;await writeObject(e,t,l,a);i.push({ref:e,data:l.join("")})}}static async#v({newAnnotationsByPage:e,structTreeRootRef:t,structTreeRoot:i,kids:a,nums:s,xref:r,pdfManager:n,newRefs:g,cache:o}){const c=Name.get("OBJR");let C,h=-1;const l=[];for(const[Q,E]of e){const e=await n.getPage(Q),{ref:u}=e,d=u instanceof Ref;for(const{accessibilityData:n,ref:f,parentTreeId:p,structTreeParent:m}of E){if(!n?.type)continue;const{structParent:E}=n;if(i&&Number.isInteger(E)&&E>=0){let t=(C||=new Map).get(Q);if(void 0===t){t=new StructTreePage(i,e.pageDict).collectObjects(u);C.set(Q,t)}const a=t?.get(E);if(a){const e=r.fetch(a).clone();StructTreeRoot.#T(e,n);l.length=0;await writeObject(a,e,l,r);g.push({ref:a,data:l.join("")});continue}}h=Math.max(h,p);const y=r.getNewTemporaryRef(),w=new Dict(r);StructTreeRoot.#T(w,n);await this.#q({structTreeParent:m,tagDict:w,newTagRef:y,structTreeRootRef:t,fallbackKids:a,xref:r,cache:o});const D=new Dict(r);w.set("K",D);D.set("Type",c);d&&D.set("Pg",u);D.set("Obj",f);o.put(y,w);s.push(p,y)}}return h+1}static#T(e,{type:t,title:i,lang:a,alt:s,expanded:r,actualText:n}){e.set("S",Name.get(t));i&&e.set("T",stringToAsciiOrUTF16BE(i));a&&e.set("Lang",stringToAsciiOrUTF16BE(a));s&&e.set("Alt",stringToAsciiOrUTF16BE(s));r&&e.set("E",stringToAsciiOrUTF16BE(r));n&&e.set("ActualText",stringToAsciiOrUTF16BE(n))}static#K({elements:e,xref:t,pageDict:i,numberTree:a}){const s=new Map;for(const t of e)if(t.structTreeParentId){const e=parseInt(t.structTreeParentId.split("_mc")[1],10);let i=s.get(e);if(!i){i=[];s.set(e,i)}i.push(t)}const r=i.get("StructParents");if(!Number.isInteger(r))return;const n=a.get(r),updateElement=(e,i,a)=>{const r=s.get(e);if(r){const e=i.getRaw("P"),s=t.fetchIfRef(e);if(e instanceof Ref&&s instanceof Dict){const e={ref:a,dict:i};for(const t of r)t.structTreeParent=e}return!0}return!1};for(const e of n){if(!(e instanceof Ref))continue;const i=t.fetch(e),a=i.get("K");if(Number.isInteger(a))updateElement(a,i,e);else if(Array.isArray(a))for(let s of a){s=t.fetchIfRef(s);if(Number.isInteger(s)&&updateElement(s,i,e))break;if(!(s instanceof Dict))continue;if(!isName(s.get("Type"),"MCR"))break;const a=s.get("MCID");if(Number.isInteger(a)&&updateElement(a,i,e))break}}}static async#q({structTreeParent:e,tagDict:t,newTagRef:i,structTreeRootRef:a,fallbackKids:s,xref:r,cache:n}){let g,o=null;if(e){({ref:o}=e);g=e.dict.getRaw("P")||a}else g=a;t.set("P",g);const c=r.fetchIfRef(g);if(!c){s.push(i);return}let C=n.get(g);if(!C){C=c.clone();n.put(g,C)}const h=C.getRaw("K");let l=h instanceof Ref?n.get(h):null;if(!l){l=r.fetchIfRef(h);l=Array.isArray(l)?l.slice():[h];const e=r.getNewTemporaryRef();C.set("K",e);n.put(e,l)}const Q=l.indexOf(o);l.splice(Q>=0?Q+1:l.length,0,i)}}class StructElementNode{constructor(e,t){this.tree=e;this.dict=t;this.kids=[];this.parseKids()}get role(){const e=this.dict.get("S"),t=e instanceof Name?e.name:"",{root:i}=this.tree;return i.roleMap.has(t)?i.roleMap.get(t):t}parseKids(){let e=null;const t=this.dict.getRaw("Pg");t instanceof Ref&&(e=t.toString());const i=this.dict.get("K");if(Array.isArray(i))for(const t of i){const i=this.parseKid(e,t);i&&this.kids.push(i)}else{const t=this.parseKid(e,i);t&&this.kids.push(t)}}parseKid(e,t){if(Number.isInteger(t))return this.tree.pageDict.objId!==e?null:new StructElement({type:qs,mcid:t,pageObjId:e});let i=null;t instanceof Ref?i=this.dict.xref.fetch(t):t instanceof Dict&&(i=t);if(!i)return null;const a=i.getRaw("Pg");a instanceof Ref&&(e=a.toString());const s=i.get("Type")instanceof Name?i.get("Type").name:null;if("MCR"===s){if(this.tree.pageDict.objId!==e)return null;const t=i.getRaw("Stm");return new StructElement({type:Os,refObjId:t instanceof Ref?t.toString():null,pageObjId:e,mcid:i.get("MCID")})}if("OBJR"===s){if(this.tree.pageDict.objId!==e)return null;const t=i.getRaw("Obj");return new StructElement({type:Ws,refObjId:t instanceof Ref?t.toString():null,pageObjId:e})}return new StructElement({type:Xs,dict:i})}}class StructElement{constructor({type:e,dict:t=null,mcid:i=null,pageObjId:a=null,refObjId:s=null}){this.type=e;this.dict=t;this.mcid=i;this.pageObjId=a;this.refObjId=s;this.parentNode=null}}class StructTreePage{constructor(e,t){this.root=e;this.rootDict=e?e.dict:null;this.pageDict=t;this.nodes=[]}collectObjects(e){if(!(this.root&&this.rootDict&&e instanceof Ref))return null;const t=this.rootDict.get("ParentTree");if(!t)return null;const i=this.root.structParentIds?.get(e);if(!i)return null;const a=new Map,s=new NumberTree(t,this.rootDict.xref);for(const[e]of i){const t=s.getRaw(e);t instanceof Ref&&a.set(e,t)}return a}parse(e){if(!(this.root&&this.rootDict&&e instanceof Ref))return;const t=this.rootDict.get("ParentTree");if(!t)return;const i=this.pageDict.get("StructParents"),a=this.root.structParentIds?.get(e);if(!Number.isInteger(i)&&!a)return;const s=new Map,r=new NumberTree(t,this.rootDict.xref);if(Number.isInteger(i)){const e=r.get(i);if(Array.isArray(e))for(const t of e)t instanceof Ref&&this.addNode(this.rootDict.xref.fetch(t),s)}if(a)for(const[e,t]of a){const i=r.get(e);if(i){const e=this.addNode(this.rootDict.xref.fetchIfRef(i),s);1===e?.kids?.length&&e.kids[0].type===Ws&&(e.kids[0].type=t)}}}addNode(e,t,i=0){if(i>40){warn("StructTree MAX_DEPTH reached.");return null}if(!(e instanceof Dict))return null;if(t.has(e))return t.get(e);const a=new StructElementNode(this,e);t.set(e,a);const s=e.get("P");if(!s||isName(s.get("Type"),"StructTreeRoot")){this.addTopLevelNode(e,a)||t.delete(e);return a}const r=this.addNode(s,t,i+1);if(!r)return a;let n=!1;for(const t of r.kids)if(t.type===Xs&&t.dict===e){t.parentNode=a;n=!0}n||t.delete(e);return a}addTopLevelNode(e,t){const i=this.rootDict.get("K");if(!i)return!1;if(i instanceof Dict){if(i.objId!==e.objId)return!1;this.nodes[0]=t;return!0}if(!Array.isArray(i))return!0;let a=!1;for(let s=0;s40){warn("StructTree too deep to be fully serialized.");return}const a=Object.create(null);a.role=e.role;a.children=[];t.children.push(a);let s=e.dict.get("Alt");"string"!=typeof s&&(s=e.dict.get("ActualText"));"string"==typeof s&&(a.alt=stringToPDFString(s));const r=e.dict.get("A");if(r instanceof Dict){const e=lookupNormalRect(r.getArray("BBox"),null);if(e)a.bbox=e;else{const e=r.get("Width"),t=r.get("Height");"number"==typeof e&&e>0&&"number"==typeof t&&t>0&&(a.bbox=[0,0,e,t])}}const n=e.dict.get("Lang");"string"==typeof n&&(a.lang=stringToPDFString(n));for(const t of e.kids){const e=t.type===Xs?t.parentNode:null;e?nodeToSerializable(e,a,i+1):t.type===qs||t.type===Os?a.children.push({type:"content",id:`p${t.pageObjId}_mc${t.mcid}`}):t.type===Ws?a.children.push({type:"object",id:t.refObjId}):t.type===js&&a.children.push({type:"annotation",id:`pdfjs_internal_id_${t.refObjId}`})}}const e=Object.create(null);e.children=[];e.role="Root";for(const t of this.nodes)t&&nodeToSerializable(t,e);return e}}function isValidExplicitDest(e){if(!Array.isArray(e)||e.length<2)return!1;const[t,i,...a]=e;if(!(t instanceof Ref||Number.isInteger(t)))return!1;if(!(i instanceof Name))return!1;const s=a.length;let r=!0;switch(i.name){case"XYZ":if(s<2||s>3)return!1;break;case"Fit":case"FitB":return 0===s;case"FitH":case"FitBH":case"FitV":case"FitBV":if(s>1)return!1;break;case"FitR":if(4!==s)return!1;r=!1;break;default:return!1}for(const e of a)if(!("number"==typeof e||r&&null===e))return!1;return!0}function fetchDest(e){e instanceof Dict&&(e=e.get("D"));return isValidExplicitDest(e)?e:null}function fetchRemoteDest(e){let t=e.get("D");if(t){t instanceof Name&&(t=t.name);if("string"==typeof t)return stringToPDFString(t);if(isValidExplicitDest(t))return JSON.stringify(t)}return null}class Catalog{constructor(e,t){this.pdfManager=e;this.xref=t;this._catDict=t.getCatalogObj();if(!(this._catDict instanceof Dict))throw new FormatError("Catalog object is not a dictionary.");this.toplevelPagesDict;this._actualNumPages=null;this.fontCache=new RefSetCache;this.builtInCMapCache=new Map;this.standardFontDataCache=new Map;this.globalImageCache=new GlobalImageCache;this.pageKidsCountCache=new RefSetCache;this.pageIndexCache=new RefSetCache;this.pageDictCache=new RefSetCache;this.nonBlendModesSet=new RefSet;this.systemFontCache=new Map}cloneDict(){return this._catDict.clone()}get version(){const e=this._catDict.get("Version");if(e instanceof Name){if(St.test(e.name))return shadow(this,"version",e.name);warn(`Invalid PDF catalog version: ${e.name}`)}return shadow(this,"version",null)}get lang(){const e=this._catDict.get("Lang");return shadow(this,"lang",e&&"string"==typeof e?stringToPDFString(e):null)}get needsRendering(){const e=this._catDict.get("NeedsRendering");return shadow(this,"needsRendering","boolean"==typeof e&&e)}get collection(){let e=null;try{const t=this._catDict.get("Collection");t instanceof Dict&&t.size>0&&(e=t)}catch(e){if(e instanceof MissingDataException)throw e;info("Cannot fetch Collection entry; assuming no collection is present.")}return shadow(this,"collection",e)}get acroForm(){let e=null;try{const t=this._catDict.get("AcroForm");t instanceof Dict&&t.size>0&&(e=t)}catch(e){if(e instanceof MissingDataException)throw e;info("Cannot fetch AcroForm entry; assuming no forms are present.")}return shadow(this,"acroForm",e)}get acroFormRef(){const e=this._catDict.getRaw("AcroForm");return shadow(this,"acroFormRef",e instanceof Ref?e:null)}get metadata(){const e=this._catDict.getRaw("Metadata");if(!(e instanceof Ref))return shadow(this,"metadata",null);let t=null;try{const i=this.xref.fetch(e,!this.xref.encrypt?.encryptMetadata);if(i instanceof BaseStream&&i.dict instanceof Dict){const e=i.dict.get("Type"),a=i.dict.get("Subtype");if(isName(e,"Metadata")&&isName(a,"XML")){const e=stringToUTF8String(i.getString());e&&(t=new MetadataParser(e).serializable)}}}catch(e){if(e instanceof MissingDataException)throw e;info(`Skipping invalid Metadata: "${e}".`)}return shadow(this,"metadata",t)}get markInfo(){let e=null;try{e=this._readMarkInfo()}catch(e){if(e instanceof MissingDataException)throw e;warn("Unable to read mark info.")}return shadow(this,"markInfo",e)}_readMarkInfo(){const e=this._catDict.get("MarkInfo");if(!(e instanceof Dict))return null;const t={Marked:!1,UserProperties:!1,Suspects:!1};for(const i in t){const a=e.get(i);"boolean"==typeof a&&(t[i]=a)}return t}get structTreeRoot(){let e=null;try{e=this._readStructTreeRoot()}catch(e){if(e instanceof MissingDataException)throw e;warn("Unable read to structTreeRoot info.")}return shadow(this,"structTreeRoot",e)}_readStructTreeRoot(){const e=this._catDict.getRaw("StructTreeRoot"),t=this.xref.fetchIfRef(e);if(!(t instanceof Dict))return null;const i=new StructTreeRoot(t,e);i.init();return i}get toplevelPagesDict(){const e=this._catDict.get("Pages");if(!(e instanceof Dict))throw new FormatError("Invalid top-level pages dictionary.");return shadow(this,"toplevelPagesDict",e)}get documentOutline(){let e=null;try{e=this._readDocumentOutline()}catch(e){if(e instanceof MissingDataException)throw e;warn("Unable to read document outline.")}return shadow(this,"documentOutline",e)}_readDocumentOutline(){let e=this._catDict.get("Outlines");if(!(e instanceof Dict))return null;e=e.getRaw("First");if(!(e instanceof Ref))return null;const t={items:[]},i=[{obj:e,parent:t}],a=new RefSet;a.put(e);const s=this.xref,r=new Uint8ClampedArray(3);for(;i.length>0;){const t=i.shift(),n=s.fetchIfRef(t.obj);if(null===n)continue;n.has("Title")||warn("Invalid outline item encountered.");const g={url:null,dest:null,action:null};Catalog.parseDestDictionary({destDict:n,resultObj:g,docBaseUrl:this.baseUrl,docAttachments:this.attachments});const o=n.get("Title"),c=n.get("F")||0,C=n.getArray("C"),h=n.get("Count");let l=r;!isNumberArray(C,3)||0===C[0]&&0===C[1]&&0===C[2]||(l=ColorSpace.singletons.rgb.getRgb(C,0));const Q={action:g.action,attachment:g.attachment,dest:g.dest,url:g.url,unsafeUrl:g.unsafeUrl,newWindow:g.newWindow,setOCGState:g.setOCGState,title:"string"==typeof o?stringToPDFString(o):"",color:l,count:Number.isInteger(h)?h:void 0,bold:!!(2&c),italic:!!(1&c),items:[]};t.parent.items.push(Q);e=n.getRaw("First");if(e instanceof Ref&&!a.has(e)){i.push({obj:e,parent:Q});a.put(e)}e=n.getRaw("Next");if(e instanceof Ref&&!a.has(e)){i.push({obj:e,parent:t.parent});a.put(e)}}return t.items.length>0?t.items:null}get permissions(){let e=null;try{e=this._readPermissions()}catch(e){if(e instanceof MissingDataException)throw e;warn("Unable to read permissions.")}return shadow(this,"permissions",e)}_readPermissions(){const e=this.xref.trailer.get("Encrypt");if(!(e instanceof Dict))return null;let t=e.get("P");if("number"!=typeof t)return null;t+=2**32;const i=[];for(const e in y){const a=y[e];t&a&&i.push(a)}return i}get optionalContentConfig(){let e=null;try{const t=this._catDict.get("OCProperties");if(!t)return shadow(this,"optionalContentConfig",null);const i=t.get("D");if(!i)return shadow(this,"optionalContentConfig",null);const a=t.get("OCGs");if(!Array.isArray(a))return shadow(this,"optionalContentConfig",null);const s=new RefSetCache;for(const e of a)e instanceof Ref&&!s.has(e)&&s.put(e,this.#O(e));e=this.#P(i,s)}catch(e){if(e instanceof MissingDataException)throw e;warn(`Unable to read optional content config: ${e}`)}return shadow(this,"optionalContentConfig",e)}#O(e){const t=this.xref.fetch(e),i={id:e.toString(),name:null,intent:null,usage:{print:null,view:null},rbGroups:[]},a=t.get("Name");"string"==typeof a&&(i.name=stringToPDFString(a));let s=t.getArray("Intent");Array.isArray(s)||(s=[s]);s.every((e=>e instanceof Name))&&(i.intent=s.map((e=>e.name)));const r=t.get("Usage");if(!(r instanceof Dict))return i;const n=i.usage,g=r.get("Print");if(g instanceof Dict){const e=g.get("PrintState");if(e instanceof Name)switch(e.name){case"ON":case"OFF":n.print={printState:e.name}}}const o=r.get("View");if(o instanceof Dict){const e=o.get("ViewState");if(e instanceof Name)switch(e.name){case"ON":case"OFF":n.view={viewState:e.name}}}return i}#P(e,t){function parseOnOff(e){const i=[];if(Array.isArray(e))for(const a of e)a instanceof Ref&&t.has(a)&&i.push(a.toString());return i}function parseOrder(e,i=0){if(!Array.isArray(e))return null;const s=[];for(const r of e){if(r instanceof Ref&&t.has(r)){a.put(r);s.push(r.toString());continue}const e=parseNestedOrder(r,i);e&&s.push(e)}if(i>0)return s;const r=[];for(const[e]of t.items())a.has(e)||r.push(e.toString());r.length&&s.push({name:null,order:r});return s}function parseNestedOrder(e,t){if(++t>s){warn("parseNestedOrder - reached MAX_NESTED_LEVELS.");return null}const a=i.fetchIfRef(e);if(!Array.isArray(a))return null;const r=i.fetchIfRef(a[0]);if("string"!=typeof r)return null;const n=parseOrder(a.slice(1),t);return n&&n.length?{name:stringToPDFString(r),order:n}:null}const i=this.xref,a=new RefSet,s=10;!function parseRBGroups(e){if(Array.isArray(e))for(const a of e){const e=i.fetchIfRef(a);if(!Array.isArray(e)||!e.length)continue;const s=new Set;for(const i of e)if(i instanceof Ref&&t.has(i)&&!s.has(i.toString())){s.add(i.toString());t.get(i).rbGroups.push(s)}}}(e.get("RBGroups"));return{name:"string"==typeof e.get("Name")?stringToPDFString(e.get("Name")):null,creator:"string"==typeof e.get("Creator")?stringToPDFString(e.get("Creator")):null,baseState:e.get("BaseState")instanceof Name?e.get("BaseState").name:null,on:parseOnOff(e.get("ON")),off:parseOnOff(e.get("OFF")),order:parseOrder(e.get("Order")),groups:[...t]}}setActualNumPages(e=null){this._actualNumPages=e}get hasActualNumPages(){return null!==this._actualNumPages}get _pagesCount(){const e=this.toplevelPagesDict.get("Count");if(!Number.isInteger(e))throw new FormatError("Page count in top-level pages dictionary is not an integer.");return shadow(this,"_pagesCount",e)}get numPages(){return this.hasActualNumPages?this._actualNumPages:this._pagesCount}get destinations(){const e=this._readDests(),t=Object.create(null);if(e instanceof NameTree)for(const[i,a]of e.getAll()){const e=fetchDest(a);e&&(t[stringToPDFString(i)]=e)}else e instanceof Dict&&e.forEach((function(e,i){const a=fetchDest(i);a&&(t[e]=a)}));return shadow(this,"destinations",t)}getDestination(e){const t=this._readDests();if(t instanceof NameTree){const i=fetchDest(t.get(e));if(i)return i;const a=this.destinations[e];if(a){warn(`Found "${e}" at an incorrect position in the NameTree.`);return a}}else if(t instanceof Dict){const i=fetchDest(t.get(e));if(i)return i}return null}_readDests(){const e=this._catDict.get("Names");return e?.has("Dests")?new NameTree(e.getRaw("Dests"),this.xref):this._catDict.has("Dests")?this._catDict.get("Dests"):void 0}get pageLabels(){let e=null;try{e=this._readPageLabels()}catch(e){if(e instanceof MissingDataException)throw e;warn("Unable to read page labels.")}return shadow(this,"pageLabels",e)}_readPageLabels(){const e=this._catDict.getRaw("PageLabels");if(!e)return null;const t=new Array(this.numPages);let i=null,a="";const s=new NumberTree(e,this.xref).getAll();let r="",n=1;for(let e=0,g=this.numPages;e=1))throw new FormatError("Invalid start in PageLabel dictionary.");n=e}else n=1}switch(i){case"D":r=n;break;case"R":case"r":r=toRomanNumerals(n,"r"===i);break;case"A":case"a":const e=26,t="a"===i?97:65,a=n-1;r=String.fromCharCode(t+a%e).repeat(Math.floor(a/e)+1);break;default:if(i)throw new FormatError(`Invalid style "${i}" in PageLabel dictionary.`);r=""}t[e]=a+r;n++}return t}get pageLayout(){const e=this._catDict.get("PageLayout");let t="";if(e instanceof Name)switch(e.name){case"SinglePage":case"OneColumn":case"TwoColumnLeft":case"TwoColumnRight":case"TwoPageLeft":case"TwoPageRight":t=e.name}return shadow(this,"pageLayout",t)}get pageMode(){const e=this._catDict.get("PageMode");let t="UseNone";if(e instanceof Name)switch(e.name){case"UseNone":case"UseOutlines":case"UseThumbs":case"FullScreen":case"UseOC":case"UseAttachments":t=e.name}return shadow(this,"pageMode",t)}get viewerPreferences(){const e=this._catDict.get("ViewerPreferences");if(!(e instanceof Dict))return shadow(this,"viewerPreferences",null);let t=null;for(const i of e.getKeys()){const a=e.get(i);let s;switch(i){case"HideToolbar":case"HideMenubar":case"HideWindowUI":case"FitWindow":case"CenterWindow":case"DisplayDocTitle":case"PickTrayByPDFSize":"boolean"==typeof a&&(s=a);break;case"NonFullScreenPageMode":if(a instanceof Name)switch(a.name){case"UseNone":case"UseOutlines":case"UseThumbs":case"UseOC":s=a.name;break;default:s="UseNone"}break;case"Direction":if(a instanceof Name)switch(a.name){case"L2R":case"R2L":s=a.name;break;default:s="L2R"}break;case"ViewArea":case"ViewClip":case"PrintArea":case"PrintClip":if(a instanceof Name)switch(a.name){case"MediaBox":case"CropBox":case"BleedBox":case"TrimBox":case"ArtBox":s=a.name;break;default:s="CropBox"}break;case"PrintScaling":if(a instanceof Name)switch(a.name){case"None":case"AppDefault":s=a.name;break;default:s="AppDefault"}break;case"Duplex":if(a instanceof Name)switch(a.name){case"Simplex":case"DuplexFlipShortEdge":case"DuplexFlipLongEdge":s=a.name;break;default:s="None"}break;case"PrintPageRange":if(Array.isArray(a)&&a.length%2==0){a.every(((e,t,i)=>Number.isInteger(e)&&e>0&&(0===t||e>=i[t-1])&&e<=this.numPages))&&(s=a)}break;case"NumCopies":Number.isInteger(a)&&a>0&&(s=a);break;default:warn(`Ignoring non-standard key in ViewerPreferences: ${i}.`);continue}if(void 0!==s){t||(t=Object.create(null));t[i]=s}else warn(`Bad value, for key "${i}", in ViewerPreferences: ${a}.`)}return shadow(this,"viewerPreferences",t)}get openAction(){const e=this._catDict.get("OpenAction"),t=Object.create(null);if(e instanceof Dict){const i=new Dict(this.xref);i.set("A",e);const a={url:null,dest:null,action:null};Catalog.parseDestDictionary({destDict:i,resultObj:a});Array.isArray(a.dest)?t.dest=a.dest:a.action&&(t.action=a.action)}else Array.isArray(e)&&(t.dest=e);return shadow(this,"openAction",objectSize(t)>0?t:null)}get attachments(){const e=this._catDict.get("Names");let t=null;if(e instanceof Dict&&e.has("EmbeddedFiles")){const i=new NameTree(e.getRaw("EmbeddedFiles"),this.xref);for(const[e,a]of i.getAll()){const i=new FileSpec(a,this.xref);t||(t=Object.create(null));t[stringToPDFString(e)]=i.serializable}}return shadow(this,"attachments",t)}get xfaImages(){const e=this._catDict.get("Names");let t=null;if(e instanceof Dict&&e.has("XFAImages")){const i=new NameTree(e.getRaw("XFAImages"),this.xref);for(const[e,a]of i.getAll()){t||(t=new Dict(this.xref));t.set(stringToPDFString(e),a)}}return shadow(this,"xfaImages",t)}_collectJavaScript(){const e=this._catDict.get("Names");let t=null;function appendIfJavaScriptDict(e,i){if(!(i instanceof Dict))return;if(!isName(i.get("S"),"JavaScript"))return;let a=i.get("JS");if(a instanceof BaseStream)a=a.getString();else if("string"!=typeof a)return;a=stringToPDFString(a).replaceAll("\0","");a&&(t||=new Map).set(e,a)}if(e instanceof Dict&&e.has("JavaScript")){const t=new NameTree(e.getRaw("JavaScript"),this.xref);for(const[e,i]of t.getAll())appendIfJavaScriptDict(stringToPDFString(e),i)}const i=this._catDict.get("OpenAction");i&&appendIfJavaScriptDict("OpenAction",i);return t}get jsActions(){const e=this._collectJavaScript();let t=collectActions(this.xref,this._catDict,fA);if(e){t||=Object.create(null);for(const[i,a]of e)i in t?t[i].push(a):t[i]=[a]}return shadow(this,"jsActions",t)}async fontFallback(e,t){const i=await Promise.all(this.fontCache);for(const a of i)if(a.loadedName===e){a.fallback(t);return}}async cleanup(e=!1){clearGlobalCaches();this.globalImageCache.clear(e);this.pageKidsCountCache.clear();this.pageIndexCache.clear();this.pageDictCache.clear();this.nonBlendModesSet.clear();const t=await Promise.all(this.fontCache);for(const{dict:e}of t)delete e.cacheKey;this.fontCache.clear();this.builtInCMapCache.clear();this.standardFontDataCache.clear();this.systemFontCache.clear()}async getPageDict(e){const t=[this.toplevelPagesDict],i=new RefSet,a=this._catDict.getRaw("Pages");a instanceof Ref&&i.put(a);const s=this.xref,r=this.pageKidsCountCache,n=this.pageIndexCache,g=this.pageDictCache;let o=0;for(;t.length;){const a=t.pop();if(a instanceof Ref){const c=r.get(a);if(c>=0&&o+c<=e){o+=c;continue}if(i.has(a))throw new FormatError("Pages tree contains circular reference.");i.put(a);const C=await(g.get(a)||s.fetchAsync(a));if(C instanceof Dict){let t=C.getRaw("Type");t instanceof Ref&&(t=await s.fetchAsync(t));if(isName(t,"Page")||!C.has("Kids")){r.has(a)||r.put(a,1);n.has(a)||n.put(a,o);if(o===e)return[C,a];o++;continue}}t.push(C);continue}if(!(a instanceof Dict))throw new FormatError("Page dictionary kid reference points to wrong type of object.");const{objId:c}=a;let C=a.getRaw("Count");C instanceof Ref&&(C=await s.fetchAsync(C));if(Number.isInteger(C)&&C>=0){c&&!r.has(c)&&r.put(c,C);if(o+C<=e){o+=C;continue}}let h=a.getRaw("Kids");h instanceof Ref&&(h=await s.fetchAsync(h));if(!Array.isArray(h)){let t=a.getRaw("Type");t instanceof Ref&&(t=await s.fetchAsync(t));if(isName(t,"Page")||!a.has("Kids")){if(o===e)return[a,null];o++;continue}throw new FormatError("Page dictionary kids object is not an array.")}for(let e=h.length-1;e>=0;e--){const i=h[e];t.push(i);a===this.toplevelPagesDict&&i instanceof Ref&&!g.has(i)&&g.put(i,s.fetchAsync(i))}}throw new Error(`Page index ${e} not found.`)}async getAllPageDicts(e=!1){const{ignoreErrors:t}=this.pdfManager.evaluatorOptions,i=[{currentNode:this.toplevelPagesDict,posInKids:0}],a=new RefSet,s=this._catDict.getRaw("Pages");s instanceof Ref&&a.put(s);const r=new Map,n=this.xref,g=this.pageIndexCache;let o=0;function addPageDict(e,t){t&&!g.has(t)&&g.put(t,o);r.set(o++,[e,t])}function addPageError(i){if(i instanceof XRefEntryException&&!e)throw i;if(e&&t&&0===o){warn(`getAllPageDicts - Skipping invalid first page: "${i}".`);i=Dict.empty}r.set(o++,[i,null])}for(;i.length>0;){const e=i.at(-1),{currentNode:t,posInKids:s}=e;let r=t.getRaw("Kids");if(r instanceof Ref)try{r=await n.fetchAsync(r)}catch(e){addPageError(e);break}if(!Array.isArray(r)){addPageError(new FormatError("Page dictionary kids object is not an array."));break}if(s>=r.length){i.pop();continue}const g=r[s];let o;if(g instanceof Ref){if(a.has(g)){addPageError(new FormatError("Pages tree contains circular reference."));break}a.put(g);try{o=await n.fetchAsync(g)}catch(e){addPageError(e);break}}else o=g;if(!(o instanceof Dict)){addPageError(new FormatError("Page dictionary kid reference points to wrong type of object."));break}let c=o.getRaw("Type");if(c instanceof Ref)try{c=await n.fetchAsync(c)}catch(e){addPageError(e);break}isName(c,"Page")||!o.has("Kids")?addPageDict(o,g instanceof Ref?g:null):i.push({currentNode:o,posInKids:0});e.posInKids++}return r}getPageIndex(e){const t=this.pageIndexCache.get(e);if(void 0!==t)return Promise.resolve(t);const i=this.xref;let a=0;const next=t=>function pagesBeforeRef(t){let a,s=0;return i.fetchAsync(t).then((function(i){if(isRefsEqual(t,e)&&!isDict(i,"Page")&&!(i instanceof Dict&&!i.has("Type")&&i.has("Contents")))throw new FormatError("The reference does not point to a /Page dictionary.");if(!i)return null;if(!(i instanceof Dict))throw new FormatError("Node must be a dictionary.");a=i.getRaw("Parent");return i.getAsync("Parent")})).then((function(e){if(!e)return null;if(!(e instanceof Dict))throw new FormatError("Parent must be a dictionary.");return e.getAsync("Kids")})).then((function(e){if(!e)return null;const r=[];let n=!1;for(const a of e){if(!(a instanceof Ref))throw new FormatError("Kid must be a reference.");if(isRefsEqual(a,t)){n=!0;break}r.push(i.fetchAsync(a).then((function(e){if(!(e instanceof Dict))throw new FormatError("Kid node must be a dictionary.");e.has("Count")?s+=e.get("Count"):s++})))}if(!n)throw new FormatError("Kid reference not found in parent's kids.");return Promise.all(r).then((function(){return[s,a]}))}))}(t).then((t=>{if(!t){this.pageIndexCache.put(e,a);return a}const[i,s]=t;a+=i;return next(s)}));return next(e)}get baseUrl(){const e=this._catDict.get("URI");if(e instanceof Dict){const t=e.get("Base");if("string"==typeof t){const e=createValidAbsoluteUrl(t,null,{tryConvertEncoding:!0});if(e)return shadow(this,"baseUrl",e.href)}}return shadow(this,"baseUrl",this.pdfManager.docBaseUrl)}static parseDestDictionary({destDict:e,resultObj:t,docBaseUrl:i=null,docAttachments:a=null}){if(!(e instanceof Dict)){warn("parseDestDictionary: `destDict` must be a dictionary.");return}let s,r,n=e.get("A");if(!(n instanceof Dict))if(e.has("Dest"))n=e.get("Dest");else{n=e.get("AA");n instanceof Dict&&(n.has("D")?n=n.get("D"):n.has("U")&&(n=n.get("U")))}if(n instanceof Dict){const e=n.get("S");if(!(e instanceof Name)){warn("parseDestDictionary: Invalid type in Action dictionary.");return}const i=e.name;switch(i){case"ResetForm":const e=n.get("Flags"),g=0==(1&("number"==typeof e?e:0)),o=[],c=[];for(const e of n.get("Fields")||[])e instanceof Ref?c.push(e.toString()):"string"==typeof e&&o.push(stringToPDFString(e));t.resetForm={fields:o,refs:c,include:g};break;case"URI":s=n.get("URI");s instanceof Name&&(s="/"+s.name);break;case"GoTo":r=n.get("D");break;case"Launch":case"GoToR":const C=n.get("F");if(C instanceof Dict){const e=new FileSpec(C,null,!0),{rawFilename:t}=e.serializable;s=t}else"string"==typeof C&&(s=C);const h=fetchRemoteDest(n);h&&"string"==typeof s&&(s=s.split("#",1)[0]+"#"+h);const l=n.get("NewWindow");"boolean"==typeof l&&(t.newWindow=l);break;case"GoToE":const Q=n.get("T");let E;if(a&&Q instanceof Dict){const e=Q.get("R"),t=Q.get("N");isName(e,"C")&&"string"==typeof t&&(E=a[stringToPDFString(t)])}if(E){t.attachment=E;const e=fetchRemoteDest(n);e&&(t.attachmentDest=e)}else warn('parseDestDictionary - unimplemented "GoToE" action.');break;case"Named":const u=n.get("N");u instanceof Name&&(t.action=u.name);break;case"SetOCGState":const d=n.get("State"),f=n.get("PreserveRB");if(!Array.isArray(d)||0===d.length)break;const p=[];for(const e of d)if(e instanceof Name)switch(e.name){case"ON":case"OFF":case"Toggle":p.push(e.name)}else e instanceof Ref&&p.push(e.toString());if(p.length!==d.length)break;t.setOCGState={state:p,preserveRB:"boolean"!=typeof f||f};break;case"JavaScript":const m=n.get("JS");let y;m instanceof BaseStream?y=m.getString():"string"==typeof m&&(y=m);const w=y&&recoverJsURL(stringToPDFString(y));if(w){s=w.url;t.newWindow=w.newWindow;break}default:if("JavaScript"===i||"SubmitForm"===i)break;warn(`parseDestDictionary - unsupported action: "${i}".`)}}else e.has("Dest")&&(r=e.get("Dest"));if("string"==typeof s){const e=createValidAbsoluteUrl(s,i,{addDefaultProtocol:!0,tryConvertEncoding:!0});e&&(t.url=e.href);t.unsafeUrl=s}if(r){r instanceof Name&&(r=r.name);"string"==typeof r?t.dest=stringToPDFString(r):isValidExplicitDest(r)&&(t.dest=r)}}}function addChildren(e,t){if(e instanceof Dict)e=e.getRawValues();else if(e instanceof BaseStream)e=e.dict.getRawValues();else if(!Array.isArray(e))return;for(const a of e)((i=a)instanceof Ref||i instanceof Dict||i instanceof BaseStream||Array.isArray(i))&&t.push(a);var i}class ObjectLoader{constructor(e,t,i){this.dict=e;this.keys=t;this.xref=i;this.refSet=null}async load(){if(this.xref.stream.isDataLoaded)return;const{keys:e,dict:t}=this;this.refSet=new RefSet;const i=[];for(const a of e){const e=t.getRaw(a);void 0!==e&&i.push(e)}return this._walk(i)}async _walk(e){const t=[],i=[];for(;e.length;){let a=e.pop();if(a instanceof Ref){if(this.refSet.has(a))continue;try{this.refSet.put(a);a=this.xref.fetch(a)}catch(e){if(!(e instanceof MissingDataException)){warn(`ObjectLoader._walk - requesting all data: "${e}".`);this.refSet=null;const{manager:t}=this.xref.stream;return t.requestAllChunks()}t.push(a);i.push({begin:e.begin,end:e.end})}}if(a instanceof BaseStream){const e=a.getBaseStreams();if(e){let s=!1;for(const t of e)if(!t.isDataLoaded){s=!0;i.push({begin:t.start,end:t.end})}s&&t.push(a)}}addChildren(a,e)}if(i.length){await this.xref.stream.manager.requestRanges(i);for(const e of t)e instanceof Ref&&this.refSet.remove(e);return this._walk(t)}this.refSet=null}}const Zs=Symbol(),Vs=Symbol(),zs=Symbol(),_s=Symbol(),$s=Symbol(),Ar=Symbol(),er=Symbol(),tr=Symbol(),ir=Symbol(),ar=Symbol("content"),sr=Symbol("data"),rr=Symbol(),nr=Symbol("extra"),gr=Symbol(),or=Symbol(),Ir=Symbol(),cr=Symbol(),Cr=Symbol(),hr=Symbol(),lr=Symbol(),Qr=Symbol(),Er=Symbol(),ur=Symbol(),dr=Symbol(),fr=Symbol(),pr=Symbol(),mr=Symbol(),yr=Symbol(),wr=Symbol(),Dr=Symbol(),br=Symbol(),Fr=Symbol(),Sr=Symbol(),kr=Symbol(),Rr=Symbol(),Nr=Symbol(),Gr=Symbol(),xr=Symbol(),Ur=Symbol(),Mr=Symbol(),Lr=Symbol(),Hr=Symbol(),Jr=Symbol(),Yr=Symbol(),vr=Symbol(),Kr=Symbol("namespaceId"),Tr=Symbol("nodeName"),qr=Symbol(),Or=Symbol(),Pr=Symbol(),Wr=Symbol(),jr=Symbol(),Xr=Symbol(),Zr=Symbol(),Vr=Symbol(),zr=Symbol("root"),_r=Symbol(),$r=Symbol(),An=Symbol(),en=Symbol(),tn=Symbol(),an=Symbol(),sn=Symbol(),rn=Symbol(),nn=Symbol(),gn=Symbol(),on=Symbol(),In=Symbol("uid"),cn=Symbol(),Cn={config:{id:0,check:e=>e.startsWith("http://www.xfa.org/schema/xci/")},connectionSet:{id:1,check:e=>e.startsWith("http://www.xfa.org/schema/xfa-connection-set/")},datasets:{id:2,check:e=>e.startsWith("http://www.xfa.org/schema/xfa-data/")},form:{id:3,check:e=>e.startsWith("http://www.xfa.org/schema/xfa-form/")},localeSet:{id:4,check:e=>e.startsWith("http://www.xfa.org/schema/xfa-locale-set/")},pdf:{id:5,check:e=>"http://ns.adobe.com/xdp/pdf/"===e},signature:{id:6,check:e=>"http://www.w3.org/2000/09/xmldsig#"===e},sourceSet:{id:7,check:e=>e.startsWith("http://www.xfa.org/schema/xfa-source-set/")},stylesheet:{id:8,check:e=>"http://www.w3.org/1999/XSL/Transform"===e},template:{id:9,check:e=>e.startsWith("http://www.xfa.org/schema/xfa-template/")},xdc:{id:10,check:e=>e.startsWith("http://www.xfa.org/schema/xdc/")},xdp:{id:11,check:e=>"http://ns.adobe.com/xdp/"===e},xfdf:{id:12,check:e=>"http://ns.adobe.com/xfdf/"===e},xhtml:{id:13,check:e=>"http://www.w3.org/1999/xhtml"===e},xmpmeta:{id:14,check:e=>"http://ns.adobe.com/xmpmeta/"===e}},hn={pt:e=>e,cm:e=>e/2.54*72,mm:e=>e/25.4*72,in:e=>72*e,px:e=>e},ln=/([+-]?\d+\.?\d*)(.*)/;function stripQuotes(e){return e.startsWith("'")||e.startsWith('"')?e.slice(1,-1):e}function getInteger({data:e,defaultValue:t,validate:i}){if(!e)return t;e=e.trim();const a=parseInt(e,10);return!isNaN(a)&&i(a)?a:t}function getFloat({data:e,defaultValue:t,validate:i}){if(!e)return t;e=e.trim();const a=parseFloat(e);return!isNaN(a)&&i(a)?a:t}function getKeyword({data:e,defaultValue:t,validate:i}){return e&&i(e=e.trim())?e:t}function getStringOption(e,t){return getKeyword({data:e,defaultValue:t[0],validate:e=>t.includes(e)})}function getMeasurement(e,t="0"){t||="0";if(!e)return getMeasurement(t);const i=e.trim().match(ln);if(!i)return getMeasurement(t);const[,a,s]=i,r=parseFloat(a);if(isNaN(r))return getMeasurement(t);if(0===r)return 0;const n=hn[s];return n?n(r):r}function getRatio(e){if(!e)return{num:1,den:1};const t=e.trim().split(/\s*:\s*/).map((e=>parseFloat(e))).filter((e=>!isNaN(e)));1===t.length&&t.push(1);if(0===t.length)return{num:1,den:1};const[i,a]=t;return{num:i,den:a}}function getRelevant(e){return e?e.trim().split(/\s+/).map((e=>({excluded:"-"===e[0],viewname:e.substring(1)}))):[]}class HTMLResult{static get FAILURE(){return shadow(this,"FAILURE",new HTMLResult(!1,null,null,null))}static get EMPTY(){return shadow(this,"EMPTY",new HTMLResult(!0,null,null,null))}constructor(e,t,i,a){this.success=e;this.html=t;this.bbox=i;this.breakNode=a}isBreak(){return!!this.breakNode}static breakNode(e){return new HTMLResult(!1,null,null,e)}static success(e,t=null){return new HTMLResult(!0,e,t,null)}}class FontFinder{constructor(e){this.fonts=new Map;this.cache=new Map;this.warned=new Set;this.defaultFont=null;this.add(e)}add(e,t=null){for(const t of e)this.addPdfFont(t);for(const e of this.fonts.values())e.regular||(e.regular=e.italic||e.bold||e.bolditalic);if(!t||0===t.size)return;const i=this.fonts.get("PdfJS-Fallback-PdfJS-XFA");for(const e of t)this.fonts.set(e,i)}addPdfFont(e){const t=e.cssFontInfo,i=t.fontFamily;let a=this.fonts.get(i);if(!a){a=Object.create(null);this.fonts.set(i,a);this.defaultFont||(this.defaultFont=a)}let s="";const r=parseFloat(t.fontWeight);0!==parseFloat(t.italicAngle)?s=r>=700?"bolditalic":"italic":r>=700&&(s="bold");if(!s){(e.name.includes("Bold")||e.psName?.includes("Bold"))&&(s="bold");(e.name.includes("Italic")||e.name.endsWith("It")||e.psName?.includes("Italic")||e.psName?.endsWith("It"))&&(s+="italic")}s||(s="regular");a[s]=e}getDefault(){return this.defaultFont}find(e,t=!0){let i=this.fonts.get(e)||this.cache.get(e);if(i)return i;const a=/,|-|_| |bolditalic|bold|italic|regular|it/gi;let s=e.replaceAll(a,"");i=this.fonts.get(s);if(i){this.cache.set(e,i);return i}s=s.toLowerCase();const r=[];for(const[e,t]of this.fonts.entries())e.replaceAll(a,"").toLowerCase().startsWith(s)&&r.push(t);if(0===r.length)for(const[,e]of this.fonts.entries())e.regular.name?.replaceAll(a,"").toLowerCase().startsWith(s)&&r.push(e);if(0===r.length){s=s.replaceAll(/psmt|mt/gi,"");for(const[e,t]of this.fonts.entries())e.replaceAll(a,"").toLowerCase().startsWith(s)&&r.push(t)}if(0===r.length)for(const e of this.fonts.values())e.regular.name?.replaceAll(a,"").toLowerCase().startsWith(s)&&r.push(e);if(r.length>=1){1!==r.length&&t&&warn(`XFA - Too many choices to guess the correct font: ${e}`);this.cache.set(e,r[0]);return r[0]}if(t&&!this.warned.has(e)){this.warned.add(e);warn(`XFA - Cannot find the font: ${e}`)}return null}}function selectFont(e,t){return"italic"===e.posture?"bold"===e.weight?t.bolditalic:t.italic:"bold"===e.weight?t.bold:t.regular}class FontInfo{constructor(e,t,i,a){this.lineHeight=i;this.paraMargin=t||{top:0,bottom:0,left:0,right:0};if(!e){[this.pdfFont,this.xfaFont]=this.defaultFont(a);return}this.xfaFont={typeface:e.typeface,posture:e.posture,weight:e.weight,size:e.size,letterSpacing:e.letterSpacing};const s=a.find(e.typeface);if(s){this.pdfFont=selectFont(e,s);this.pdfFont||([this.pdfFont,this.xfaFont]=this.defaultFont(a))}else[this.pdfFont,this.xfaFont]=this.defaultFont(a)}defaultFont(e){const t=e.find("Helvetica",!1)||e.find("Myriad Pro",!1)||e.find("Arial",!1)||e.getDefault();if(t?.regular){const e=t.regular;return[e,{typeface:e.cssFontInfo.fontFamily,posture:"normal",weight:"normal",size:10,letterSpacing:0}]}return[null,{typeface:"Courier",posture:"normal",weight:"normal",size:10,letterSpacing:0}]}}class FontSelector{constructor(e,t,i,a){this.fontFinder=a;this.stack=[new FontInfo(e,t,i,a)]}pushData(e,t,i){const a=this.stack.at(-1);for(const t of["typeface","posture","weight","size","letterSpacing"])e[t]||(e[t]=a.xfaFont[t]);for(const e of["top","bottom","left","right"])isNaN(t[e])&&(t[e]=a.paraMargin[e]);const s=new FontInfo(e,t,i||a.lineHeight,this.fontFinder);s.pdfFont||(s.pdfFont=a.pdfFont);this.stack.push(s)}popFont(){this.stack.pop()}topFont(){return this.stack.at(-1)}}class TextMeasure{constructor(e,t,i,a){this.glyphs=[];this.fontSelector=new FontSelector(e,t,i,a);this.extraHeight=0}pushData(e,t,i){this.fontSelector.pushData(e,t,i)}popFont(e){return this.fontSelector.popFont()}addPara(){const e=this.fontSelector.topFont();this.extraHeight+=e.paraMargin.top+e.paraMargin.bottom}addString(e){if(!e)return;const t=this.fontSelector.topFont(),i=t.xfaFont.size;if(t.pdfFont){const a=t.xfaFont.letterSpacing,s=t.pdfFont,r=s.lineHeight||1.2,n=t.lineHeight||Math.max(1.2,r)*i,g=r-(void 0===s.lineGap?.2:s.lineGap),o=Math.max(1,g)*i,c=i/1e3,C=s.defaultWidth||s.charsToGlyphs(" ")[0].width;for(const t of e.split(/[\u2029\n]/)){const e=s.encodeString(t).join(""),i=s.charsToGlyphs(e);for(const e of i){const t=e.width||C;this.glyphs.push([t*c+a,n,o,e.unicode,!1])}this.glyphs.push([0,0,0,"\n",!0])}this.glyphs.pop()}else{for(const t of e.split(/[\u2029\n]/)){for(const e of t.split(""))this.glyphs.push([i,1.2*i,i,e,!1]);this.glyphs.push([0,0,0,"\n",!0])}this.glyphs.pop()}}compute(e){let t=-1,i=0,a=0,s=0,r=0,n=0,g=!1,o=!0;for(let c=0,C=this.glyphs.length;ce){a=Math.max(a,r);r=0;s+=n;n=d;t=-1;i=0;g=!0;o=!1}else{n=Math.max(d,n);i=r;r+=C;t=c}else if(r+C>e){s+=n;n=d;if(-1!==t){c=t;a=Math.max(a,i);r=0;t=-1;i=0}else{a=Math.max(a,r);r=C}g=!0;o=!1}else{r+=C;n=Math.max(d,n)}}a=Math.max(a,r);s+=n+this.extraHeight;return{width:1.02*a,height:s,isBroken:g}}}const Bn=/^[^.[]+/,Qn=/^[^\]]+/,En={dot:0,dotDot:1,dotHash:2,dotBracket:3,dotParen:4},un=new Map([["$data",(e,t)=>e.datasets?e.datasets.data:e],["$record",(e,t)=>(e.datasets?e.datasets.data:e)[fr]()[0]],["$template",(e,t)=>e.template],["$connectionSet",(e,t)=>e.connectionSet],["$form",(e,t)=>e.form],["$layout",(e,t)=>e.layout],["$host",(e,t)=>e.host],["$dataWindow",(e,t)=>e.dataWindow],["$event",(e,t)=>e.event],["!",(e,t)=>e.datasets],["$xfa",(e,t)=>e],["xfa",(e,t)=>e],["$",(e,t)=>t]]),dn=new WeakMap;function parseExpression(e,t,i=!0){let a=e.match(Bn);if(!a)return null;let[s]=a;const r=[{name:s,cacheName:"."+s,index:0,js:null,formCalc:null,operator:En.dot}];let n=s.length;for(;n0&&C.push(e)}if(0!==C.length||g||0!==o)e=isFinite(c)?C.filter((e=>ce[c])):C.flat();else{const i=t[wr]();if(!(t=i))return null;o=-1;e=[t]}}return 0===e.length?null:e}function createDataNode(e,t,i){const a=parseExpression(i);if(!a)return null;if(a.some((e=>e.operator===En.dotDot)))return null;const s=un.get(a[0].name);let r=0;if(s){e=s(e,t);r=1}else e=t||e;for(let t=a.length;re[sn]())).join("")}get[mn](){const e=Object.getPrototypeOf(this);if(!e._attributes){const t=e._attributes=new Set;for(const e of Object.getOwnPropertyNames(this)){if(null===this[e]||this[e]instanceof XFAObject||this[e]instanceof XFAObjectArray)break;t.add(e)}}return shadow(this,mn,e._attributes)}[Ur](e){let t=this;for(;t;){if(t===e)return!0;t=t[wr]()}return!1}[wr](){return this[xn]}[yr](){return this[wr]()}[fr](e=null){return e?this[e]:this[yn]}[rr](){const e=Object.create(null);this[ar]&&(e.$content=this[ar]);for(const t of Object.getOwnPropertyNames(this)){const i=this[t];null!==i&&(i instanceof XFAObject?e[t]=i[rr]():i instanceof XFAObjectArray?i.isEmpty()||(e[t]=i.dump()):e[t]=i)}return e}[on](){return null}[nn](){return HTMLResult.EMPTY}*[pr](){for(const e of this[fr]())yield e}*[Fn](e,t){for(const i of this[pr]())if(!e||t===e.has(i[Tr])){const e=this[Cr](),t=i[nn](e);t.success||(this[nr].failingNode=i);yield t}}[or](){return null}[Vs](e,t){this[nr].children.push(e)}[Cr](){}[_s]({filter:e=null,include:t=!0}){if(this[nr].generator){const e=this[Cr](),t=this[nr].failingNode[nn](e);if(!t.success)return t;t.html&&this[Vs](t.html,t.bbox);delete this[nr].failingNode}else this[nr].generator=this[Fn](e,t);for(;;){const e=this[nr].generator.next();if(e.done)break;const t=e.value;if(!t.success)return t;t.html&&this[Vs](t.html,t.bbox)}this[nr].generator=null;return HTMLResult.EMPTY}[en](e){this[Mn]=new Set(Object.keys(e))}[kn](e){const t=this[mn],i=this[Mn];return[...e].filter((e=>t.has(e)&&!i.has(e)))}[_r](e,t=new Set){for(const i of this[yn])i[Un](e,t)}[Un](e,t){const i=this[Sn](e,t);i?this[fn](i,e,t):this[_r](e,t)}[Sn](e,t){const{use:i,usehref:a}=this;if(!i&&!a)return null;let s=null,r=null,n=null,g=i;if(a){g=a;a.startsWith("#som(")&&a.endsWith(")")?r=a.slice(5,-1):a.startsWith(".#som(")&&a.endsWith(")")?r=a.slice(6,-1):a.startsWith("#")?n=a.slice(1):a.startsWith(".#")&&(n=a.slice(2))}else i.startsWith("#")?n=i.slice(1):r=i;this.use=this.usehref="";if(n)s=e.get(n);else{s=searchNode(e.get(zr),this,r,!0,!1);s&&(s=s[0])}if(!s){warn(`XFA - Invalid prototype reference: ${g}.`);return null}if(s[Tr]!==this[Tr]){warn(`XFA - Incompatible prototype: ${s[Tr]} !== ${this[Tr]}.`);return null}if(t.has(s)){warn("XFA - Cycle detected in prototypes use.");return null}t.add(s);const o=s[Sn](e,t);o&&s[fn](o,e,t);s[_r](e,t);t.delete(s);return s}[fn](e,t,i){if(i.has(e)){warn("XFA - Cycle detected in prototypes use.");return}!this[ar]&&e[ar]&&(this[ar]=e[ar]);new Set(i).add(e);for(const t of this[kn](e[Mn])){this[t]=e[t];this[Mn]&&this[Mn].add(t)}for(const a of Object.getOwnPropertyNames(this)){if(this[mn].has(a))continue;const s=this[a],r=e[a];if(s instanceof XFAObjectArray){for(const e of s[yn])e[Un](t,i);for(let a=s[yn].length,n=r[yn].length;aXFAObject[wn](e))):"object"==typeof e&&null!==e?Object.assign({},e):e}[tr](){const e=Object.create(Object.getPrototypeOf(this));for(const t of Object.getOwnPropertySymbols(this))try{e[t]=this[t]}catch{shadow(e,t,this[t])}e[In]=`${e[Tr]}${Hn++}`;e[yn]=[];for(const t of Object.getOwnPropertyNames(this)){if(this[mn].has(t)){e[t]=XFAObject[wn](this[t]);continue}const i=this[t];e[t]=i instanceof XFAObjectArray?new XFAObjectArray(i[Nn]):null}for(const t of this[yn]){const i=t[Tr],a=t[tr]();e[yn].push(a);a[xn]=e;null===e[i]?e[i]=a:e[i][yn].push(a)}return e}[fr](e=null){return e?this[yn].filter((t=>t[Tr]===e)):this[yn]}[hr](e){return this[e]}[lr](e,t,i=!0){return Array.from(this[Qr](e,t,i))}*[Qr](e,t,i=!0){if("parent"!==e){for(const i of this[yn]){i[Tr]===e&&(yield i);i.name===e&&(yield i);(t||i[Jr]())&&(yield*i[Qr](e,t,!1))}i&&this[mn].has(e)&&(yield new XFAAttribute(this,e,this[e]))}else yield this[xn]}}class XFAObjectArray{constructor(e=1/0){this[Nn]=e;this[yn]=[]}get isXFAObject(){return!1}get isXFAObjectArray(){return!0}push(e){if(this[yn].length<=this[Nn]){this[yn].push(e);return!0}warn(`XFA - node "${e[Tr]}" accepts no more than ${this[Nn]} children`);return!1}isEmpty(){return 0===this[yn].length}dump(){return 1===this[yn].length?this[yn][0][rr]():this[yn].map((e=>e[rr]()))}[tr](){const e=new XFAObjectArray(this[Nn]);e[yn]=this[yn].map((e=>e[tr]()));return e}get children(){return this[yn]}clear(){this[yn].length=0}}class XFAAttribute{constructor(e,t,i){this[xn]=e;this[Tr]=t;this[ar]=i;this[ir]=!1;this[In]="attribute"+Hn++}[wr](){return this[xn]}[xr](){return!0}[Er](){return this[ar].trim()}[tn](e){e=e.value||"";this[ar]=e.toString()}[sn](){return this[ar]}[Ur](e){return this[xn]===e||this[xn][Ur](e)}}class XmlObject extends XFAObject{constructor(e,t,i={}){super(e,t);this[ar]="";this[Dn]=null;if("#text"!==t){const e=new Map;this[pn]=e;for(const[t,a]of Object.entries(i))e.set(t,new XFAAttribute(this,t,a));if(i.hasOwnProperty(qr)){const e=i[qr].xfa.dataNode;void 0!==e&&("dataGroup"===e?this[Dn]=!1:"dataValue"===e&&(this[Dn]=!0))}}this[ir]=!1}[gn](e){const t=this[Tr];if("#text"===t){e.push(encodeToXmlString(this[ar]));return}const i=utf8StringToString(t),a=this[Kr]===Jn?"xfa:":"";e.push(`<${a}${i}`);for(const[t,i]of this[pn].entries()){const a=utf8StringToString(t);e.push(` ${a}="${encodeToXmlString(i[ar])}"`)}null!==this[Dn]&&(this[Dn]?e.push(' xfa:dataNode="dataValue"'):e.push(' xfa:dataNode="dataGroup"'));if(this[ar]||0!==this[yn].length){e.push(">");if(this[ar])"string"==typeof this[ar]?e.push(encodeToXmlString(this[ar])):this[ar][gn](e);else for(const t of this[yn])t[gn](e);e.push(``)}else e.push("/>")}[Or](e){if(this[ar]){const e=new XmlObject(this[Kr],"#text");this[zs](e);e[ar]=this[ar];this[ar]=""}this[zs](e);return!0}[Wr](e){this[ar]+=e}[gr](){if(this[ar]&&this[yn].length>0){const e=new XmlObject(this[Kr],"#text");this[zs](e);e[ar]=this[ar];delete this[ar]}}[nn](){return"#text"===this[Tr]?HTMLResult.success({name:"#text",value:this[ar]}):HTMLResult.EMPTY}[fr](e=null){return e?this[yn].filter((t=>t[Tr]===e)):this[yn]}[cr](){return this[pn]}[hr](e){const t=this[pn].get(e);return void 0!==t?t:this[fr](e)}*[Qr](e,t){const i=this[pn].get(e);i&&(yield i);for(const i of this[yn]){i[Tr]===e&&(yield i);t&&(yield*i[Qr](e,t))}}*[Ir](e,t){const i=this[pn].get(e);!i||t&&i[ir]||(yield i);for(const i of this[yn])yield*i[Ir](e,t)}*[dr](e,t,i){for(const a of this[yn]){a[Tr]!==e||i&&a[ir]||(yield a);t&&(yield*a[dr](e,t,i))}}[xr](){return null===this[Dn]?0===this[yn].length||this[yn][0][Kr]===Cn.xhtml.id:this[Dn]}[Er](){return null===this[Dn]?0===this[yn].length?this[ar].trim():this[yn][0][Kr]===Cn.xhtml.id?this[yn][0][sn]().trim():null:this[ar].trim()}[tn](e){e=e.value||"";this[ar]=e.toString()}[rr](e=!1){const t=Object.create(null);e&&(t.$ns=this[Kr]);this[ar]&&(t.$content=this[ar]);t.$name=this[Tr];t.children=[];for(const i of this[yn])t.children.push(i[rr](e));t.attributes=Object.create(null);for(const[e,i]of this[pn])t.attributes[e]=i[ar];return t}}class ContentObject extends XFAObject{constructor(e,t){super(e,t);this[ar]=""}[Wr](e){this[ar]+=e}[gr](){}}class OptionObject extends ContentObject{constructor(e,t,i){super(e,t);this[Gn]=i}[gr](){this[ar]=getKeyword({data:this[ar],defaultValue:this[Gn][0],validate:e=>this[Gn].includes(e)})}[$s](e){super[$s](e);delete this[Gn]}}class StringObject extends ContentObject{[gr](){this[ar]=this[ar].trim()}}class IntegerObject extends ContentObject{constructor(e,t,i,a){super(e,t);this[bn]=i;this[Ln]=a}[gr](){this[ar]=getInteger({data:this[ar],defaultValue:this[bn],validate:this[Ln]})}[$s](e){super[$s](e);delete this[bn];delete this[Ln]}}class Option01 extends IntegerObject{constructor(e,t){super(e,t,0,(e=>1===e))}}class Option10 extends IntegerObject{constructor(e,t){super(e,t,1,(e=>0===e))}}function measureToString(e){return"string"==typeof e?"0px":Number.isInteger(e)?`${e}px`:`${e.toFixed(2)}px`}const Yn={anchorType(e,t){const i=e[yr]();if(i&&(!i.layout||"position"===i.layout)){"transform"in t||(t.transform="");switch(e.anchorType){case"bottomCenter":t.transform+="translate(-50%, -100%)";break;case"bottomLeft":t.transform+="translate(0,-100%)";break;case"bottomRight":t.transform+="translate(-100%,-100%)";break;case"middleCenter":t.transform+="translate(-50%,-50%)";break;case"middleLeft":t.transform+="translate(0,-50%)";break;case"middleRight":t.transform+="translate(-100%,-50%)";break;case"topCenter":t.transform+="translate(-50%,0)";break;case"topRight":t.transform+="translate(-100%,0)"}}},dimensions(e,t){const i=e[yr]();let a=e.w;const s=e.h;if(i.layout?.includes("row")){const t=i[nr],s=e.colSpan;let r;if(-1===s){r=t.columnWidths.slice(t.currentColumn).reduce(((e,t)=>e+t),0);t.currentColumn=0}else{r=t.columnWidths.slice(t.currentColumn,t.currentColumn+s).reduce(((e,t)=>e+t),0);t.currentColumn=(t.currentColumn+e.colSpan)%t.columnWidths.length}isNaN(r)||(a=e.w=r)}t.width=""!==a?measureToString(a):"auto";t.height=""!==s?measureToString(s):"auto"},position(e,t){const i=e[yr]();if(!i?.layout||"position"===i.layout){t.position="absolute";t.left=measureToString(e.x);t.top=measureToString(e.y)}},rotate(e,t){if(e.rotate){"transform"in t||(t.transform="");t.transform+=`rotate(-${e.rotate}deg)`;t.transformOrigin="top left"}},presence(e,t){switch(e.presence){case"invisible":t.visibility="hidden";break;case"hidden":case"inactive":t.display="none"}},hAlign(e,t){if("para"===e[Tr])switch(e.hAlign){case"justifyAll":t.textAlign="justify-all";break;case"radix":t.textAlign="left";break;default:t.textAlign=e.hAlign}else switch(e.hAlign){case"left":t.alignSelf="start";break;case"center":t.alignSelf="center";break;case"right":t.alignSelf="end"}},margin(e,t){e.margin&&(t.margin=e.margin[on]().margin)}};function setMinMaxDimensions(e,t){if("position"===e[yr]().layout){e.minW>0&&(t.minWidth=measureToString(e.minW));e.maxW>0&&(t.maxWidth=measureToString(e.maxW));e.minH>0&&(t.minHeight=measureToString(e.minH));e.maxH>0&&(t.maxHeight=measureToString(e.maxH))}}function layoutText(e,t,i,a,s,r){const n=new TextMeasure(t,i,a,s);"string"==typeof e?n.addString(e):e[jr](n);return n.compute(r)}function layoutNode(e,t){let i=null,a=null,s=!1;if((!e.w||!e.h)&&e.value){let r=0,n=0;if(e.margin){r=e.margin.leftInset+e.margin.rightInset;n=e.margin.topInset+e.margin.bottomInset}let g=null,o=null;if(e.para){o=Object.create(null);g=""===e.para.lineHeight?null:e.para.lineHeight;o.top=""===e.para.spaceAbove?0:e.para.spaceAbove;o.bottom=""===e.para.spaceBelow?0:e.para.spaceBelow;o.left=""===e.para.marginLeft?0:e.para.marginLeft;o.right=""===e.para.marginRight?0:e.para.marginRight}let c=e.font;if(!c){const t=e[Dr]();let i=e[wr]();for(;i&&i!==t;){if(i.font){c=i.font;break}i=i[wr]()}}const C=(e.w||t.width)-r,h=e[br].fontFinder;if(e.value.exData&&e.value.exData[ar]&&"text/html"===e.value.exData.contentType){const t=layoutText(e.value.exData[ar],c,o,g,h,C);a=t.width;i=t.height;s=t.isBroken}else{const t=e.value[sn]();if(t){const e=layoutText(t,c,o,g,h,C);a=e.width;i=e.height;s=e.isBroken}}null===a||e.w||(a+=r);null===i||e.h||(i+=n)}return{w:a,h:i,isBroken:s}}function computeBbox(e,t,i){let a;if(""!==e.w&&""!==e.h)a=[e.x,e.y,e.w,e.h];else{if(!i)return null;let s=e.w;if(""===s){if(0===e.maxW){const t=e[yr]();s="position"===t.layout&&""!==t.w?0:e.minW}else s=Math.min(e.maxW,i.width);t.attributes.style.width=measureToString(s)}let r=e.h;if(""===r){if(0===e.maxH){const t=e[yr]();r="position"===t.layout&&""!==t.h?0:e.minH}else r=Math.min(e.maxH,i.height);t.attributes.style.height=measureToString(r)}a=[e.x,e.y,s,r]}return a}function fixDimensions(e){const t=e[yr]();if(t.layout?.includes("row")){const i=t[nr],a=e.colSpan;let s;s=-1===a?i.columnWidths.slice(i.currentColumn).reduce(((e,t)=>e+t),0):i.columnWidths.slice(i.currentColumn,i.currentColumn+a).reduce(((e,t)=>e+t),0);isNaN(s)||(e.w=s)}t.layout&&"position"!==t.layout&&(e.x=e.y=0);"table"===e.layout&&""===e.w&&Array.isArray(e.columnWidths)&&(e.w=e.columnWidths.reduce(((e,t)=>e+t),0))}function layoutClass(e){switch(e.layout){case"position":default:return"xfaPosition";case"lr-tb":return"xfaLrTb";case"rl-row":return"xfaRlRow";case"rl-tb":return"xfaRlTb";case"row":return"xfaRow";case"table":return"xfaTable";case"tb":return"xfaTb"}}function toStyle(e,...t){const i=Object.create(null);for(const a of t){const t=e[a];if(null!==t)if(Yn.hasOwnProperty(a))Yn[a](e,i);else if(t instanceof XFAObject){const e=t[on]();e?Object.assign(i,e):warn(`(DEBUG) - XFA - style for ${a} not implemented yet`)}}return i}function createWrapper(e,t){const{attributes:i}=t,{style:a}=i,s={name:"div",attributes:{class:["xfaWrapper"],style:Object.create(null)},children:[]};i.class.push("xfaWrapped");if(e.border){const{widths:i,insets:r}=e.border[nr];let n,g,o=r[0],c=r[3];const C=r[0]+r[2],h=r[1]+r[3];switch(e.border.hand){case"even":o-=i[0]/2;c-=i[3]/2;n=`calc(100% + ${(i[1]+i[3])/2-h}px)`;g=`calc(100% + ${(i[0]+i[2])/2-C}px)`;break;case"left":o-=i[0];c-=i[3];n=`calc(100% + ${i[1]+i[3]-h}px)`;g=`calc(100% + ${i[0]+i[2]-C}px)`;break;case"right":n=h?`calc(100% - ${h}px)`:"100%";g=C?`calc(100% - ${C}px)`:"100%"}const l=["xfaBorder"];isPrintOnly(e.border)&&l.push("xfaPrintOnly");const Q={name:"div",attributes:{class:l,style:{top:`${o}px`,left:`${c}px`,width:n,height:g}},children:[]};for(const e of["border","borderWidth","borderColor","borderRadius","borderStyle"])if(void 0!==a[e]){Q.attributes.style[e]=a[e];delete a[e]}s.children.push(Q,t)}else s.children.push(t);for(const e of["background","backgroundClip","top","left","width","height","minWidth","minHeight","maxWidth","maxHeight","transform","transformOrigin","visibility"])if(void 0!==a[e]){s.attributes.style[e]=a[e];delete a[e]}s.attributes.style.position="absolute"===a.position?"absolute":"relative";delete a.position;if(a.alignSelf){s.attributes.style.alignSelf=a.alignSelf;delete a.alignSelf}return s}function fixTextIndent(e){const t=getMeasurement(e.textIndent,"0px");if(t>=0)return;const i="padding"+("left"===("right"===e.textAlign?"right":"left")?"Left":"Right"),a=getMeasurement(e[i],"0px");e[i]=a-t+"px"}function setAccess(e,t){switch(e.access){case"nonInteractive":t.push("xfaNonInteractive");break;case"readOnly":t.push("xfaReadOnly");break;case"protected":t.push("xfaDisabled")}}function isPrintOnly(e){return e.relevant.length>0&&!e.relevant[0].excluded&&"print"===e.relevant[0].viewname}function getCurrentPara(e){const t=e[Dr]()[nr].paraStack;return t.length?t.at(-1):null}function setPara(e,t,i){if(i.attributes.class?.includes("xfaRich")){if(t){""===e.h&&(t.height="auto");""===e.w&&(t.width="auto")}const a=getCurrentPara(e);if(a){const e=i.attributes.style;e.display="flex";e.flexDirection="column";switch(a.vAlign){case"top":e.justifyContent="start";break;case"bottom":e.justifyContent="end";break;case"middle":e.justifyContent="center"}const t=a[on]();for(const[i,a]of Object.entries(t))i in e||(e[i]=a)}}}function setFontFamily(e,t,i,a){if(!i){delete a.fontFamily;return}const s=stripQuotes(e.typeface);a.fontFamily=`"${s}"`;const r=i.find(s);if(r){const{fontFamily:i}=r.regular.cssFontInfo;i!==s&&(a.fontFamily=`"${i}"`);const n=getCurrentPara(t);if(n&&""!==n.lineHeight)return;if(a.lineHeight)return;const g=selectFont(e,r);g&&(a.lineHeight=Math.max(1.2,g.lineHeight))}}function fixURL(e){const t=createValidAbsoluteUrl(e,null,{addDefaultProtocol:!0,tryConvertEncoding:!0});return t?t.href:null}function createLine(e,t){return{name:"div",attributes:{class:["lr-tb"===e.layout?"xfaLr":"xfaRl"]},children:t}}function flushHTML(e){if(!e[nr])return null;const t={name:"div",attributes:e[nr].attributes,children:e[nr].children};if(e[nr].failingNode){const i=e[nr].failingNode[or]();i&&(e.layout.endsWith("-tb")?t.children.push(createLine(e,[i])):t.children.push(i))}return 0===t.children.length?null:t}function addHTML(e,t,i){const a=e[nr],s=a.availableSpace,[r,n,g,o]=i;switch(e.layout){case"position":a.width=Math.max(a.width,r+g);a.height=Math.max(a.height,n+o);a.children.push(t);break;case"lr-tb":case"rl-tb":if(!a.line||1===a.attempt){a.line=createLine(e,[]);a.children.push(a.line);a.numberInLine=0}a.numberInLine+=1;a.line.children.push(t);if(0===a.attempt){a.currentWidth+=g;a.height=Math.max(a.height,a.prevHeight+o)}else{a.currentWidth=g;a.prevHeight=a.height;a.height+=o;a.attempt=0}a.width=Math.max(a.width,a.currentWidth);break;case"rl-row":case"row":{a.children.push(t);a.width+=g;a.height=Math.max(a.height,o);const e=measureToString(a.height);for(const t of a.children)t.attributes.style.height=e;break}case"table":case"tb":a.width=Math.min(s.width,Math.max(a.width,g));a.height+=o;a.children.push(t)}}function getAvailableSpace(e){const t=e[nr].availableSpace,i=e.margin?e.margin.topInset+e.margin.bottomInset:0,a=e.margin?e.margin.leftInset+e.margin.rightInset:0;switch(e.layout){case"lr-tb":case"rl-tb":return 0===e[nr].attempt?{width:t.width-a-e[nr].currentWidth,height:t.height-i-e[nr].prevHeight}:{width:t.width-a,height:t.height-i-e[nr].height};case"rl-row":case"row":return{width:e[nr].columnWidths.slice(e[nr].currentColumn).reduce(((e,t)=>e+t)),height:t.height-a};case"table":case"tb":return{width:t.width-a,height:t.height-i-e[nr].height};default:return t}}function checkDimensions(e,t){if(null===e[Dr]()[nr].firstUnsplittable)return!0;if(0===e.w||0===e.h)return!0;const i=e[yr](),a=i[nr]?.attempt||0,[,s,r,n]=function getTransformedBBox(e){let t,i,a=""===e.w?NaN:e.w,s=""===e.h?NaN:e.h,[r,n]=[0,0];switch(e.anchorType||""){case"bottomCenter":[r,n]=[a/2,s];break;case"bottomLeft":[r,n]=[0,s];break;case"bottomRight":[r,n]=[a,s];break;case"middleCenter":[r,n]=[a/2,s/2];break;case"middleLeft":[r,n]=[0,s/2];break;case"middleRight":[r,n]=[a,s/2];break;case"topCenter":[r,n]=[a/2,0];break;case"topRight":[r,n]=[a,0]}switch(e.rotate||0){case 0:[t,i]=[-r,-n];break;case 90:[t,i]=[-n,r];[a,s]=[s,-a];break;case 180:[t,i]=[r,n];[a,s]=[-a,-s];break;case 270:[t,i]=[n,-r];[a,s]=[-s,a]}return[e.x+t+Math.min(0,a),e.y+i+Math.min(0,s),Math.abs(a),Math.abs(s)]}(e);switch(i.layout){case"lr-tb":case"rl-tb":return 0===a?e[Dr]()[nr].noLayoutFailure?""!==e.w?Math.round(r-t.width)<=2:t.width>2:!(""!==e.h&&Math.round(n-t.height)>2)&&(""!==e.w?Math.round(r-t.width)<=2||0===i[nr].numberInLine&&t.height>2:t.width>2):!!e[Dr]()[nr].noLayoutFailure||!(""!==e.h&&Math.round(n-t.height)>2)&&((""===e.w||Math.round(r-t.width)<=2||!i[Hr]())&&t.height>2);case"table":case"tb":return!!e[Dr]()[nr].noLayoutFailure||(""===e.h||e[Lr]()?(""===e.w||Math.round(r-t.width)<=2||!i[Hr]())&&t.height>2:Math.round(n-t.height)<=2);case"position":if(e[Dr]()[nr].noLayoutFailure)return!0;if(""===e.h||Math.round(n+s-t.height)<=2)return!0;return n+s>e[Dr]()[nr].currentContentArea.h;case"rl-row":case"row":return!!e[Dr]()[nr].noLayoutFailure||(""===e.h||Math.round(n-t.height)<=2);default:return!0}}const vn=Cn.template.id,Kn="http://www.w3.org/2000/svg",Tn=/^H(\d+)$/,qn=new Set(["image/gif","image/jpeg","image/jpg","image/pjpeg","image/png","image/apng","image/x-png","image/bmp","image/x-ms-bmp","image/tiff","image/tif","application/octet-stream"]),On=[[[66,77],"image/bmp"],[[255,216,255],"image/jpeg"],[[73,73,42,0],"image/tiff"],[[77,77,0,42],"image/tiff"],[[71,73,70,56,57,97],"image/gif"],[[137,80,78,71,13,10,26,10],"image/png"]];function getBorderDims(e){if(!e||!e.border)return{w:0,h:0};const t=e.border[ur]();return t?{w:t.widths[0]+t.widths[2]+t.insets[0]+t.insets[2],h:t.widths[1]+t.widths[3]+t.insets[1]+t.insets[3]}:{w:0,h:0}}function hasMargin(e){return e.margin&&(e.margin.topInset||e.margin.rightInset||e.margin.bottomInset||e.margin.leftInset)}function _setValue(e,t){if(!e.value){const t=new Value({});e[zs](t);e.value=t}e.value[tn](t)}function*getContainedChildren(e){for(const t of e[fr]())t instanceof SubformSet?yield*t[pr]():yield t}function isRequired(e){return"error"===e.validate?.nullTest}function setTabIndex(e){for(;e;){if(!e.traversal){e[an]=e[wr]()[an];return}if(e[an])return;let t=null;for(const i of e.traversal[fr]())if("next"===i.operation){t=i;break}if(!t||!t.ref){e[an]=e[wr]()[an];return}const i=e[Dr]();e[an]=++i[an];const a=i[$r](t.ref,e);if(!a)return;e=a[0]}}function applyAssist(e,t){const i=e.assist;if(i){const e=i[nn]();e&&(t.title=e);const a=i.role.match(Tn);if(a){const e="heading",i=a[1];t.role=e;t["aria-level"]=i}}if("table"===e.layout)t.role="table";else if("row"===e.layout)t.role="row";else{const i=e[wr]();"row"===i.layout&&(t.role="TH"===i.assist?.role?"columnheader":"cell")}}function ariaLabel(e){if(!e.assist)return null;const t=e.assist;return t.speak&&""!==t.speak[ar]?t.speak[ar]:t.toolTip?t.toolTip[ar]:null}function valueToHtml(e){return HTMLResult.success({name:"div",attributes:{class:["xfaRich"],style:Object.create(null)},children:[{name:"span",attributes:{style:Object.create(null)},value:e}]})}function setFirstUnsplittable(e){const t=e[Dr]();if(null===t[nr].firstUnsplittable){t[nr].firstUnsplittable=e;t[nr].noLayoutFailure=!0}}function unsetFirstUnsplittable(e){const t=e[Dr]();t[nr].firstUnsplittable===e&&(t[nr].noLayoutFailure=!1)}function handleBreak(e){if(e[nr])return!1;e[nr]=Object.create(null);if("auto"===e.targetType)return!1;const t=e[Dr]();let i=null;if(e.target){i=t[$r](e.target,e[wr]());if(!i)return!1;i=i[0]}const{currentPageArea:a,currentContentArea:s}=t[nr];if("pageArea"===e.targetType){i instanceof PageArea||(i=null);if(e.startNew){e[nr].target=i||a;return!0}if(i&&i!==a){e[nr].target=i;return!0}return!1}i instanceof ContentArea||(i=null);const r=i&&i[wr]();let n,g=r;if(e.startNew)if(i){const e=r.contentArea.children,t=e.indexOf(s),a=e.indexOf(i);-1!==t&&te;a[nr].noLayoutFailure=!0;const n=t[nn](i);e[Vs](n.html,n.bbox);a[nr].noLayoutFailure=s;t[yr]=r}class AppearanceFilter extends StringObject{constructor(e){super(vn,"appearanceFilter");this.id=e.id||"";this.type=getStringOption(e.type,["optional","required"]);this.use=e.use||"";this.usehref=e.usehref||""}}class Arc extends XFAObject{constructor(e){super(vn,"arc",!0);this.circular=getInteger({data:e.circular,defaultValue:0,validate:e=>1===e});this.hand=getStringOption(e.hand,["even","left","right"]);this.id=e.id||"";this.startAngle=getFloat({data:e.startAngle,defaultValue:0,validate:e=>!0});this.sweepAngle=getFloat({data:e.sweepAngle,defaultValue:360,validate:e=>!0});this.use=e.use||"";this.usehref=e.usehref||"";this.edge=null;this.fill=null}[nn](){const e=this.edge||new Edge({}),t=e[on](),i=Object.create(null);"visible"===this.fill?.presence?Object.assign(i,this.fill[on]()):i.fill="transparent";i.strokeWidth=measureToString("visible"===e.presence?e.thickness:0);i.stroke=t.color;let a;const s={xmlns:Kn,style:{width:"100%",height:"100%",overflow:"visible"}};if(360===this.sweepAngle)a={name:"ellipse",attributes:{xmlns:Kn,cx:"50%",cy:"50%",rx:"50%",ry:"50%",style:i}};else{const e=this.startAngle*Math.PI/180,t=this.sweepAngle*Math.PI/180,r=this.sweepAngle>180?1:0,[n,g,o,c]=[50*(1+Math.cos(e)),50*(1-Math.sin(e)),50*(1+Math.cos(e+t)),50*(1-Math.sin(e+t))];a={name:"path",attributes:{xmlns:Kn,d:`M ${n} ${g} A 50 50 0 ${r} 0 ${o} ${c}`,vectorEffect:"non-scaling-stroke",style:i}};Object.assign(s,{viewBox:"0 0 100 100",preserveAspectRatio:"none"})}const r={name:"svg",children:[a],attributes:s};if(hasMargin(this[wr]()[wr]()))return HTMLResult.success({name:"div",attributes:{style:{display:"inline",width:"100%",height:"100%"}},children:[r]});r.attributes.style.position="absolute";return HTMLResult.success(r)}}class Area extends XFAObject{constructor(e){super(vn,"area",!0);this.colSpan=getInteger({data:e.colSpan,defaultValue:1,validate:e=>e>=1||-1===e});this.id=e.id||"";this.name=e.name||"";this.relevant=getRelevant(e.relevant);this.use=e.use||"";this.usehref=e.usehref||"";this.x=getMeasurement(e.x,"0pt");this.y=getMeasurement(e.y,"0pt");this.desc=null;this.extras=null;this.area=new XFAObjectArray;this.draw=new XFAObjectArray;this.exObject=new XFAObjectArray;this.exclGroup=new XFAObjectArray;this.field=new XFAObjectArray;this.subform=new XFAObjectArray;this.subformSet=new XFAObjectArray}*[pr](){yield*getContainedChildren(this)}[Jr](){return!0}[Gr](){return!0}[Vs](e,t){const[i,a,s,r]=t;this[nr].width=Math.max(this[nr].width,i+s);this[nr].height=Math.max(this[nr].height,a+r);this[nr].children.push(e)}[Cr](){return this[nr].availableSpace}[nn](e){const t=toStyle(this,"position"),i={style:t,id:this[In],class:["xfaArea"]};isPrintOnly(this)&&i.class.push("xfaPrintOnly");this.name&&(i.xfaName=this.name);const a=[];this[nr]={children:a,width:0,height:0,availableSpace:e};const s=this[_s]({filter:new Set(["area","draw","field","exclGroup","subform","subformSet"]),include:!0});if(!s.success){if(s.isBreak())return s;delete this[nr];return HTMLResult.FAILURE}t.width=measureToString(this[nr].width);t.height=measureToString(this[nr].height);const r={name:"div",attributes:i,children:a},n=[this.x,this.y,this[nr].width,this[nr].height];delete this[nr];return HTMLResult.success(r,n)}}class Assist extends XFAObject{constructor(e){super(vn,"assist",!0);this.id=e.id||"";this.role=e.role||"";this.use=e.use||"";this.usehref=e.usehref||"";this.speak=null;this.toolTip=null}[nn](){return this.toolTip?.[ar]||null}}class Barcode extends XFAObject{constructor(e){super(vn,"barcode",!0);this.charEncoding=getKeyword({data:e.charEncoding?e.charEncoding.toLowerCase():"",defaultValue:"",validate:e=>["utf-8","big-five","fontspecific","gbk","gb-18030","gb-2312","ksc-5601","none","shift-jis","ucs-2","utf-16"].includes(e)||e.match(/iso-8859-\d{2}/)});this.checksum=getStringOption(e.checksum,["none","1mod10","1mod10_1mod11","2mod10","auto"]);this.dataColumnCount=getInteger({data:e.dataColumnCount,defaultValue:-1,validate:e=>e>=0});this.dataLength=getInteger({data:e.dataLength,defaultValue:-1,validate:e=>e>=0});this.dataPrep=getStringOption(e.dataPrep,["none","flateCompress"]);this.dataRowCount=getInteger({data:e.dataRowCount,defaultValue:-1,validate:e=>e>=0});this.endChar=e.endChar||"";this.errorCorrectionLevel=getInteger({data:e.errorCorrectionLevel,defaultValue:-1,validate:e=>e>=0&&e<=8});this.id=e.id||"";this.moduleHeight=getMeasurement(e.moduleHeight,"5mm");this.moduleWidth=getMeasurement(e.moduleWidth,"0.25mm");this.printCheckDigit=getInteger({data:e.printCheckDigit,defaultValue:0,validate:e=>1===e});this.rowColumnRatio=getRatio(e.rowColumnRatio);this.startChar=e.startChar||"";this.textLocation=getStringOption(e.textLocation,["below","above","aboveEmbedded","belowEmbedded","none"]);this.truncate=getInteger({data:e.truncate,defaultValue:0,validate:e=>1===e});this.type=getStringOption(e.type?e.type.toLowerCase():"",["aztec","codabar","code2of5industrial","code2of5interleaved","code2of5matrix","code2of5standard","code3of9","code3of9extended","code11","code49","code93","code128","code128a","code128b","code128c","code128sscc","datamatrix","ean8","ean8add2","ean8add5","ean13","ean13add2","ean13add5","ean13pwcd","fim","logmars","maxicode","msi","pdf417","pdf417macro","plessey","postauscust2","postauscust3","postausreplypaid","postausstandard","postukrm4scc","postusdpbc","postusimb","postusstandard","postus5zip","qrcode","rfid","rss14","rss14expanded","rss14limited","rss14stacked","rss14stackedomni","rss14truncated","telepen","ucc128","ucc128random","ucc128sscc","upca","upcaadd2","upcaadd5","upcapwcd","upce","upceadd2","upceadd5","upcean2","upcean5","upsmaxicode"]);this.upsMode=getStringOption(e.upsMode,["usCarrier","internationalCarrier","secureSymbol","standardSymbol"]);this.use=e.use||"";this.usehref=e.usehref||"";this.wideNarrowRatio=getRatio(e.wideNarrowRatio);this.encrypt=null;this.extras=null}}class Bind extends XFAObject{constructor(e){super(vn,"bind",!0);this.match=getStringOption(e.match,["once","dataRef","global","none"]);this.ref=e.ref||"";this.picture=null}}class BindItems extends XFAObject{constructor(e){super(vn,"bindItems");this.connection=e.connection||"";this.labelRef=e.labelRef||"";this.ref=e.ref||"";this.valueRef=e.valueRef||""}}class Bookend extends XFAObject{constructor(e){super(vn,"bookend");this.id=e.id||"";this.leader=e.leader||"";this.trailer=e.trailer||"";this.use=e.use||"";this.usehref=e.usehref||""}}class BooleanElement extends Option01{constructor(e){super(vn,"boolean");this.id=e.id||"";this.name=e.name||"";this.use=e.use||"";this.usehref=e.usehref||""}[nn](e){return valueToHtml(1===this[ar]?"1":"0")}}class Border extends XFAObject{constructor(e){super(vn,"border",!0);this.break=getStringOption(e.break,["close","open"]);this.hand=getStringOption(e.hand,["even","left","right"]);this.id=e.id||"";this.presence=getStringOption(e.presence,["visible","hidden","inactive","invisible"]);this.relevant=getRelevant(e.relevant);this.use=e.use||"";this.usehref=e.usehref||"";this.corner=new XFAObjectArray(4);this.edge=new XFAObjectArray(4);this.extras=null;this.fill=null;this.margin=null}[ur](){if(!this[nr]){const e=this.edge.children.slice();if(e.length<4){const t=e.at(-1)||new Edge({});for(let i=e.length;i<4;i++)e.push(t)}const t=e.map((e=>e.thickness)),i=[0,0,0,0];if(this.margin){i[0]=this.margin.topInset;i[1]=this.margin.rightInset;i[2]=this.margin.bottomInset;i[3]=this.margin.leftInset}this[nr]={widths:t,insets:i,edges:e}}return this[nr]}[on](){const{edges:e}=this[ur](),t=e.map((e=>{const t=e[on]();t.color||="#000000";return t})),i=Object.create(null);this.margin&&Object.assign(i,this.margin[on]());"visible"===this.fill?.presence&&Object.assign(i,this.fill[on]());if(this.corner.children.some((e=>0!==e.radius))){const e=this.corner.children.map((e=>e[on]()));if(2===e.length||3===e.length){const t=e.at(-1);for(let i=e.length;i<4;i++)e.push(t)}i.borderRadius=e.map((e=>e.radius)).join(" ")}switch(this.presence){case"invisible":case"hidden":i.borderStyle="";break;case"inactive":i.borderStyle="none";break;default:i.borderStyle=t.map((e=>e.style)).join(" ")}i.borderWidth=t.map((e=>e.width)).join(" ");i.borderColor=t.map((e=>e.color)).join(" ");return i}}class Break extends XFAObject{constructor(e){super(vn,"break",!0);this.after=getStringOption(e.after,["auto","contentArea","pageArea","pageEven","pageOdd"]);this.afterTarget=e.afterTarget||"";this.before=getStringOption(e.before,["auto","contentArea","pageArea","pageEven","pageOdd"]);this.beforeTarget=e.beforeTarget||"";this.bookendLeader=e.bookendLeader||"";this.bookendTrailer=e.bookendTrailer||"";this.id=e.id||"";this.overflowLeader=e.overflowLeader||"";this.overflowTarget=e.overflowTarget||"";this.overflowTrailer=e.overflowTrailer||"";this.startNew=getInteger({data:e.startNew,defaultValue:0,validate:e=>1===e});this.use=e.use||"";this.usehref=e.usehref||"";this.extras=null}}class BreakAfter extends XFAObject{constructor(e){super(vn,"breakAfter",!0);this.id=e.id||"";this.leader=e.leader||"";this.startNew=getInteger({data:e.startNew,defaultValue:0,validate:e=>1===e});this.target=e.target||"";this.targetType=getStringOption(e.targetType,["auto","contentArea","pageArea"]);this.trailer=e.trailer||"";this.use=e.use||"";this.usehref=e.usehref||"";this.script=null}}class BreakBefore extends XFAObject{constructor(e){super(vn,"breakBefore",!0);this.id=e.id||"";this.leader=e.leader||"";this.startNew=getInteger({data:e.startNew,defaultValue:0,validate:e=>1===e});this.target=e.target||"";this.targetType=getStringOption(e.targetType,["auto","contentArea","pageArea"]);this.trailer=e.trailer||"";this.use=e.use||"";this.usehref=e.usehref||"";this.script=null}[nn](e){this[nr]={};return HTMLResult.FAILURE}}class Button extends XFAObject{constructor(e){super(vn,"button",!0);this.highlight=getStringOption(e.highlight,["inverted","none","outline","push"]);this.id=e.id||"";this.use=e.use||"";this.usehref=e.usehref||"";this.extras=null}[nn](e){const t=this[wr]()[wr](),i={name:"button",attributes:{id:this[In],class:["xfaButton"],style:{}},children:[]};for(const e of t.event.children){if("click"!==e.activity||!e.script)continue;const t=recoverJsURL(e.script[ar]);if(!t)continue;const a=fixURL(t.url);a&&i.children.push({name:"a",attributes:{id:"link"+this[In],href:a,newWindow:t.newWindow,class:["xfaLink"],style:{}},children:[]})}return HTMLResult.success(i)}}class Calculate extends XFAObject{constructor(e){super(vn,"calculate",!0);this.id=e.id||"";this.override=getStringOption(e.override,["disabled","error","ignore","warning"]);this.use=e.use||"";this.usehref=e.usehref||"";this.extras=null;this.message=null;this.script=null}}class Caption extends XFAObject{constructor(e){super(vn,"caption",!0);this.id=e.id||"";this.placement=getStringOption(e.placement,["left","bottom","inline","right","top"]);this.presence=getStringOption(e.presence,["visible","hidden","inactive","invisible"]);this.reserve=Math.ceil(getMeasurement(e.reserve));this.use=e.use||"";this.usehref=e.usehref||"";this.extras=null;this.font=null;this.margin=null;this.para=null;this.value=null}[tn](e){_setValue(this,e)}[ur](e){if(!this[nr]){let{width:t,height:i}=e;switch(this.placement){case"left":case"right":case"inline":t=this.reserve<=0?t:this.reserve;break;case"top":case"bottom":i=this.reserve<=0?i:this.reserve}this[nr]=layoutNode(this,{width:t,height:i})}return this[nr]}[nn](e){if(!this.value)return HTMLResult.EMPTY;this[Zr]();const t=this.value[nn](e).html;if(!t){this[Xr]();return HTMLResult.EMPTY}const i=this.reserve;if(this.reserve<=0){const{w:t,h:i}=this[ur](e);switch(this.placement){case"left":case"right":case"inline":this.reserve=t;break;case"top":case"bottom":this.reserve=i}}const a=[];"string"==typeof t?a.push({name:"#text",value:t}):a.push(t);const s=toStyle(this,"font","margin","visibility");switch(this.placement){case"left":case"right":this.reserve>0&&(s.width=measureToString(this.reserve));break;case"top":case"bottom":this.reserve>0&&(s.height=measureToString(this.reserve))}setPara(this,null,t);this[Xr]();this.reserve=i;return HTMLResult.success({name:"div",attributes:{style:s,class:["xfaCaption"]},children:a})}}class Certificate extends StringObject{constructor(e){super(vn,"certificate");this.id=e.id||"";this.name=e.name||"";this.use=e.use||"";this.usehref=e.usehref||""}}class Certificates extends XFAObject{constructor(e){super(vn,"certificates",!0);this.credentialServerPolicy=getStringOption(e.credentialServerPolicy,["optional","required"]);this.id=e.id||"";this.url=e.url||"";this.urlPolicy=e.urlPolicy||"";this.use=e.use||"";this.usehref=e.usehref||"";this.encryption=null;this.issuers=null;this.keyUsage=null;this.oids=null;this.signing=null;this.subjectDNs=null}}class CheckButton extends XFAObject{constructor(e){super(vn,"checkButton",!0);this.id=e.id||"";this.mark=getStringOption(e.mark,["default","check","circle","cross","diamond","square","star"]);this.shape=getStringOption(e.shape,["square","round"]);this.size=getMeasurement(e.size,"10pt");this.use=e.use||"";this.usehref=e.usehref||"";this.border=null;this.extras=null;this.margin=null}[nn](e){const t=toStyle("margin"),i=measureToString(this.size);t.width=t.height=i;let a,s,r;const n=this[wr]()[wr](),g=n.items.children.length&&n.items.children[0][nn]().html||[],o={on:(void 0!==g[0]?g[0]:"on").toString(),off:(void 0!==g[1]?g[1]:"off").toString()},c=(n.value?.[sn]()||"off")===o.on||void 0,C=n[yr](),h=n[In];let l;if(C instanceof ExclGroup){r=C[In];a="radio";s="xfaRadio";l=C[sr]?.[In]||C[In]}else{a="checkbox";s="xfaCheckbox";l=n[sr]?.[In]||n[In]}const Q={name:"input",attributes:{class:[s],style:t,fieldId:h,dataId:l,type:a,checked:c,xfaOn:o.on,xfaOff:o.off,"aria-label":ariaLabel(n),"aria-required":!1}};r&&(Q.attributes.name=r);if(isRequired(n)){Q.attributes["aria-required"]=!0;Q.attributes.required=!0}return HTMLResult.success({name:"label",attributes:{class:["xfaLabel"]},children:[Q]})}}class ChoiceList extends XFAObject{constructor(e){super(vn,"choiceList",!0);this.commitOn=getStringOption(e.commitOn,["select","exit"]);this.id=e.id||"";this.open=getStringOption(e.open,["userControl","always","multiSelect","onEntry"]);this.textEntry=getInteger({data:e.textEntry,defaultValue:0,validate:e=>1===e});this.use=e.use||"";this.usehref=e.usehref||"";this.border=null;this.extras=null;this.margin=null}[nn](e){const t=toStyle(this,"border","margin"),i=this[wr]()[wr](),a={fontSize:`calc(${i.font?.size||10}px * var(--scale-factor))`},s=[];if(i.items.children.length>0){const e=i.items;let t=0,r=0;if(2===e.children.length){t=e.children[0].save;r=1-t}const n=e.children[t][nn]().html,g=e.children[r][nn]().html;let o=!1;const c=i.value?.[sn]()||"";for(let e=0,t=n.length;eMath.min(Math.max(0,parseInt(e.trim(),10)),255))).map((e=>isNaN(e)?0:e));if(r.length<3)return{r:i,g:a,b:s};[i,a,s]=r;return{r:i,g:a,b:s}}(e.value):"";this.extras=null}[Fr](){return!1}[on](){return this.value?Util.makeHexColor(this.value.r,this.value.g,this.value.b):null}}class Comb extends XFAObject{constructor(e){super(vn,"comb");this.id=e.id||"";this.numberOfCells=getInteger({data:e.numberOfCells,defaultValue:0,validate:e=>e>=0});this.use=e.use||"";this.usehref=e.usehref||""}}class Connect extends XFAObject{constructor(e){super(vn,"connect",!0);this.connection=e.connection||"";this.id=e.id||"";this.ref=e.ref||"";this.usage=getStringOption(e.usage,["exportAndImport","exportOnly","importOnly"]);this.use=e.use||"";this.usehref=e.usehref||"";this.picture=null}}class ContentArea extends XFAObject{constructor(e){super(vn,"contentArea",!0);this.h=getMeasurement(e.h);this.id=e.id||"";this.name=e.name||"";this.relevant=getRelevant(e.relevant);this.use=e.use||"";this.usehref=e.usehref||"";this.w=getMeasurement(e.w);this.x=getMeasurement(e.x,"0pt");this.y=getMeasurement(e.y,"0pt");this.desc=null;this.extras=null}[nn](e){const t={left:measureToString(this.x),top:measureToString(this.y),width:measureToString(this.w),height:measureToString(this.h)},i=["xfaContentarea"];isPrintOnly(this)&&i.push("xfaPrintOnly");return HTMLResult.success({name:"div",children:[],attributes:{style:t,class:i,id:this[In]}})}}class Corner extends XFAObject{constructor(e){super(vn,"corner",!0);this.id=e.id||"";this.inverted=getInteger({data:e.inverted,defaultValue:0,validate:e=>1===e});this.join=getStringOption(e.join,["square","round"]);this.presence=getStringOption(e.presence,["visible","hidden","inactive","invisible"]);this.radius=getMeasurement(e.radius);this.stroke=getStringOption(e.stroke,["solid","dashDot","dashDotDot","dashed","dotted","embossed","etched","lowered","raised"]);this.thickness=getMeasurement(e.thickness,"0.5pt");this.use=e.use||"";this.usehref=e.usehref||"";this.color=null;this.extras=null}[on](){const e=toStyle(this,"visibility");e.radius=measureToString("square"===this.join?0:this.radius);return e}}class DateElement extends ContentObject{constructor(e){super(vn,"date");this.id=e.id||"";this.name=e.name||"";this.use=e.use||"";this.usehref=e.usehref||""}[gr](){const e=this[ar].trim();this[ar]=e?new Date(e):null}[nn](e){return valueToHtml(this[ar]?this[ar].toString():"")}}class DateTime extends ContentObject{constructor(e){super(vn,"dateTime");this.id=e.id||"";this.name=e.name||"";this.use=e.use||"";this.usehref=e.usehref||""}[gr](){const e=this[ar].trim();this[ar]=e?new Date(e):null}[nn](e){return valueToHtml(this[ar]?this[ar].toString():"")}}class DateTimeEdit extends XFAObject{constructor(e){super(vn,"dateTimeEdit",!0);this.hScrollPolicy=getStringOption(e.hScrollPolicy,["auto","off","on"]);this.id=e.id||"";this.picker=getStringOption(e.picker,["host","none"]);this.use=e.use||"";this.usehref=e.usehref||"";this.border=null;this.comb=null;this.extras=null;this.margin=null}[nn](e){const t=toStyle(this,"border","font","margin"),i=this[wr]()[wr](),a={name:"input",attributes:{type:"text",fieldId:i[In],dataId:i[sr]?.[In]||i[In],class:["xfaTextfield"],style:t,"aria-label":ariaLabel(i),"aria-required":!1}};if(isRequired(i)){a.attributes["aria-required"]=!0;a.attributes.required=!0}return HTMLResult.success({name:"label",attributes:{class:["xfaLabel"]},children:[a]})}}class Decimal extends ContentObject{constructor(e){super(vn,"decimal");this.fracDigits=getInteger({data:e.fracDigits,defaultValue:2,validate:e=>!0});this.id=e.id||"";this.leadDigits=getInteger({data:e.leadDigits,defaultValue:-1,validate:e=>!0});this.name=e.name||"";this.use=e.use||"";this.usehref=e.usehref||""}[gr](){const e=parseFloat(this[ar].trim());this[ar]=isNaN(e)?null:e}[nn](e){return valueToHtml(null!==this[ar]?this[ar].toString():"")}}class DefaultUi extends XFAObject{constructor(e){super(vn,"defaultUi",!0);this.id=e.id||"";this.use=e.use||"";this.usehref=e.usehref||"";this.extras=null}}class Desc extends XFAObject{constructor(e){super(vn,"desc",!0);this.id=e.id||"";this.use=e.use||"";this.usehref=e.usehref||"";this.boolean=new XFAObjectArray;this.date=new XFAObjectArray;this.dateTime=new XFAObjectArray;this.decimal=new XFAObjectArray;this.exData=new XFAObjectArray;this.float=new XFAObjectArray;this.image=new XFAObjectArray;this.integer=new XFAObjectArray;this.text=new XFAObjectArray;this.time=new XFAObjectArray}}class DigestMethod extends OptionObject{constructor(e){super(vn,"digestMethod",["","SHA1","SHA256","SHA512","RIPEMD160"]);this.id=e.id||"";this.use=e.use||"";this.usehref=e.usehref||""}}class DigestMethods extends XFAObject{constructor(e){super(vn,"digestMethods",!0);this.id=e.id||"";this.type=getStringOption(e.type,["optional","required"]);this.use=e.use||"";this.usehref=e.usehref||"";this.digestMethod=new XFAObjectArray}}class Draw extends XFAObject{constructor(e){super(vn,"draw",!0);this.anchorType=getStringOption(e.anchorType,["topLeft","bottomCenter","bottomLeft","bottomRight","middleCenter","middleLeft","middleRight","topCenter","topRight"]);this.colSpan=getInteger({data:e.colSpan,defaultValue:1,validate:e=>e>=1||-1===e});this.h=e.h?getMeasurement(e.h):"";this.hAlign=getStringOption(e.hAlign,["left","center","justify","justifyAll","radix","right"]);this.id=e.id||"";this.locale=e.locale||"";this.maxH=getMeasurement(e.maxH,"0pt");this.maxW=getMeasurement(e.maxW,"0pt");this.minH=getMeasurement(e.minH,"0pt");this.minW=getMeasurement(e.minW,"0pt");this.name=e.name||"";this.presence=getStringOption(e.presence,["visible","hidden","inactive","invisible"]);this.relevant=getRelevant(e.relevant);this.rotate=getInteger({data:e.rotate,defaultValue:0,validate:e=>e%90==0});this.use=e.use||"";this.usehref=e.usehref||"";this.w=e.w?getMeasurement(e.w):"";this.x=getMeasurement(e.x,"0pt");this.y=getMeasurement(e.y,"0pt");this.assist=null;this.border=null;this.caption=null;this.desc=null;this.extras=null;this.font=null;this.keep=null;this.margin=null;this.para=null;this.traversal=null;this.ui=null;this.value=null;this.setProperty=new XFAObjectArray}[tn](e){_setValue(this,e)}[nn](e){setTabIndex(this);if("hidden"===this.presence||"inactive"===this.presence)return HTMLResult.EMPTY;fixDimensions(this);this[Zr]();const t=this.w,i=this.h,{w:a,h:s,isBroken:r}=layoutNode(this,e);if(a&&""===this.w){if(r&&this[yr]()[Hr]()){this[Xr]();return HTMLResult.FAILURE}this.w=a}s&&""===this.h&&(this.h=s);setFirstUnsplittable(this);if(!checkDimensions(this,e)){this.w=t;this.h=i;this[Xr]();return HTMLResult.FAILURE}unsetFirstUnsplittable(this);const n=toStyle(this,"font","hAlign","dimensions","position","presence","rotate","anchorType","border","margin");setMinMaxDimensions(this,n);if(n.margin){n.padding=n.margin;delete n.margin}const g=["xfaDraw"];this.font&&g.push("xfaFont");isPrintOnly(this)&&g.push("xfaPrintOnly");const o={style:n,id:this[In],class:g};this.name&&(o.xfaName=this.name);const c={name:"div",attributes:o,children:[]};applyAssist(this,o);const C=computeBbox(this,c,e),h=this.value?this.value[nn](e).html:null;if(null===h){this.w=t;this.h=i;this[Xr]();return HTMLResult.success(createWrapper(this,c),C)}c.children.push(h);setPara(this,n,h);this.w=t;this.h=i;this[Xr]();return HTMLResult.success(createWrapper(this,c),C)}}class Edge extends XFAObject{constructor(e){super(vn,"edge",!0);this.cap=getStringOption(e.cap,["square","butt","round"]);this.id=e.id||"";this.presence=getStringOption(e.presence,["visible","hidden","inactive","invisible"]);this.stroke=getStringOption(e.stroke,["solid","dashDot","dashDotDot","dashed","dotted","embossed","etched","lowered","raised"]);this.thickness=getMeasurement(e.thickness,"0.5pt");this.use=e.use||"";this.usehref=e.usehref||"";this.color=null;this.extras=null}[on](){const e=toStyle(this,"visibility");Object.assign(e,{linecap:this.cap,width:measureToString(this.thickness),color:this.color?this.color[on]():"#000000",style:""});if("visible"!==this.presence)e.style="none";else switch(this.stroke){case"solid":e.style="solid";break;case"dashDot":case"dashDotDot":case"dashed":e.style="dashed";break;case"dotted":e.style="dotted";break;case"embossed":e.style="ridge";break;case"etched":e.style="groove";break;case"lowered":e.style="inset";break;case"raised":e.style="outset"}return e}}class Encoding extends OptionObject{constructor(e){super(vn,"encoding",["adbe.x509.rsa_sha1","adbe.pkcs7.detached","adbe.pkcs7.sha1"]);this.id=e.id||"";this.use=e.use||"";this.usehref=e.usehref||""}}class Encodings extends XFAObject{constructor(e){super(vn,"encodings",!0);this.id=e.id||"";this.type=getStringOption(e.type,["optional","required"]);this.use=e.use||"";this.usehref=e.usehref||"";this.encoding=new XFAObjectArray}}class Encrypt extends XFAObject{constructor(e){super(vn,"encrypt",!0);this.id=e.id||"";this.use=e.use||"";this.usehref=e.usehref||"";this.certificate=null}}class EncryptData extends XFAObject{constructor(e){super(vn,"encryptData",!0);this.id=e.id||"";this.operation=getStringOption(e.operation,["encrypt","decrypt"]);this.target=e.target||"";this.use=e.use||"";this.usehref=e.usehref||"";this.filter=null;this.manifest=null}}class Encryption extends XFAObject{constructor(e){super(vn,"encryption",!0);this.id=e.id||"";this.type=getStringOption(e.type,["optional","required"]);this.use=e.use||"";this.usehref=e.usehref||"";this.certificate=new XFAObjectArray}}class EncryptionMethod extends OptionObject{constructor(e){super(vn,"encryptionMethod",["","AES256-CBC","TRIPLEDES-CBC","AES128-CBC","AES192-CBC"]);this.id=e.id||"";this.use=e.use||"";this.usehref=e.usehref||""}}class EncryptionMethods extends XFAObject{constructor(e){super(vn,"encryptionMethods",!0);this.id=e.id||"";this.type=getStringOption(e.type,["optional","required"]);this.use=e.use||"";this.usehref=e.usehref||"";this.encryptionMethod=new XFAObjectArray}}class Event extends XFAObject{constructor(e){super(vn,"event",!0);this.activity=getStringOption(e.activity,["click","change","docClose","docReady","enter","exit","full","indexChange","initialize","mouseDown","mouseEnter","mouseExit","mouseUp","postExecute","postOpen","postPrint","postSave","postSign","postSubmit","preExecute","preOpen","prePrint","preSave","preSign","preSubmit","ready","validationState"]);this.id=e.id||"";this.listen=getStringOption(e.listen,["refOnly","refAndDescendents"]);this.name=e.name||"";this.ref=e.ref||"";this.use=e.use||"";this.usehref=e.usehref||"";this.extras=null;this.encryptData=null;this.execute=null;this.script=null;this.signData=null;this.submit=null}}class ExData extends ContentObject{constructor(e){super(vn,"exData");this.contentType=e.contentType||"";this.href=e.href||"";this.id=e.id||"";this.maxLength=getInteger({data:e.maxLength,defaultValue:-1,validate:e=>e>=-1});this.name=e.name||"";this.rid=e.rid||"";this.transferEncoding=getStringOption(e.transferEncoding,["none","base64","package"]);this.use=e.use||"";this.usehref=e.usehref||""}[Nr](){return"text/html"===this.contentType}[Or](e){if("text/html"===this.contentType&&e[Kr]===Cn.xhtml.id){this[ar]=e;return!0}if("text/xml"===this.contentType){this[ar]=e;return!0}return!1}[nn](e){return"text/html"===this.contentType&&this[ar]?this[ar][nn](e):HTMLResult.EMPTY}}class ExObject extends XFAObject{constructor(e){super(vn,"exObject",!0);this.archive=e.archive||"";this.classId=e.classId||"";this.codeBase=e.codeBase||"";this.codeType=e.codeType||"";this.id=e.id||"";this.name=e.name||"";this.use=e.use||"";this.usehref=e.usehref||"";this.extras=null;this.boolean=new XFAObjectArray;this.date=new XFAObjectArray;this.dateTime=new XFAObjectArray;this.decimal=new XFAObjectArray;this.exData=new XFAObjectArray;this.exObject=new XFAObjectArray;this.float=new XFAObjectArray;this.image=new XFAObjectArray;this.integer=new XFAObjectArray;this.text=new XFAObjectArray;this.time=new XFAObjectArray}}class ExclGroup extends XFAObject{constructor(e){super(vn,"exclGroup",!0);this.access=getStringOption(e.access,["open","nonInteractive","protected","readOnly"]);this.accessKey=e.accessKey||"";this.anchorType=getStringOption(e.anchorType,["topLeft","bottomCenter","bottomLeft","bottomRight","middleCenter","middleLeft","middleRight","topCenter","topRight"]);this.colSpan=getInteger({data:e.colSpan,defaultValue:1,validate:e=>e>=1||-1===e});this.h=e.h?getMeasurement(e.h):"";this.hAlign=getStringOption(e.hAlign,["left","center","justify","justifyAll","radix","right"]);this.id=e.id||"";this.layout=getStringOption(e.layout,["position","lr-tb","rl-row","rl-tb","row","table","tb"]);this.maxH=getMeasurement(e.maxH,"0pt");this.maxW=getMeasurement(e.maxW,"0pt");this.minH=getMeasurement(e.minH,"0pt");this.minW=getMeasurement(e.minW,"0pt");this.name=e.name||"";this.presence=getStringOption(e.presence,["visible","hidden","inactive","invisible"]);this.relevant=getRelevant(e.relevant);this.use=e.use||"";this.usehref=e.usehref||"";this.w=e.w?getMeasurement(e.w):"";this.x=getMeasurement(e.x,"0pt");this.y=getMeasurement(e.y,"0pt");this.assist=null;this.bind=null;this.border=null;this.calculate=null;this.caption=null;this.desc=null;this.extras=null;this.margin=null;this.para=null;this.traversal=null;this.validate=null;this.connect=new XFAObjectArray;this.event=new XFAObjectArray;this.field=new XFAObjectArray;this.setProperty=new XFAObjectArray}[Gr](){return!0}[Fr](){return!0}[tn](e){for(const t of this.field.children){if(!t.value){const e=new Value({});t[zs](e);t.value=e}t.value[tn](e)}}[Hr](){return this.layout.endsWith("-tb")&&0===this[nr].attempt&&this[nr].numberInLine>0||this[wr]()[Hr]()}[Lr](){const e=this[yr]();if(!e[Lr]())return!1;if(void 0!==this[nr]._isSplittable)return this[nr]._isSplittable;if("position"===this.layout||this.layout.includes("row")){this[nr]._isSplittable=!1;return!1}if(e.layout?.endsWith("-tb")&&0!==e[nr].numberInLine)return!1;this[nr]._isSplittable=!0;return!0}[or](){return flushHTML(this)}[Vs](e,t){addHTML(this,e,t)}[Cr](){return getAvailableSpace(this)}[nn](e){setTabIndex(this);if("hidden"===this.presence||"inactive"===this.presence||0===this.h||0===this.w)return HTMLResult.EMPTY;fixDimensions(this);const t=[],i={id:this[In],class:[]};setAccess(this,i.class);this[nr]||(this[nr]=Object.create(null));Object.assign(this[nr],{children:t,attributes:i,attempt:0,line:null,numberInLine:0,availableSpace:{width:Math.min(this.w||1/0,e.width),height:Math.min(this.h||1/0,e.height)},width:0,height:0,prevHeight:0,currentWidth:0});const a=this[Lr]();a||setFirstUnsplittable(this);if(!checkDimensions(this,e))return HTMLResult.FAILURE;const s=new Set(["field"]);if(this.layout.includes("row")){const e=this[yr]().columnWidths;if(Array.isArray(e)&&e.length>0){this[nr].columnWidths=e;this[nr].currentColumn=0}}const r=toStyle(this,"anchorType","dimensions","position","presence","border","margin","hAlign"),n=["xfaExclgroup"],g=layoutClass(this);g&&n.push(g);isPrintOnly(this)&&n.push("xfaPrintOnly");i.style=r;i.class=n;this.name&&(i.xfaName=this.name);this[Zr]();const o="lr-tb"===this.layout||"rl-tb"===this.layout,c=o?2:1;for(;this[nr].attempte>=1||-1===e});this.h=e.h?getMeasurement(e.h):"";this.hAlign=getStringOption(e.hAlign,["left","center","justify","justifyAll","radix","right"]);this.id=e.id||"";this.locale=e.locale||"";this.maxH=getMeasurement(e.maxH,"0pt");this.maxW=getMeasurement(e.maxW,"0pt");this.minH=getMeasurement(e.minH,"0pt");this.minW=getMeasurement(e.minW,"0pt");this.name=e.name||"";this.presence=getStringOption(e.presence,["visible","hidden","inactive","invisible"]);this.relevant=getRelevant(e.relevant);this.rotate=getInteger({data:e.rotate,defaultValue:0,validate:e=>e%90==0});this.use=e.use||"";this.usehref=e.usehref||"";this.w=e.w?getMeasurement(e.w):"";this.x=getMeasurement(e.x,"0pt");this.y=getMeasurement(e.y,"0pt");this.assist=null;this.bind=null;this.border=null;this.calculate=null;this.caption=null;this.desc=null;this.extras=null;this.font=null;this.format=null;this.items=new XFAObjectArray(2);this.keep=null;this.margin=null;this.para=null;this.traversal=null;this.ui=null;this.validate=null;this.value=null;this.bindItems=new XFAObjectArray;this.connect=new XFAObjectArray;this.event=new XFAObjectArray;this.setProperty=new XFAObjectArray}[Gr](){return!0}[tn](e){_setValue(this,e)}[nn](e){setTabIndex(this);if(!this.ui){this.ui=new Ui({});this.ui[br]=this[br];this[zs](this.ui);let e;switch(this.items.children.length){case 0:e=new TextEdit({});this.ui.textEdit=e;break;case 1:e=new CheckButton({});this.ui.checkButton=e;break;case 2:e=new ChoiceList({});this.ui.choiceList=e}this.ui[zs](e)}if(!this.ui||"hidden"===this.presence||"inactive"===this.presence||0===this.h||0===this.w)return HTMLResult.EMPTY;this.caption&&delete this.caption[nr];this[Zr]();const t=this.caption?this.caption[nn](e).html:null,i=this.w,a=this.h;let s=0,r=0;if(this.margin){s=this.margin.leftInset+this.margin.rightInset;r=this.margin.topInset+this.margin.bottomInset}let n=null;if(""===this.w||""===this.h){let t=null,i=null,a=0,g=0;if(this.ui.checkButton)a=g=this.ui.checkButton.size;else{const{w:t,h:i}=layoutNode(this,e);if(null!==t){a=t;g=i}else g=function fonts_getMetrics(e,t=!1){let i=null;if(e){const t=stripQuotes(e.typeface),a=e[br].fontFinder.find(t);i=selectFont(e,a)}if(!i)return{lineHeight:12,lineGap:2,lineNoGap:10};const a=e.size||10,s=i.lineHeight?Math.max(t?0:1.2,i.lineHeight):1.2,r=void 0===i.lineGap?.2:i.lineGap;return{lineHeight:s*a,lineGap:r*a,lineNoGap:Math.max(1,s-r)*a}}(this.font,!0).lineNoGap}n=getBorderDims(this.ui[ur]());a+=n.w;g+=n.h;if(this.caption){const{w:s,h:r,isBroken:n}=this.caption[ur](e);if(n&&this[yr]()[Hr]()){this[Xr]();return HTMLResult.FAILURE}t=s;i=r;switch(this.caption.placement){case"left":case"right":case"inline":t+=a;break;case"top":case"bottom":i+=g}}else{t=a;i=g}if(t&&""===this.w){t+=s;this.w=Math.min(this.maxW<=0?1/0:this.maxW,this.minW+1e>=1&&e<=5});this.appearanceFilter=null;this.certificates=null;this.digestMethods=null;this.encodings=null;this.encryptionMethods=null;this.handler=null;this.lockDocument=null;this.mdp=null;this.reasons=null;this.timeStamp=null}}class Float extends ContentObject{constructor(e){super(vn,"float");this.id=e.id||"";this.name=e.name||"";this.use=e.use||"";this.usehref=e.usehref||""}[gr](){const e=parseFloat(this[ar].trim());this[ar]=isNaN(e)?null:e}[nn](e){return valueToHtml(null!==this[ar]?this[ar].toString():"")}}class template_Font extends XFAObject{constructor(e){super(vn,"font",!0);this.baselineShift=getMeasurement(e.baselineShift);this.fontHorizontalScale=getFloat({data:e.fontHorizontalScale,defaultValue:100,validate:e=>e>=0});this.fontVerticalScale=getFloat({data:e.fontVerticalScale,defaultValue:100,validate:e=>e>=0});this.id=e.id||"";this.kerningMode=getStringOption(e.kerningMode,["none","pair"]);this.letterSpacing=getMeasurement(e.letterSpacing,"0");this.lineThrough=getInteger({data:e.lineThrough,defaultValue:0,validate:e=>1===e||2===e});this.lineThroughPeriod=getStringOption(e.lineThroughPeriod,["all","word"]);this.overline=getInteger({data:e.overline,defaultValue:0,validate:e=>1===e||2===e});this.overlinePeriod=getStringOption(e.overlinePeriod,["all","word"]);this.posture=getStringOption(e.posture,["normal","italic"]);this.size=getMeasurement(e.size,"10pt");this.typeface=e.typeface||"Courier";this.underline=getInteger({data:e.underline,defaultValue:0,validate:e=>1===e||2===e});this.underlinePeriod=getStringOption(e.underlinePeriod,["all","word"]);this.use=e.use||"";this.usehref=e.usehref||"";this.weight=getStringOption(e.weight,["normal","bold"]);this.extras=null;this.fill=null}[$s](e){super[$s](e);this[br].usedTypefaces.add(this.typeface)}[on](){const e=toStyle(this,"fill"),t=e.color;if(t)if("#000000"===t)delete e.color;else if(!t.startsWith("#")){e.background=t;e.backgroundClip="text";e.color="transparent"}this.baselineShift&&(e.verticalAlign=measureToString(this.baselineShift));e.fontKerning="none"===this.kerningMode?"none":"normal";e.letterSpacing=measureToString(this.letterSpacing);if(0!==this.lineThrough){e.textDecoration="line-through";2===this.lineThrough&&(e.textDecorationStyle="double")}if(0!==this.overline){e.textDecoration="overline";2===this.overline&&(e.textDecorationStyle="double")}e.fontStyle=this.posture;e.fontSize=measureToString(.99*this.size);setFontFamily(this,this,this[br].fontFinder,e);if(0!==this.underline){e.textDecoration="underline";2===this.underline&&(e.textDecorationStyle="double")}e.fontWeight=this.weight;return e}}class Format extends XFAObject{constructor(e){super(vn,"format",!0);this.id=e.id||"";this.use=e.use||"";this.usehref=e.usehref||"";this.extras=null;this.picture=null}}class Handler extends StringObject{constructor(e){super(vn,"handler");this.id=e.id||"";this.type=getStringOption(e.type,["optional","required"]);this.use=e.use||"";this.usehref=e.usehref||""}}class Hyphenation extends XFAObject{constructor(e){super(vn,"hyphenation");this.excludeAllCaps=getInteger({data:e.excludeAllCaps,defaultValue:0,validate:e=>1===e});this.excludeInitialCap=getInteger({data:e.excludeInitialCap,defaultValue:0,validate:e=>1===e});this.hyphenate=getInteger({data:e.hyphenate,defaultValue:0,validate:e=>1===e});this.id=e.id||"";this.pushCharacterCount=getInteger({data:e.pushCharacterCount,defaultValue:3,validate:e=>e>=0});this.remainCharacterCount=getInteger({data:e.remainCharacterCount,defaultValue:3,validate:e=>e>=0});this.use=e.use||"";this.usehref=e.usehref||"";this.wordCharacterCount=getInteger({data:e.wordCharacterCount,defaultValue:7,validate:e=>e>=0})}}class Image extends StringObject{constructor(e){super(vn,"image");this.aspect=getStringOption(e.aspect,["fit","actual","height","none","width"]);this.contentType=e.contentType||"";this.href=e.href||"";this.id=e.id||"";this.name=e.name||"";this.transferEncoding=getStringOption(e.transferEncoding,["base64","none","package"]);this.use=e.use||"";this.usehref=e.usehref||""}[nn](){if(this.contentType&&!qn.has(this.contentType.toLowerCase()))return HTMLResult.EMPTY;let e=this[br].images&&this[br].images.get(this.href);if(!e&&(this.href||!this[ar]))return HTMLResult.EMPTY;e||"base64"!==this.transferEncoding||(e=function fromBase64Util(e){return Uint8Array.fromBase64?Uint8Array.fromBase64(e):stringToBytes(atob(e))}(this[ar]));if(!e)return HTMLResult.EMPTY;if(!this.contentType){for(const[t,i]of On)if(e.length>t.length&&t.every(((t,i)=>t===e[i]))){this.contentType=i;break}if(!this.contentType)return HTMLResult.EMPTY}const t=new Blob([e],{type:this.contentType});let i;switch(this.aspect){case"fit":case"actual":break;case"height":i={height:"100%",objectFit:"fill"};break;case"none":i={width:"100%",height:"100%",objectFit:"fill"};break;case"width":i={width:"100%",objectFit:"fill"}}const a=this[wr]();return HTMLResult.success({name:"img",attributes:{class:["xfaImage"],style:i,src:URL.createObjectURL(t),alt:a?ariaLabel(a[wr]()):null}})}}class ImageEdit extends XFAObject{constructor(e){super(vn,"imageEdit",!0);this.data=getStringOption(e.data,["link","embed"]);this.id=e.id||"";this.use=e.use||"";this.usehref=e.usehref||"";this.border=null;this.extras=null;this.margin=null}[nn](e){return"embed"===this.data?HTMLResult.success({name:"div",children:[],attributes:{}}):HTMLResult.EMPTY}}class Integer extends ContentObject{constructor(e){super(vn,"integer");this.id=e.id||"";this.name=e.name||"";this.use=e.use||"";this.usehref=e.usehref||""}[gr](){const e=parseInt(this[ar].trim(),10);this[ar]=isNaN(e)?null:e}[nn](e){return valueToHtml(null!==this[ar]?this[ar].toString():"")}}class Issuers extends XFAObject{constructor(e){super(vn,"issuers",!0);this.id=e.id||"";this.type=getStringOption(e.type,["optional","required"]);this.use=e.use||"";this.usehref=e.usehref||"";this.certificate=new XFAObjectArray}}class Items extends XFAObject{constructor(e){super(vn,"items",!0);this.id=e.id||"";this.name=e.name||"";this.presence=getStringOption(e.presence,["visible","hidden","inactive","invisible"]);this.ref=e.ref||"";this.save=getInteger({data:e.save,defaultValue:0,validate:e=>1===e});this.use=e.use||"";this.usehref=e.usehref||"";this.boolean=new XFAObjectArray;this.date=new XFAObjectArray;this.dateTime=new XFAObjectArray;this.decimal=new XFAObjectArray;this.exData=new XFAObjectArray;this.float=new XFAObjectArray;this.image=new XFAObjectArray;this.integer=new XFAObjectArray;this.text=new XFAObjectArray;this.time=new XFAObjectArray}[nn](){const e=[];for(const t of this[fr]())e.push(t[sn]());return HTMLResult.success(e)}}class Keep extends XFAObject{constructor(e){super(vn,"keep",!0);this.id=e.id||"";const t=["none","contentArea","pageArea"];this.intact=getStringOption(e.intact,t);this.next=getStringOption(e.next,t);this.previous=getStringOption(e.previous,t);this.use=e.use||"";this.usehref=e.usehref||"";this.extras=null}}class KeyUsage extends XFAObject{constructor(e){super(vn,"keyUsage");const t=["","yes","no"];this.crlSign=getStringOption(e.crlSign,t);this.dataEncipherment=getStringOption(e.dataEncipherment,t);this.decipherOnly=getStringOption(e.decipherOnly,t);this.digitalSignature=getStringOption(e.digitalSignature,t);this.encipherOnly=getStringOption(e.encipherOnly,t);this.id=e.id||"";this.keyAgreement=getStringOption(e.keyAgreement,t);this.keyCertSign=getStringOption(e.keyCertSign,t);this.keyEncipherment=getStringOption(e.keyEncipherment,t);this.nonRepudiation=getStringOption(e.nonRepudiation,t);this.type=getStringOption(e.type,["optional","required"]);this.use=e.use||"";this.usehref=e.usehref||""}}class Line extends XFAObject{constructor(e){super(vn,"line",!0);this.hand=getStringOption(e.hand,["even","left","right"]);this.id=e.id||"";this.slope=getStringOption(e.slope,["\\","/"]);this.use=e.use||"";this.usehref=e.usehref||"";this.edge=null}[nn](){const e=this[wr]()[wr](),t=this.edge||new Edge({}),i=t[on](),a=Object.create(null),s="visible"===t.presence?t.thickness:0;a.strokeWidth=measureToString(s);a.stroke=i.color;let r,n,g,o,c="100%",C="100%";if(e.w<=s){[r,n,g,o]=["50%",0,"50%","100%"];c=a.strokeWidth}else if(e.h<=s){[r,n,g,o]=[0,"50%","100%","50%"];C=a.strokeWidth}else"\\"===this.slope?[r,n,g,o]=[0,0,"100%","100%"]:[r,n,g,o]=[0,"100%","100%",0];const h={name:"svg",children:[{name:"line",attributes:{xmlns:Kn,x1:r,y1:n,x2:g,y2:o,style:a}}],attributes:{xmlns:Kn,width:c,height:C,style:{overflow:"visible"}}};if(hasMargin(e))return HTMLResult.success({name:"div",attributes:{style:{display:"inline",width:"100%",height:"100%"}},children:[h]});h.attributes.style.position="absolute";return HTMLResult.success(h)}}class Linear extends XFAObject{constructor(e){super(vn,"linear",!0);this.id=e.id||"";this.type=getStringOption(e.type,["toRight","toBottom","toLeft","toTop"]);this.use=e.use||"";this.usehref=e.usehref||"";this.color=null;this.extras=null}[on](e){e=e?e[on]():"#FFFFFF";return`linear-gradient(${this.type.replace(/([RBLT])/," $1").toLowerCase()}, ${e}, ${this.color?this.color[on]():"#000000"})`}}class LockDocument extends ContentObject{constructor(e){super(vn,"lockDocument");this.id=e.id||"";this.type=getStringOption(e.type,["optional","required"]);this.use=e.use||"";this.usehref=e.usehref||""}[gr](){this[ar]=getStringOption(this[ar],["auto","0","1"])}}class Manifest extends XFAObject{constructor(e){super(vn,"manifest",!0);this.action=getStringOption(e.action,["include","all","exclude"]);this.id=e.id||"";this.name=e.name||"";this.use=e.use||"";this.usehref=e.usehref||"";this.extras=null;this.ref=new XFAObjectArray}}class Margin extends XFAObject{constructor(e){super(vn,"margin",!0);this.bottomInset=getMeasurement(e.bottomInset,"0");this.id=e.id||"";this.leftInset=getMeasurement(e.leftInset,"0");this.rightInset=getMeasurement(e.rightInset,"0");this.topInset=getMeasurement(e.topInset,"0");this.use=e.use||"";this.usehref=e.usehref||"";this.extras=null}[on](){return{margin:measureToString(this.topInset)+" "+measureToString(this.rightInset)+" "+measureToString(this.bottomInset)+" "+measureToString(this.leftInset)}}}class Mdp extends XFAObject{constructor(e){super(vn,"mdp");this.id=e.id||"";this.permissions=getInteger({data:e.permissions,defaultValue:2,validate:e=>1===e||3===e});this.signatureType=getStringOption(e.signatureType,["filler","author"]);this.use=e.use||"";this.usehref=e.usehref||""}}class Medium extends XFAObject{constructor(e){super(vn,"medium");this.id=e.id||"";this.imagingBBox=function getBBox(e){const t=-1;if(!e)return{x:t,y:t,width:t,height:t};const i=e.trim().split(/\s*,\s*/).map((e=>getMeasurement(e,"-1")));if(i.length<4||i[2]<0||i[3]<0)return{x:t,y:t,width:t,height:t};const[a,s,r,n]=i;return{x:a,y:s,width:r,height:n}}(e.imagingBBox);this.long=getMeasurement(e.long);this.orientation=getStringOption(e.orientation,["portrait","landscape"]);this.short=getMeasurement(e.short);this.stock=e.stock||"";this.trayIn=getStringOption(e.trayIn,["auto","delegate","pageFront"]);this.trayOut=getStringOption(e.trayOut,["auto","delegate"]);this.use=e.use||"";this.usehref=e.usehref||""}}class Message extends XFAObject{constructor(e){super(vn,"message",!0);this.id=e.id||"";this.use=e.use||"";this.usehref=e.usehref||"";this.text=new XFAObjectArray}}class NumericEdit extends XFAObject{constructor(e){super(vn,"numericEdit",!0);this.hScrollPolicy=getStringOption(e.hScrollPolicy,["auto","off","on"]);this.id=e.id||"";this.use=e.use||"";this.usehref=e.usehref||"";this.border=null;this.comb=null;this.extras=null;this.margin=null}[nn](e){const t=toStyle(this,"border","font","margin"),i=this[wr]()[wr](),a={name:"input",attributes:{type:"text",fieldId:i[In],dataId:i[sr]?.[In]||i[In],class:["xfaTextfield"],style:t,"aria-label":ariaLabel(i),"aria-required":!1}};if(isRequired(i)){a.attributes["aria-required"]=!0;a.attributes.required=!0}return HTMLResult.success({name:"label",attributes:{class:["xfaLabel"]},children:[a]})}}class Occur extends XFAObject{constructor(e){super(vn,"occur",!0);this.id=e.id||"";this.initial=""!==e.initial?getInteger({data:e.initial,defaultValue:"",validate:e=>!0}):"";this.max=""!==e.max?getInteger({data:e.max,defaultValue:1,validate:e=>!0}):"";this.min=""!==e.min?getInteger({data:e.min,defaultValue:1,validate:e=>!0}):"";this.use=e.use||"";this.usehref=e.usehref||"";this.extras=null}[$s](){const e=this[wr](),t=this.min;""===this.min&&(this.min=e instanceof PageArea||e instanceof PageSet?0:1);""===this.max&&(this.max=""===t?e instanceof PageArea||e instanceof PageSet?-1:1:this.min);-1!==this.max&&this.max!0});this.name=e.name||"";this.numbered=getInteger({data:e.numbered,defaultValue:1,validate:e=>!0});this.oddOrEven=getStringOption(e.oddOrEven,["any","even","odd"]);this.pagePosition=getStringOption(e.pagePosition,["any","first","last","only","rest"]);this.relevant=getRelevant(e.relevant);this.use=e.use||"";this.usehref=e.usehref||"";this.desc=null;this.extras=null;this.medium=null;this.occur=null;this.area=new XFAObjectArray;this.contentArea=new XFAObjectArray;this.draw=new XFAObjectArray;this.exclGroup=new XFAObjectArray;this.field=new XFAObjectArray;this.subform=new XFAObjectArray}[Yr](){if(!this[nr]){this[nr]={numberOfUse:0};return!0}return!this.occur||-1===this.occur.max||this[nr].numberOfUsee.oddOrEven===t&&e.pagePosition===i));if(a)return a;a=this.pageArea.children.find((e=>"any"===e.oddOrEven&&e.pagePosition===i));if(a)return a;a=this.pageArea.children.find((e=>"any"===e.oddOrEven&&"any"===e.pagePosition));return a||this.pageArea.children[0]}}class Para extends XFAObject{constructor(e){super(vn,"para",!0);this.hAlign=getStringOption(e.hAlign,["left","center","justify","justifyAll","radix","right"]);this.id=e.id||"";this.lineHeight=e.lineHeight?getMeasurement(e.lineHeight,"0pt"):"";this.marginLeft=e.marginLeft?getMeasurement(e.marginLeft,"0pt"):"";this.marginRight=e.marginRight?getMeasurement(e.marginRight,"0pt"):"";this.orphans=getInteger({data:e.orphans,defaultValue:0,validate:e=>e>=0});this.preserve=e.preserve||"";this.radixOffset=e.radixOffset?getMeasurement(e.radixOffset,"0pt"):"";this.spaceAbove=e.spaceAbove?getMeasurement(e.spaceAbove,"0pt"):"";this.spaceBelow=e.spaceBelow?getMeasurement(e.spaceBelow,"0pt"):"";this.tabDefault=e.tabDefault?getMeasurement(this.tabDefault):"";this.tabStops=(e.tabStops||"").trim().split(/\s+/).map(((e,t)=>t%2==1?getMeasurement(e):e));this.textIndent=e.textIndent?getMeasurement(e.textIndent,"0pt"):"";this.use=e.use||"";this.usehref=e.usehref||"";this.vAlign=getStringOption(e.vAlign,["top","bottom","middle"]);this.widows=getInteger({data:e.widows,defaultValue:0,validate:e=>e>=0});this.hyphenation=null}[on](){const e=toStyle(this,"hAlign");""!==this.marginLeft&&(e.paddingLeft=measureToString(this.marginLeft));""!==this.marginRight&&(e.paddingight=measureToString(this.marginRight));""!==this.spaceAbove&&(e.paddingTop=measureToString(this.spaceAbove));""!==this.spaceBelow&&(e.paddingBottom=measureToString(this.spaceBelow));if(""!==this.textIndent){e.textIndent=measureToString(this.textIndent);fixTextIndent(e)}this.lineHeight>0&&(e.lineHeight=measureToString(this.lineHeight));""!==this.tabDefault&&(e.tabSize=measureToString(this.tabDefault));this.tabStops.length;this.hyphenatation&&Object.assign(e,this.hyphenatation[on]());return e}}class PasswordEdit extends XFAObject{constructor(e){super(vn,"passwordEdit",!0);this.hScrollPolicy=getStringOption(e.hScrollPolicy,["auto","off","on"]);this.id=e.id||"";this.passwordChar=e.passwordChar||"*";this.use=e.use||"";this.usehref=e.usehref||"";this.border=null;this.extras=null;this.margin=null}}class template_Pattern extends XFAObject{constructor(e){super(vn,"pattern",!0);this.id=e.id||"";this.type=getStringOption(e.type,["crossHatch","crossDiagonal","diagonalLeft","diagonalRight","horizontal","vertical"]);this.use=e.use||"";this.usehref=e.usehref||"";this.color=null;this.extras=null}[on](e){e=e?e[on]():"#FFFFFF";const t=this.color?this.color[on]():"#000000",i="repeating-linear-gradient",a=`${e},${e} 5px,${t} 5px,${t} 10px`;switch(this.type){case"crossHatch":return`${i}(to top,${a}) ${i}(to right,${a})`;case"crossDiagonal":return`${i}(45deg,${a}) ${i}(-45deg,${a})`;case"diagonalLeft":return`${i}(45deg,${a})`;case"diagonalRight":return`${i}(-45deg,${a})`;case"horizontal":return`${i}(to top,${a})`;case"vertical":return`${i}(to right,${a})`}return""}}class Picture extends StringObject{constructor(e){super(vn,"picture");this.id=e.id||"";this.use=e.use||"";this.usehref=e.usehref||""}}class Proto extends XFAObject{constructor(e){super(vn,"proto",!0);this.appearanceFilter=new XFAObjectArray;this.arc=new XFAObjectArray;this.area=new XFAObjectArray;this.assist=new XFAObjectArray;this.barcode=new XFAObjectArray;this.bindItems=new XFAObjectArray;this.bookend=new XFAObjectArray;this.boolean=new XFAObjectArray;this.border=new XFAObjectArray;this.break=new XFAObjectArray;this.breakAfter=new XFAObjectArray;this.breakBefore=new XFAObjectArray;this.button=new XFAObjectArray;this.calculate=new XFAObjectArray;this.caption=new XFAObjectArray;this.certificate=new XFAObjectArray;this.certificates=new XFAObjectArray;this.checkButton=new XFAObjectArray;this.choiceList=new XFAObjectArray;this.color=new XFAObjectArray;this.comb=new XFAObjectArray;this.connect=new XFAObjectArray;this.contentArea=new XFAObjectArray;this.corner=new XFAObjectArray;this.date=new XFAObjectArray;this.dateTime=new XFAObjectArray;this.dateTimeEdit=new XFAObjectArray;this.decimal=new XFAObjectArray;this.defaultUi=new XFAObjectArray;this.desc=new XFAObjectArray;this.digestMethod=new XFAObjectArray;this.digestMethods=new XFAObjectArray;this.draw=new XFAObjectArray;this.edge=new XFAObjectArray;this.encoding=new XFAObjectArray;this.encodings=new XFAObjectArray;this.encrypt=new XFAObjectArray;this.encryptData=new XFAObjectArray;this.encryption=new XFAObjectArray;this.encryptionMethod=new XFAObjectArray;this.encryptionMethods=new XFAObjectArray;this.event=new XFAObjectArray;this.exData=new XFAObjectArray;this.exObject=new XFAObjectArray;this.exclGroup=new XFAObjectArray;this.execute=new XFAObjectArray;this.extras=new XFAObjectArray;this.field=new XFAObjectArray;this.fill=new XFAObjectArray;this.filter=new XFAObjectArray;this.float=new XFAObjectArray;this.font=new XFAObjectArray;this.format=new XFAObjectArray;this.handler=new XFAObjectArray;this.hyphenation=new XFAObjectArray;this.image=new XFAObjectArray;this.imageEdit=new XFAObjectArray;this.integer=new XFAObjectArray;this.issuers=new XFAObjectArray;this.items=new XFAObjectArray;this.keep=new XFAObjectArray;this.keyUsage=new XFAObjectArray;this.line=new XFAObjectArray;this.linear=new XFAObjectArray;this.lockDocument=new XFAObjectArray;this.manifest=new XFAObjectArray;this.margin=new XFAObjectArray;this.mdp=new XFAObjectArray;this.medium=new XFAObjectArray;this.message=new XFAObjectArray;this.numericEdit=new XFAObjectArray;this.occur=new XFAObjectArray;this.oid=new XFAObjectArray;this.oids=new XFAObjectArray;this.overflow=new XFAObjectArray;this.pageArea=new XFAObjectArray;this.pageSet=new XFAObjectArray;this.para=new XFAObjectArray;this.passwordEdit=new XFAObjectArray;this.pattern=new XFAObjectArray;this.picture=new XFAObjectArray;this.radial=new XFAObjectArray;this.reason=new XFAObjectArray;this.reasons=new XFAObjectArray;this.rectangle=new XFAObjectArray;this.ref=new XFAObjectArray;this.script=new XFAObjectArray;this.setProperty=new XFAObjectArray;this.signData=new XFAObjectArray;this.signature=new XFAObjectArray;this.signing=new XFAObjectArray;this.solid=new XFAObjectArray;this.speak=new XFAObjectArray;this.stipple=new XFAObjectArray;this.subform=new XFAObjectArray;this.subformSet=new XFAObjectArray;this.subjectDN=new XFAObjectArray;this.subjectDNs=new XFAObjectArray;this.submit=new XFAObjectArray;this.text=new XFAObjectArray;this.textEdit=new XFAObjectArray;this.time=new XFAObjectArray;this.timeStamp=new XFAObjectArray;this.toolTip=new XFAObjectArray;this.traversal=new XFAObjectArray;this.traverse=new XFAObjectArray;this.ui=new XFAObjectArray;this.validate=new XFAObjectArray;this.value=new XFAObjectArray;this.variables=new XFAObjectArray}}class Radial extends XFAObject{constructor(e){super(vn,"radial",!0);this.id=e.id||"";this.type=getStringOption(e.type,["toEdge","toCenter"]);this.use=e.use||"";this.usehref=e.usehref||"";this.color=null;this.extras=null}[on](e){e=e?e[on]():"#FFFFFF";const t=this.color?this.color[on]():"#000000";return`radial-gradient(circle at center, ${"toEdge"===this.type?`${e},${t}`:`${t},${e}`})`}}class Reason extends StringObject{constructor(e){super(vn,"reason");this.id=e.id||"";this.name=e.name||"";this.use=e.use||"";this.usehref=e.usehref||""}}class Reasons extends XFAObject{constructor(e){super(vn,"reasons",!0);this.id=e.id||"";this.type=getStringOption(e.type,["optional","required"]);this.use=e.use||"";this.usehref=e.usehref||"";this.reason=new XFAObjectArray}}class Rectangle extends XFAObject{constructor(e){super(vn,"rectangle",!0);this.hand=getStringOption(e.hand,["even","left","right"]);this.id=e.id||"";this.use=e.use||"";this.usehref=e.usehref||"";this.corner=new XFAObjectArray(4);this.edge=new XFAObjectArray(4);this.fill=null}[nn](){const e=this.edge.children.length?this.edge.children[0]:new Edge({}),t=e[on](),i=Object.create(null);"visible"===this.fill?.presence?Object.assign(i,this.fill[on]()):i.fill="transparent";i.strokeWidth=measureToString("visible"===e.presence?e.thickness:0);i.stroke=t.color;const a=(this.corner.children.length?this.corner.children[0]:new Corner({}))[on](),s={name:"svg",children:[{name:"rect",attributes:{xmlns:Kn,width:"100%",height:"100%",x:0,y:0,rx:a.radius,ry:a.radius,style:i}}],attributes:{xmlns:Kn,style:{overflow:"visible"},width:"100%",height:"100%"}};if(hasMargin(this[wr]()[wr]()))return HTMLResult.success({name:"div",attributes:{style:{display:"inline",width:"100%",height:"100%"}},children:[s]});s.attributes.style.position="absolute";return HTMLResult.success(s)}}class RefElement extends StringObject{constructor(e){super(vn,"ref");this.id=e.id||"";this.use=e.use||"";this.usehref=e.usehref||""}}class Script extends StringObject{constructor(e){super(vn,"script");this.binding=e.binding||"";this.contentType=e.contentType||"";this.id=e.id||"";this.name=e.name||"";this.runAt=getStringOption(e.runAt,["client","both","server"]);this.use=e.use||"";this.usehref=e.usehref||""}}class SetProperty extends XFAObject{constructor(e){super(vn,"setProperty");this.connection=e.connection||"";this.ref=e.ref||"";this.target=e.target||""}}class SignData extends XFAObject{constructor(e){super(vn,"signData",!0);this.id=e.id||"";this.operation=getStringOption(e.operation,["sign","clear","verify"]);this.ref=e.ref||"";this.target=e.target||"";this.use=e.use||"";this.usehref=e.usehref||"";this.filter=null;this.manifest=null}}class Signature extends XFAObject{constructor(e){super(vn,"signature",!0);this.id=e.id||"";this.type=getStringOption(e.type,["PDF1.3","PDF1.6"]);this.use=e.use||"";this.usehref=e.usehref||"";this.border=null;this.extras=null;this.filter=null;this.manifest=null;this.margin=null}}class Signing extends XFAObject{constructor(e){super(vn,"signing",!0);this.id=e.id||"";this.type=getStringOption(e.type,["optional","required"]);this.use=e.use||"";this.usehref=e.usehref||"";this.certificate=new XFAObjectArray}}class Solid extends XFAObject{constructor(e){super(vn,"solid",!0);this.id=e.id||"";this.use=e.use||"";this.usehref=e.usehref||"";this.extras=null}[on](e){return e?e[on]():"#FFFFFF"}}class Speak extends StringObject{constructor(e){super(vn,"speak");this.disable=getInteger({data:e.disable,defaultValue:0,validate:e=>1===e});this.id=e.id||"";this.priority=getStringOption(e.priority,["custom","caption","name","toolTip"]);this.rid=e.rid||"";this.use=e.use||"";this.usehref=e.usehref||""}}class Stipple extends XFAObject{constructor(e){super(vn,"stipple",!0);this.id=e.id||"";this.rate=getInteger({data:e.rate,defaultValue:50,validate:e=>e>=0&&e<=100});this.use=e.use||"";this.usehref=e.usehref||"";this.color=null;this.extras=null}[on](e){const t=this.rate/100;return Util.makeHexColor(Math.round(e.value.r*(1-t)+this.value.r*t),Math.round(e.value.g*(1-t)+this.value.g*t),Math.round(e.value.b*(1-t)+this.value.b*t))}}class Subform extends XFAObject{constructor(e){super(vn,"subform",!0);this.access=getStringOption(e.access,["open","nonInteractive","protected","readOnly"]);this.allowMacro=getInteger({data:e.allowMacro,defaultValue:0,validate:e=>1===e});this.anchorType=getStringOption(e.anchorType,["topLeft","bottomCenter","bottomLeft","bottomRight","middleCenter","middleLeft","middleRight","topCenter","topRight"]);this.colSpan=getInteger({data:e.colSpan,defaultValue:1,validate:e=>e>=1||-1===e});this.columnWidths=(e.columnWidths||"").trim().split(/\s+/).map((e=>"-1"===e?-1:getMeasurement(e)));this.h=e.h?getMeasurement(e.h):"";this.hAlign=getStringOption(e.hAlign,["left","center","justify","justifyAll","radix","right"]);this.id=e.id||"";this.layout=getStringOption(e.layout,["position","lr-tb","rl-row","rl-tb","row","table","tb"]);this.locale=e.locale||"";this.maxH=getMeasurement(e.maxH,"0pt");this.maxW=getMeasurement(e.maxW,"0pt");this.mergeMode=getStringOption(e.mergeMode,["consumeData","matchTemplate"]);this.minH=getMeasurement(e.minH,"0pt");this.minW=getMeasurement(e.minW,"0pt");this.name=e.name||"";this.presence=getStringOption(e.presence,["visible","hidden","inactive","invisible"]);this.relevant=getRelevant(e.relevant);this.restoreState=getStringOption(e.restoreState,["manual","auto"]);this.scope=getStringOption(e.scope,["name","none"]);this.use=e.use||"";this.usehref=e.usehref||"";this.w=e.w?getMeasurement(e.w):"";this.x=getMeasurement(e.x,"0pt");this.y=getMeasurement(e.y,"0pt");this.assist=null;this.bind=null;this.bookend=null;this.border=null;this.break=null;this.calculate=null;this.desc=null;this.extras=null;this.keep=null;this.margin=null;this.occur=null;this.overflow=null;this.pageSet=null;this.para=null;this.traversal=null;this.validate=null;this.variables=null;this.area=new XFAObjectArray;this.breakAfter=new XFAObjectArray;this.breakBefore=new XFAObjectArray;this.connect=new XFAObjectArray;this.draw=new XFAObjectArray;this.event=new XFAObjectArray;this.exObject=new XFAObjectArray;this.exclGroup=new XFAObjectArray;this.field=new XFAObjectArray;this.proto=new XFAObjectArray;this.setProperty=new XFAObjectArray;this.subform=new XFAObjectArray;this.subformSet=new XFAObjectArray}[yr](){const e=this[wr]();return e instanceof SubformSet?e[yr]():e}[Gr](){return!0}[Hr](){return this.layout.endsWith("-tb")&&0===this[nr].attempt&&this[nr].numberInLine>0||this[wr]()[Hr]()}*[pr](){yield*getContainedChildren(this)}[or](){return flushHTML(this)}[Vs](e,t){addHTML(this,e,t)}[Cr](){return getAvailableSpace(this)}[Lr](){const e=this[yr]();if(!e[Lr]())return!1;if(void 0!==this[nr]._isSplittable)return this[nr]._isSplittable;if("position"===this.layout||this.layout.includes("row")){this[nr]._isSplittable=!1;return!1}if(this.keep&&"none"!==this.keep.intact){this[nr]._isSplittable=!1;return!1}if(e.layout?.endsWith("-tb")&&0!==e[nr].numberInLine)return!1;this[nr]._isSplittable=!0;return!0}[nn](e){setTabIndex(this);if(this.break){if("auto"!==this.break.after||""!==this.break.afterTarget){const e=new BreakAfter({targetType:this.break.after,target:this.break.afterTarget,startNew:this.break.startNew.toString()});e[br]=this[br];this[zs](e);this.breakAfter.push(e)}if("auto"!==this.break.before||""!==this.break.beforeTarget){const e=new BreakBefore({targetType:this.break.before,target:this.break.beforeTarget,startNew:this.break.startNew.toString()});e[br]=this[br];this[zs](e);this.breakBefore.push(e)}if(""!==this.break.overflowTarget){const e=new Overflow({target:this.break.overflowTarget,leader:this.break.overflowLeader,trailer:this.break.overflowTrailer});e[br]=this[br];this[zs](e);this.overflow.push(e)}this[Vr](this.break);this.break=null}if("hidden"===this.presence||"inactive"===this.presence)return HTMLResult.EMPTY;(this.breakBefore.children.length>1||this.breakAfter.children.length>1)&&warn("XFA - Several breakBefore or breakAfter in subforms: please file a bug.");if(this.breakBefore.children.length>=1){const e=this.breakBefore.children[0];if(handleBreak(e))return HTMLResult.breakNode(e)}if(this[nr]?.afterBreakAfter)return HTMLResult.EMPTY;fixDimensions(this);const t=[],i={id:this[In],class:[]};setAccess(this,i.class);this[nr]||(this[nr]=Object.create(null));Object.assign(this[nr],{children:t,line:null,attributes:i,attempt:0,numberInLine:0,availableSpace:{width:Math.min(this.w||1/0,e.width),height:Math.min(this.h||1/0,e.height)},width:0,height:0,prevHeight:0,currentWidth:0});const a=this[Dr](),s=a[nr].noLayoutFailure,r=this[Lr]();r||setFirstUnsplittable(this);if(!checkDimensions(this,e))return HTMLResult.FAILURE;const n=new Set(["area","draw","exclGroup","field","subform","subformSet"]);if(this.layout.includes("row")){const e=this[yr]().columnWidths;if(Array.isArray(e)&&e.length>0){this[nr].columnWidths=e;this[nr].currentColumn=0}}const g=toStyle(this,"anchorType","dimensions","position","presence","border","margin","hAlign"),o=["xfaSubform"],c=layoutClass(this);c&&o.push(c);i.style=g;i.class=o;this.name&&(i.xfaName=this.name);if(this.overflow){const t=this.overflow[ur]();if(t.addLeader){t.addLeader=!1;handleOverflow(this,t.leader,e)}}this[Zr]();const C="lr-tb"===this.layout||"rl-tb"===this.layout,h=C?2:1;for(;this[nr].attempt=1){const e=this.breakAfter.children[0];if(handleBreak(e)){this[nr].afterBreakAfter=p;return HTMLResult.breakNode(e)}}delete this[nr];return p}}class SubformSet extends XFAObject{constructor(e){super(vn,"subformSet",!0);this.id=e.id||"";this.name=e.name||"";this.relation=getStringOption(e.relation,["ordered","choice","unordered"]);this.relevant=getRelevant(e.relevant);this.use=e.use||"";this.usehref=e.usehref||"";this.bookend=null;this.break=null;this.desc=null;this.extras=null;this.occur=null;this.overflow=null;this.breakAfter=new XFAObjectArray;this.breakBefore=new XFAObjectArray;this.subform=new XFAObjectArray;this.subformSet=new XFAObjectArray}*[pr](){yield*getContainedChildren(this)}[yr](){let e=this[wr]();for(;!(e instanceof Subform);)e=e[wr]();return e}[Gr](){return!0}}class SubjectDN extends ContentObject{constructor(e){super(vn,"subjectDN");this.delimiter=e.delimiter||",";this.id=e.id||"";this.name=e.name||"";this.use=e.use||"";this.usehref=e.usehref||""}[gr](){this[ar]=new Map(this[ar].split(this.delimiter).map((e=>{(e=e.split("=",2))[0]=e[0].trim();return e})))}}class SubjectDNs extends XFAObject{constructor(e){super(vn,"subjectDNs",!0);this.id=e.id||"";this.type=getStringOption(e.type,["optional","required"]);this.use=e.use||"";this.usehref=e.usehref||"";this.subjectDN=new XFAObjectArray}}class Submit extends XFAObject{constructor(e){super(vn,"submit",!0);this.embedPDF=getInteger({data:e.embedPDF,defaultValue:0,validate:e=>1===e});this.format=getStringOption(e.format,["xdp","formdata","pdf","urlencoded","xfd","xml"]);this.id=e.id||"";this.target=e.target||"";this.textEncoding=getKeyword({data:e.textEncoding?e.textEncoding.toLowerCase():"",defaultValue:"",validate:e=>["utf-8","big-five","fontspecific","gbk","gb-18030","gb-2312","ksc-5601","none","shift-jis","ucs-2","utf-16"].includes(e)||e.match(/iso-8859-\d{2}/)});this.use=e.use||"";this.usehref=e.usehref||"";this.xdpContent=e.xdpContent||"";this.encrypt=null;this.encryptData=new XFAObjectArray;this.signData=new XFAObjectArray}}class Template extends XFAObject{constructor(e){super(vn,"template",!0);this.baseProfile=getStringOption(e.baseProfile,["full","interactiveForms"]);this.extras=null;this.subform=new XFAObjectArray}[gr](){0===this.subform.children.length&&warn("XFA - No subforms in template node.");this.subform.children.length>=2&&warn("XFA - Several subforms in template node: please file a bug.");this[an]=5e3}[Lr](){return!0}[$r](e,t){return e.startsWith("#")?[this[Sr].get(e.slice(1))]:searchNode(this,t,e,!0,!0)}*[rn](){if(!this.subform.children.length)return HTMLResult.success({name:"div",children:[]});this[nr]={overflowNode:null,firstUnsplittable:null,currentContentArea:null,currentPageArea:null,noLayoutFailure:!1,pageNumber:1,pagePosition:"first",oddOrEven:"odd",blankOrNotBlank:"nonBlank",paraStack:[]};const e=this.subform.children[0];e.pageSet[Ar]();const t=e.pageSet.pageArea.children,i={name:"div",children:[]};let a=null,s=null,r=null;if(e.breakBefore.children.length>=1){s=e.breakBefore.children[0];r=s.target}else if(e.subform.children.length>=1&&e.subform.children[0].breakBefore.children.length>=1){s=e.subform.children[0].breakBefore.children[0];r=s.target}else if(e.break?.beforeTarget){s=e.break;r=s.beforeTarget}else if(e.subform.children.length>=1&&e.subform.children[0].break?.beforeTarget){s=e.subform.children[0].break;r=s.beforeTarget}if(s){const e=this[$r](r,s[wr]());if(e instanceof PageArea){a=e;s[nr]={}}}a||(a=t[0]);a[nr]={numberOfUse:1};const n=a[wr]();n[nr]={numberOfUse:1,pageIndex:n.pageArea.children.indexOf(a),pageSetIndex:0};let g,o=null,c=null,C=!0,h=0,l=0;for(;;){if(C)h=0;else{i.children.pop();if(3==++h){warn("XFA - Something goes wrong: please file a bug.");return i}}g=null;this[nr].currentPageArea=a;const t=a[nn]().html;i.children.push(t);if(o){this[nr].noLayoutFailure=!0;t.children.push(o[nn](a[nr].space).html);o=null}if(c){this[nr].noLayoutFailure=!0;t.children.push(c[nn](a[nr].space).html);c=null}const s=a.contentArea.children,r=t.children.filter((e=>e.attributes.class.includes("xfaContentarea")));C=!1;this[nr].firstUnsplittable=null;this[nr].noLayoutFailure=!1;const flush=t=>{const i=e[or]();if(i){C||=i.children?.length>0;r[t].children.push(i)}};for(let t=l,a=s.length;t0;r[t].children.push(h.html)}else!C&&i.children.length>1&&i.children.pop();return i}if(h.isBreak()){const e=h.breakNode;flush(t);if("auto"===e.targetType)continue;if(e.leader){o=this[$r](e.leader,e[wr]());o=o?o[0]:null}if(e.trailer){c=this[$r](e.trailer,e[wr]());c=c?c[0]:null}if("pageArea"===e.targetType){g=e[nr].target;t=1/0}else if(e[nr].target){g=e[nr].target;l=e[nr].index+1;t=1/0}else t=e[nr].index}else if(this[nr].overflowNode){const e=this[nr].overflowNode;this[nr].overflowNode=null;const i=e[ur](),a=i.target;i.addLeader=null!==i.leader;i.addTrailer=null!==i.trailer;flush(t);const r=t;t=1/0;if(a instanceof PageArea)g=a;else if(a instanceof ContentArea){const e=s.indexOf(a);if(-1!==e)e>r?t=e-1:l=e;else{g=a[wr]();l=g.contentArea.children.indexOf(a)}}}else flush(t)}this[nr].pageNumber+=1;g&&(g[Yr]()?g[nr].numberOfUse+=1:g=null);a=g||a[mr]();yield null}}}class Text extends ContentObject{constructor(e){super(vn,"text");this.id=e.id||"";this.maxChars=getInteger({data:e.maxChars,defaultValue:0,validate:e=>e>=0});this.name=e.name||"";this.rid=e.rid||"";this.use=e.use||"";this.usehref=e.usehref||""}[Zs](){return!0}[Or](e){if(e[Kr]===Cn.xhtml.id){this[ar]=e;return!0}warn(`XFA - Invalid content in Text: ${e[Tr]}.`);return!1}[Wr](e){this[ar]instanceof XFAObject||super[Wr](e)}[gr](){"string"==typeof this[ar]&&(this[ar]=this[ar].replaceAll("\r\n","\n"))}[ur](){return"string"==typeof this[ar]?this[ar].split(/[\u2029\u2028\n]/).reduce(((e,t)=>{t&&e.push(t);return e}),[]).join("\n"):this[ar][sn]()}[nn](e){if("string"==typeof this[ar]){const e=valueToHtml(this[ar]).html;if(this[ar].includes("\u2029")){e.name="div";e.children=[];this[ar].split("\u2029").map((e=>e.split(/[\u2028\n]/).reduce(((e,t)=>{e.push({name:"span",value:t},{name:"br"});return e}),[]))).forEach((t=>{e.children.push({name:"p",children:t})}))}else if(/[\u2028\n]/.test(this[ar])){e.name="div";e.children=[];this[ar].split(/[\u2028\n]/).forEach((t=>{e.children.push({name:"span",value:t},{name:"br"})}))}return HTMLResult.success(e)}return this[ar][nn](e)}}class TextEdit extends XFAObject{constructor(e){super(vn,"textEdit",!0);this.allowRichText=getInteger({data:e.allowRichText,defaultValue:0,validate:e=>1===e});this.hScrollPolicy=getStringOption(e.hScrollPolicy,["auto","off","on"]);this.id=e.id||"";this.multiLine=getInteger({data:e.multiLine,defaultValue:"",validate:e=>0===e||1===e});this.use=e.use||"";this.usehref=e.usehref||"";this.vScrollPolicy=getStringOption(e.vScrollPolicy,["auto","off","on"]);this.border=null;this.comb=null;this.extras=null;this.margin=null}[nn](e){const t=toStyle(this,"border","font","margin");let i;const a=this[wr]()[wr]();""===this.multiLine&&(this.multiLine=a instanceof Draw?1:0);i=1===this.multiLine?{name:"textarea",attributes:{dataId:a[sr]?.[In]||a[In],fieldId:a[In],class:["xfaTextfield"],style:t,"aria-label":ariaLabel(a),"aria-required":!1}}:{name:"input",attributes:{type:"text",dataId:a[sr]?.[In]||a[In],fieldId:a[In],class:["xfaTextfield"],style:t,"aria-label":ariaLabel(a),"aria-required":!1}};if(isRequired(a)){i.attributes["aria-required"]=!0;i.attributes.required=!0}return HTMLResult.success({name:"label",attributes:{class:["xfaLabel"]},children:[i]})}}class Time extends StringObject{constructor(e){super(vn,"time");this.id=e.id||"";this.name=e.name||"";this.use=e.use||"";this.usehref=e.usehref||""}[gr](){const e=this[ar].trim();this[ar]=e?new Date(e):null}[nn](e){return valueToHtml(this[ar]?this[ar].toString():"")}}class TimeStamp extends XFAObject{constructor(e){super(vn,"timeStamp");this.id=e.id||"";this.server=e.server||"";this.type=getStringOption(e.type,["optional","required"]);this.use=e.use||"";this.usehref=e.usehref||""}}class ToolTip extends StringObject{constructor(e){super(vn,"toolTip");this.id=e.id||"";this.rid=e.rid||"";this.use=e.use||"";this.usehref=e.usehref||""}}class Traversal extends XFAObject{constructor(e){super(vn,"traversal",!0);this.id=e.id||"";this.use=e.use||"";this.usehref=e.usehref||"";this.extras=null;this.traverse=new XFAObjectArray}}class Traverse extends XFAObject{constructor(e){super(vn,"traverse",!0);this.id=e.id||"";this.operation=getStringOption(e.operation,["next","back","down","first","left","right","up"]);this.ref=e.ref||"";this.use=e.use||"";this.usehref=e.usehref||"";this.extras=null;this.script=null}get name(){return this.operation}[Jr](){return!1}}class Ui extends XFAObject{constructor(e){super(vn,"ui",!0);this.id=e.id||"";this.use=e.use||"";this.usehref=e.usehref||"";this.extras=null;this.picture=null;this.barcode=null;this.button=null;this.checkButton=null;this.choiceList=null;this.dateTimeEdit=null;this.defaultUi=null;this.imageEdit=null;this.numericEdit=null;this.passwordEdit=null;this.signature=null;this.textEdit=null}[ur](){if(void 0===this[nr]){for(const e of Object.getOwnPropertyNames(this)){if("extras"===e||"picture"===e)continue;const t=this[e];if(t instanceof XFAObject){this[nr]=t;return t}}this[nr]=null}return this[nr]}[nn](e){const t=this[ur]();return t?t[nn](e):HTMLResult.EMPTY}}class Validate extends XFAObject{constructor(e){super(vn,"validate",!0);this.formatTest=getStringOption(e.formatTest,["warning","disabled","error"]);this.id=e.id||"";this.nullTest=getStringOption(e.nullTest,["disabled","error","warning"]);this.scriptTest=getStringOption(e.scriptTest,["error","disabled","warning"]);this.use=e.use||"";this.usehref=e.usehref||"";this.extras=null;this.message=null;this.picture=null;this.script=null}}class Value extends XFAObject{constructor(e){super(vn,"value",!0);this.id=e.id||"";this.override=getInteger({data:e.override,defaultValue:0,validate:e=>1===e});this.relevant=getRelevant(e.relevant);this.use=e.use||"";this.usehref=e.usehref||"";this.arc=null;this.boolean=null;this.date=null;this.dateTime=null;this.decimal=null;this.exData=null;this.float=null;this.image=null;this.integer=null;this.line=null;this.rectangle=null;this.text=null;this.time=null}[tn](e){const t=this[wr]();if(t instanceof Field&&t.ui?.imageEdit){if(!this.image){this.image=new Image({});this[zs](this.image)}this.image[ar]=e[ar];return}const i=e[Tr];if(null===this[i]){for(const e of Object.getOwnPropertyNames(this)){const t=this[e];if(t instanceof XFAObject){this[e]=null;this[Vr](t)}}this[e[Tr]]=e;this[zs](e)}else this[i][ar]=e[ar]}[sn](){if(this.exData)return"string"==typeof this.exData[ar]?this.exData[ar].trim():this.exData[ar][sn]().trim();for(const e of Object.getOwnPropertyNames(this)){if("image"===e)continue;const t=this[e];if(t instanceof XFAObject)return(t[ar]||"").toString().trim()}return null}[nn](e){for(const t of Object.getOwnPropertyNames(this)){const i=this[t];if(i instanceof XFAObject)return i[nn](e)}return HTMLResult.EMPTY}}class Variables extends XFAObject{constructor(e){super(vn,"variables",!0);this.id=e.id||"";this.use=e.use||"";this.usehref=e.usehref||"";this.boolean=new XFAObjectArray;this.date=new XFAObjectArray;this.dateTime=new XFAObjectArray;this.decimal=new XFAObjectArray;this.exData=new XFAObjectArray;this.float=new XFAObjectArray;this.image=new XFAObjectArray;this.integer=new XFAObjectArray;this.manifest=new XFAObjectArray;this.script=new XFAObjectArray;this.text=new XFAObjectArray;this.time=new XFAObjectArray}[Jr](){return!0}}class TemplateNamespace{static[cn](e,t){if(TemplateNamespace.hasOwnProperty(e)){const i=TemplateNamespace[e](t);i[en](t);return i}}static appearanceFilter(e){return new AppearanceFilter(e)}static arc(e){return new Arc(e)}static area(e){return new Area(e)}static assist(e){return new Assist(e)}static barcode(e){return new Barcode(e)}static bind(e){return new Bind(e)}static bindItems(e){return new BindItems(e)}static bookend(e){return new Bookend(e)}static boolean(e){return new BooleanElement(e)}static border(e){return new Border(e)}static break(e){return new Break(e)}static breakAfter(e){return new BreakAfter(e)}static breakBefore(e){return new BreakBefore(e)}static button(e){return new Button(e)}static calculate(e){return new Calculate(e)}static caption(e){return new Caption(e)}static certificate(e){return new Certificate(e)}static certificates(e){return new Certificates(e)}static checkButton(e){return new CheckButton(e)}static choiceList(e){return new ChoiceList(e)}static color(e){return new Color(e)}static comb(e){return new Comb(e)}static connect(e){return new Connect(e)}static contentArea(e){return new ContentArea(e)}static corner(e){return new Corner(e)}static date(e){return new DateElement(e)}static dateTime(e){return new DateTime(e)}static dateTimeEdit(e){return new DateTimeEdit(e)}static decimal(e){return new Decimal(e)}static defaultUi(e){return new DefaultUi(e)}static desc(e){return new Desc(e)}static digestMethod(e){return new DigestMethod(e)}static digestMethods(e){return new DigestMethods(e)}static draw(e){return new Draw(e)}static edge(e){return new Edge(e)}static encoding(e){return new Encoding(e)}static encodings(e){return new Encodings(e)}static encrypt(e){return new Encrypt(e)}static encryptData(e){return new EncryptData(e)}static encryption(e){return new Encryption(e)}static encryptionMethod(e){return new EncryptionMethod(e)}static encryptionMethods(e){return new EncryptionMethods(e)}static event(e){return new Event(e)}static exData(e){return new ExData(e)}static exObject(e){return new ExObject(e)}static exclGroup(e){return new ExclGroup(e)}static execute(e){return new Execute(e)}static extras(e){return new Extras(e)}static field(e){return new Field(e)}static fill(e){return new Fill(e)}static filter(e){return new Filter(e)}static float(e){return new Float(e)}static font(e){return new template_Font(e)}static format(e){return new Format(e)}static handler(e){return new Handler(e)}static hyphenation(e){return new Hyphenation(e)}static image(e){return new Image(e)}static imageEdit(e){return new ImageEdit(e)}static integer(e){return new Integer(e)}static issuers(e){return new Issuers(e)}static items(e){return new Items(e)}static keep(e){return new Keep(e)}static keyUsage(e){return new KeyUsage(e)}static line(e){return new Line(e)}static linear(e){return new Linear(e)}static lockDocument(e){return new LockDocument(e)}static manifest(e){return new Manifest(e)}static margin(e){return new Margin(e)}static mdp(e){return new Mdp(e)}static medium(e){return new Medium(e)}static message(e){return new Message(e)}static numericEdit(e){return new NumericEdit(e)}static occur(e){return new Occur(e)}static oid(e){return new Oid(e)}static oids(e){return new Oids(e)}static overflow(e){return new Overflow(e)}static pageArea(e){return new PageArea(e)}static pageSet(e){return new PageSet(e)}static para(e){return new Para(e)}static passwordEdit(e){return new PasswordEdit(e)}static pattern(e){return new template_Pattern(e)}static picture(e){return new Picture(e)}static proto(e){return new Proto(e)}static radial(e){return new Radial(e)}static reason(e){return new Reason(e)}static reasons(e){return new Reasons(e)}static rectangle(e){return new Rectangle(e)}static ref(e){return new RefElement(e)}static script(e){return new Script(e)}static setProperty(e){return new SetProperty(e)}static signData(e){return new SignData(e)}static signature(e){return new Signature(e)}static signing(e){return new Signing(e)}static solid(e){return new Solid(e)}static speak(e){return new Speak(e)}static stipple(e){return new Stipple(e)}static subform(e){return new Subform(e)}static subformSet(e){return new SubformSet(e)}static subjectDN(e){return new SubjectDN(e)}static subjectDNs(e){return new SubjectDNs(e)}static submit(e){return new Submit(e)}static template(e){return new Template(e)}static text(e){return new Text(e)}static textEdit(e){return new TextEdit(e)}static time(e){return new Time(e)}static timeStamp(e){return new TimeStamp(e)}static toolTip(e){return new ToolTip(e)}static traversal(e){return new Traversal(e)}static traverse(e){return new Traverse(e)}static ui(e){return new Ui(e)}static validate(e){return new Validate(e)}static value(e){return new Value(e)}static variables(e){return new Variables(e)}}const Pn=Cn.datasets.id;function createText(e){const t=new Text({});t[ar]=e;return t}class Binder{constructor(e){this.root=e;this.datasets=e.datasets;this.data=e.datasets?.data||new XmlObject(Cn.datasets.id,"data");this.emptyMerge=0===this.data[fr]().length;this.root.form=this.form=e.template[tr]()}_isConsumeData(){return!this.emptyMerge&&this._mergeMode}_isMatchTemplate(){return!this._isConsumeData()}bind(){this._bindElement(this.form,this.data);return this.form}getData(){return this.data}_bindValue(e,t,i){e[sr]=t;if(e[Fr]())if(t[xr]()){const i=t[Er]();e[tn](createText(i))}else if(e instanceof Field&&"multiSelect"===e.ui?.choiceList?.open){const i=t[fr]().map((e=>e[ar].trim())).join("\n");e[tn](createText(i))}else this._isConsumeData()&&warn("XFA - Nodes haven't the same type.");else!t[xr]()||this._isMatchTemplate()?this._bindElement(e,t):warn("XFA - Nodes haven't the same type.")}_findDataByNameToConsume(e,t,i,a){if(!e)return null;let s,r;for(let a=0;a<3;a++){s=i[dr](e,!1,!0);for(;;){r=s.next().value;if(!r)break;if(t===r[xr]())return r}if(i[Kr]===Cn.datasets.id&&"data"===i[Tr])break;i=i[wr]()}if(!a)return null;s=this.data[dr](e,!0,!1);r=s.next().value;if(r)return r;s=this.data[Ir](e,!0);r=s.next().value;return r?.[xr]()?r:null}_setProperties(e,t){if(e.hasOwnProperty("setProperty"))for(const{ref:i,target:a,connection:s}of e.setProperty.children){if(s)continue;if(!i)continue;const r=searchNode(this.root,t,i,!1,!1);if(!r){warn(`XFA - Invalid reference: ${i}.`);continue}const[n]=r;if(!n[Ur](this.data)){warn("XFA - Invalid node: must be a data node.");continue}const g=searchNode(this.root,e,a,!1,!1);if(!g){warn(`XFA - Invalid target: ${a}.`);continue}const[o]=g;if(!o[Ur](e)){warn("XFA - Invalid target: must be a property or subproperty.");continue}const c=o[wr]();if(o instanceof SetProperty||c instanceof SetProperty){warn("XFA - Invalid target: cannot be a setProperty or one of its properties.");continue}if(o instanceof BindItems||c instanceof BindItems){warn("XFA - Invalid target: cannot be a bindItems or one of its properties.");continue}const C=n[sn](),h=o[Tr];if(o instanceof XFAAttribute){const e=Object.create(null);e[h]=C;const t=Reflect.construct(Object.getPrototypeOf(c).constructor,[e]);c[h]=t[h]}else if(o.hasOwnProperty(ar)){o[sr]=n;o[ar]=C;o[gr]()}else warn("XFA - Invalid node to use in setProperty")}}_bindItems(e,t){if(!e.hasOwnProperty("items")||!e.hasOwnProperty("bindItems")||e.bindItems.isEmpty())return;for(const t of e.items.children)e[Vr](t);e.items.clear();const i=new Items({}),a=new Items({});e[zs](i);e.items.push(i);e[zs](a);e.items.push(a);for(const{ref:s,labelRef:r,valueRef:n,connection:g}of e.bindItems.children){if(g)continue;if(!s)continue;const e=searchNode(this.root,t,s,!1,!1);if(e)for(const t of e){if(!t[Ur](this.datasets)){warn(`XFA - Invalid ref (${s}): must be a datasets child.`);continue}const e=searchNode(this.root,t,r,!0,!1);if(!e){warn(`XFA - Invalid label: ${r}.`);continue}const[g]=e;if(!g[Ur](this.datasets)){warn("XFA - Invalid label: must be a datasets child.");continue}const o=searchNode(this.root,t,n,!0,!1);if(!o){warn(`XFA - Invalid value: ${n}.`);continue}const[c]=o;if(!c[Ur](this.datasets)){warn("XFA - Invalid value: must be a datasets child.");continue}const C=createText(g[sn]()),h=createText(c[sn]());i[zs](C);i.text.push(C);a[zs](h);a.text.push(h)}else warn(`XFA - Invalid reference: ${s}.`)}}_bindOccurrences(e,t,i){let a;if(t.length>1){a=e[tr]();a[Vr](a.occur);a.occur=null}this._bindValue(e,t[0],i);this._setProperties(e,t[0]);this._bindItems(e,t[0]);if(1===t.length)return;const s=e[wr](),r=e[Tr],n=s[kr](e);for(let e=1,g=t.length;et.name===e.name)).length:i[a].children.length;const r=i[kr](e)+1,n=t.initial-s;if(n){const t=e[tr]();t[Vr](t.occur);t.occur=null;i[a].push(t);i[Rr](r,t);for(let e=1;e0)this._bindOccurrences(a,[e[0]],null);else if(this.emptyMerge){const e=t[Kr]===Pn?-1:t[Kr],i=a[sr]=new XmlObject(e,a.name||"root");t[zs](i);this._bindElement(a,i)}continue}if(!a[Gr]())continue;let e=!1,s=null,r=null,n=null;if(a.bind){switch(a.bind.match){case"none":this._setAndBind(a,t);continue;case"global":e=!0;break;case"dataRef":if(!a.bind.ref){warn(`XFA - ref is empty in node ${a[Tr]}.`);this._setAndBind(a,t);continue}r=a.bind.ref}a.bind.picture&&(s=a.bind.picture[ar])}const[g,o]=this._getOccurInfo(a);if(r){n=searchNode(this.root,t,r,!0,!1);if(null===n){n=createDataNode(this.data,t,r);if(!n)continue;this._isConsumeData()&&(n[ir]=!0);this._setAndBind(a,n);continue}this._isConsumeData()&&(n=n.filter((e=>!e[ir])));n.length>o?n=n.slice(0,o):0===n.length&&(n=null);n&&this._isConsumeData()&&n.forEach((e=>{e[ir]=!0}))}else{if(!a.name){this._setAndBind(a,t);continue}if(this._isConsumeData()){const i=[];for(;i.length0?i:null}else{n=t[dr](a.name,!1,this.emptyMerge).next().value;if(!n){if(0===g){i.push(a);continue}const e=t[Kr]===Pn?-1:t[Kr];n=a[sr]=new XmlObject(e,a.name);this.emptyMerge&&(n[ir]=!0);t[zs](n);this._setAndBind(a,n);continue}this.emptyMerge&&(n[ir]=!0);n=[n]}}n?this._bindOccurrences(a,n,s):g>0?this._setAndBind(a,t):i.push(a)}i.forEach((e=>e[wr]()[Vr](e)))}}class DataHandler{constructor(e,t){this.data=t;this.dataset=e.datasets||null}serialize(e){const t=[[-1,this.data[fr]()]];for(;t.length>0;){const i=t.at(-1),[a,s]=i;if(a+1===s.length){t.pop();continue}const r=s[++i[0]],n=e.get(r[In]);if(n)r[tn](n);else{const t=r[cr]();for(const i of t.values()){const t=e.get(i[In]);if(t){i[tn](t);break}}}const g=r[fr]();g.length>0&&t.push([-1,g])}const i=[''];if(this.dataset)for(const e of this.dataset[fr]())"data"!==e[Tr]&&e[gn](i);this.data[gn](i);i.push("");return i.join("")}}const Wn=Cn.config.id;class Acrobat extends XFAObject{constructor(e){super(Wn,"acrobat",!0);this.acrobat7=null;this.autoSave=null;this.common=null;this.validate=null;this.validateApprovalSignatures=null;this.submitUrl=new XFAObjectArray}}class Acrobat7 extends XFAObject{constructor(e){super(Wn,"acrobat7",!0);this.dynamicRender=null}}class ADBE_JSConsole extends OptionObject{constructor(e){super(Wn,"ADBE_JSConsole",["delegate","Enable","Disable"])}}class ADBE_JSDebugger extends OptionObject{constructor(e){super(Wn,"ADBE_JSDebugger",["delegate","Enable","Disable"])}}class AddSilentPrint extends Option01{constructor(e){super(Wn,"addSilentPrint")}}class AddViewerPreferences extends Option01{constructor(e){super(Wn,"addViewerPreferences")}}class AdjustData extends Option10{constructor(e){super(Wn,"adjustData")}}class AdobeExtensionLevel extends IntegerObject{constructor(e){super(Wn,"adobeExtensionLevel",0,(e=>e>=1&&e<=8))}}class Agent extends XFAObject{constructor(e){super(Wn,"agent",!0);this.name=e.name?e.name.trim():"";this.common=new XFAObjectArray}}class AlwaysEmbed extends ContentObject{constructor(e){super(Wn,"alwaysEmbed")}}class Amd extends StringObject{constructor(e){super(Wn,"amd")}}class config_Area extends XFAObject{constructor(e){super(Wn,"area");this.level=getInteger({data:e.level,defaultValue:0,validate:e=>e>=1&&e<=3});this.name=getStringOption(e.name,["","barcode","coreinit","deviceDriver","font","general","layout","merge","script","signature","sourceSet","templateCache"])}}class Attributes extends OptionObject{constructor(e){super(Wn,"attributes",["preserve","delegate","ignore"])}}class AutoSave extends OptionObject{constructor(e){super(Wn,"autoSave",["disabled","enabled"])}}class Base extends StringObject{constructor(e){super(Wn,"base")}}class BatchOutput extends XFAObject{constructor(e){super(Wn,"batchOutput");this.format=getStringOption(e.format,["none","concat","zip","zipCompress"])}}class BehaviorOverride extends ContentObject{constructor(e){super(Wn,"behaviorOverride")}[gr](){this[ar]=new Map(this[ar].trim().split(/\s+/).filter((e=>e.includes(":"))).map((e=>e.split(":",2))))}}class Cache extends XFAObject{constructor(e){super(Wn,"cache",!0);this.templateCache=null}}class Change extends Option01{constructor(e){super(Wn,"change")}}class Common extends XFAObject{constructor(e){super(Wn,"common",!0);this.data=null;this.locale=null;this.localeSet=null;this.messaging=null;this.suppressBanner=null;this.template=null;this.validationMessaging=null;this.versionControl=null;this.log=new XFAObjectArray}}class Compress extends XFAObject{constructor(e){super(Wn,"compress");this.scope=getStringOption(e.scope,["imageOnly","document"])}}class CompressLogicalStructure extends Option01{constructor(e){super(Wn,"compressLogicalStructure")}}class CompressObjectStream extends Option10{constructor(e){super(Wn,"compressObjectStream")}}class Compression extends XFAObject{constructor(e){super(Wn,"compression",!0);this.compressLogicalStructure=null;this.compressObjectStream=null;this.level=null;this.type=null}}class Config extends XFAObject{constructor(e){super(Wn,"config",!0);this.acrobat=null;this.present=null;this.trace=null;this.agent=new XFAObjectArray}}class Conformance extends OptionObject{constructor(e){super(Wn,"conformance",["A","B"])}}class ContentCopy extends Option01{constructor(e){super(Wn,"contentCopy")}}class Copies extends IntegerObject{constructor(e){super(Wn,"copies",1,(e=>e>=1))}}class Creator extends StringObject{constructor(e){super(Wn,"creator")}}class CurrentPage extends IntegerObject{constructor(e){super(Wn,"currentPage",0,(e=>e>=0))}}class Data extends XFAObject{constructor(e){super(Wn,"data",!0);this.adjustData=null;this.attributes=null;this.incrementalLoad=null;this.outputXSL=null;this.range=null;this.record=null;this.startNode=null;this.uri=null;this.window=null;this.xsl=null;this.excludeNS=new XFAObjectArray;this.transform=new XFAObjectArray}}class Debug extends XFAObject{constructor(e){super(Wn,"debug",!0);this.uri=null}}class DefaultTypeface extends ContentObject{constructor(e){super(Wn,"defaultTypeface");this.writingScript=getStringOption(e.writingScript,["*","Arabic","Cyrillic","EastEuropeanRoman","Greek","Hebrew","Japanese","Korean","Roman","SimplifiedChinese","Thai","TraditionalChinese","Vietnamese"])}}class Destination extends OptionObject{constructor(e){super(Wn,"destination",["pdf","pcl","ps","webClient","zpl"])}}class DocumentAssembly extends Option01{constructor(e){super(Wn,"documentAssembly")}}class Driver extends XFAObject{constructor(e){super(Wn,"driver",!0);this.name=e.name?e.name.trim():"";this.fontInfo=null;this.xdc=null}}class DuplexOption extends OptionObject{constructor(e){super(Wn,"duplexOption",["simplex","duplexFlipLongEdge","duplexFlipShortEdge"])}}class DynamicRender extends OptionObject{constructor(e){super(Wn,"dynamicRender",["forbidden","required"])}}class Embed extends Option01{constructor(e){super(Wn,"embed")}}class config_Encrypt extends Option01{constructor(e){super(Wn,"encrypt")}}class config_Encryption extends XFAObject{constructor(e){super(Wn,"encryption",!0);this.encrypt=null;this.encryptionLevel=null;this.permissions=null}}class EncryptionLevel extends OptionObject{constructor(e){super(Wn,"encryptionLevel",["40bit","128bit"])}}class Enforce extends StringObject{constructor(e){super(Wn,"enforce")}}class Equate extends XFAObject{constructor(e){super(Wn,"equate");this.force=getInteger({data:e.force,defaultValue:1,validate:e=>0===e});this.from=e.from||"";this.to=e.to||""}}class EquateRange extends XFAObject{constructor(e){super(Wn,"equateRange");this.from=e.from||"";this.to=e.to||"";this._unicodeRange=e.unicodeRange||""}get unicodeRange(){const e=[],t=/U\+([0-9a-fA-F]+)/,i=this._unicodeRange;for(let a of i.split(",").map((e=>e.trim())).filter((e=>!!e))){a=a.split("-",2).map((e=>{const i=e.match(t);return i?parseInt(i[1],16):0}));1===a.length&&a.push(a[0]);e.push(a)}return shadow(this,"unicodeRange",e)}}class Exclude extends ContentObject{constructor(e){super(Wn,"exclude")}[gr](){this[ar]=this[ar].trim().split(/\s+/).filter((e=>e&&["calculate","close","enter","exit","initialize","ready","validate"].includes(e)))}}class ExcludeNS extends StringObject{constructor(e){super(Wn,"excludeNS")}}class FlipLabel extends OptionObject{constructor(e){super(Wn,"flipLabel",["usePrinterSetting","on","off"])}}class config_FontInfo extends XFAObject{constructor(e){super(Wn,"fontInfo",!0);this.embed=null;this.map=null;this.subsetBelow=null;this.alwaysEmbed=new XFAObjectArray;this.defaultTypeface=new XFAObjectArray;this.neverEmbed=new XFAObjectArray}}class FormFieldFilling extends Option01{constructor(e){super(Wn,"formFieldFilling")}}class GroupParent extends StringObject{constructor(e){super(Wn,"groupParent")}}class IfEmpty extends OptionObject{constructor(e){super(Wn,"ifEmpty",["dataValue","dataGroup","ignore","remove"])}}class IncludeXDPContent extends StringObject{constructor(e){super(Wn,"includeXDPContent")}}class IncrementalLoad extends OptionObject{constructor(e){super(Wn,"incrementalLoad",["none","forwardOnly"])}}class IncrementalMerge extends Option01{constructor(e){super(Wn,"incrementalMerge")}}class Interactive extends Option01{constructor(e){super(Wn,"interactive")}}class Jog extends OptionObject{constructor(e){super(Wn,"jog",["usePrinterSetting","none","pageSet"])}}class LabelPrinter extends XFAObject{constructor(e){super(Wn,"labelPrinter",!0);this.name=getStringOption(e.name,["zpl","dpl","ipl","tcpl"]);this.batchOutput=null;this.flipLabel=null;this.fontInfo=null;this.xdc=null}}class Layout extends OptionObject{constructor(e){super(Wn,"layout",["paginate","panel"])}}class Level extends IntegerObject{constructor(e){super(Wn,"level",0,(e=>e>0))}}class Linearized extends Option01{constructor(e){super(Wn,"linearized")}}class Locale extends StringObject{constructor(e){super(Wn,"locale")}}class LocaleSet extends StringObject{constructor(e){super(Wn,"localeSet")}}class Log extends XFAObject{constructor(e){super(Wn,"log",!0);this.mode=null;this.threshold=null;this.to=null;this.uri=null}}class MapElement extends XFAObject{constructor(e){super(Wn,"map",!0);this.equate=new XFAObjectArray;this.equateRange=new XFAObjectArray}}class MediumInfo extends XFAObject{constructor(e){super(Wn,"mediumInfo",!0);this.map=null}}class config_Message extends XFAObject{constructor(e){super(Wn,"message",!0);this.msgId=null;this.severity=null}}class Messaging extends XFAObject{constructor(e){super(Wn,"messaging",!0);this.message=new XFAObjectArray}}class Mode extends OptionObject{constructor(e){super(Wn,"mode",["append","overwrite"])}}class ModifyAnnots extends Option01{constructor(e){super(Wn,"modifyAnnots")}}class MsgId extends IntegerObject{constructor(e){super(Wn,"msgId",1,(e=>e>=1))}}class NameAttr extends StringObject{constructor(e){super(Wn,"nameAttr")}}class NeverEmbed extends ContentObject{constructor(e){super(Wn,"neverEmbed")}}class NumberOfCopies extends IntegerObject{constructor(e){super(Wn,"numberOfCopies",null,(e=>e>=2&&e<=5))}}class OpenAction extends XFAObject{constructor(e){super(Wn,"openAction",!0);this.destination=null}}class Output extends XFAObject{constructor(e){super(Wn,"output",!0);this.to=null;this.type=null;this.uri=null}}class OutputBin extends StringObject{constructor(e){super(Wn,"outputBin")}}class OutputXSL extends XFAObject{constructor(e){super(Wn,"outputXSL",!0);this.uri=null}}class Overprint extends OptionObject{constructor(e){super(Wn,"overprint",["none","both","draw","field"])}}class Packets extends StringObject{constructor(e){super(Wn,"packets")}[gr](){"*"!==this[ar]&&(this[ar]=this[ar].trim().split(/\s+/).filter((e=>["config","datasets","template","xfdf","xslt"].includes(e))))}}class PageOffset extends XFAObject{constructor(e){super(Wn,"pageOffset");this.x=getInteger({data:e.x,defaultValue:"useXDCSetting",validate:e=>!0});this.y=getInteger({data:e.y,defaultValue:"useXDCSetting",validate:e=>!0})}}class PageRange extends StringObject{constructor(e){super(Wn,"pageRange")}[gr](){const e=this[ar].trim().split(/\s+/).map((e=>parseInt(e,10))),t=[];for(let i=0,a=e.length;i!1))}}class Pcl extends XFAObject{constructor(e){super(Wn,"pcl",!0);this.name=e.name||"";this.batchOutput=null;this.fontInfo=null;this.jog=null;this.mediumInfo=null;this.outputBin=null;this.pageOffset=null;this.staple=null;this.xdc=null}}class Pdf extends XFAObject{constructor(e){super(Wn,"pdf",!0);this.name=e.name||"";this.adobeExtensionLevel=null;this.batchOutput=null;this.compression=null;this.creator=null;this.encryption=null;this.fontInfo=null;this.interactive=null;this.linearized=null;this.openAction=null;this.pdfa=null;this.producer=null;this.renderPolicy=null;this.scriptModel=null;this.silentPrint=null;this.submitFormat=null;this.tagged=null;this.version=null;this.viewerPreferences=null;this.xdc=null}}class Pdfa extends XFAObject{constructor(e){super(Wn,"pdfa",!0);this.amd=null;this.conformance=null;this.includeXDPContent=null;this.part=null}}class Permissions extends XFAObject{constructor(e){super(Wn,"permissions",!0);this.accessibleContent=null;this.change=null;this.contentCopy=null;this.documentAssembly=null;this.formFieldFilling=null;this.modifyAnnots=null;this.plaintextMetadata=null;this.print=null;this.printHighQuality=null}}class PickTrayByPDFSize extends Option01{constructor(e){super(Wn,"pickTrayByPDFSize")}}class config_Picture extends StringObject{constructor(e){super(Wn,"picture")}}class PlaintextMetadata extends Option01{constructor(e){super(Wn,"plaintextMetadata")}}class Presence extends OptionObject{constructor(e){super(Wn,"presence",["preserve","dissolve","dissolveStructure","ignore","remove"])}}class Present extends XFAObject{constructor(e){super(Wn,"present",!0);this.behaviorOverride=null;this.cache=null;this.common=null;this.copies=null;this.destination=null;this.incrementalMerge=null;this.layout=null;this.output=null;this.overprint=null;this.pagination=null;this.paginationOverride=null;this.script=null;this.validate=null;this.xdp=null;this.driver=new XFAObjectArray;this.labelPrinter=new XFAObjectArray;this.pcl=new XFAObjectArray;this.pdf=new XFAObjectArray;this.ps=new XFAObjectArray;this.submitUrl=new XFAObjectArray;this.webClient=new XFAObjectArray;this.zpl=new XFAObjectArray}}class Print extends Option01{constructor(e){super(Wn,"print")}}class PrintHighQuality extends Option01{constructor(e){super(Wn,"printHighQuality")}}class PrintScaling extends OptionObject{constructor(e){super(Wn,"printScaling",["appdefault","noScaling"])}}class PrinterName extends StringObject{constructor(e){super(Wn,"printerName")}}class Producer extends StringObject{constructor(e){super(Wn,"producer")}}class Ps extends XFAObject{constructor(e){super(Wn,"ps",!0);this.name=e.name||"";this.batchOutput=null;this.fontInfo=null;this.jog=null;this.mediumInfo=null;this.outputBin=null;this.staple=null;this.xdc=null}}class Range extends ContentObject{constructor(e){super(Wn,"range")}[gr](){this[ar]=this[ar].trim().split(/\s*,\s*/,2).map((e=>e.split("-").map((e=>parseInt(e.trim(),10))))).filter((e=>e.every((e=>!isNaN(e))))).map((e=>{1===e.length&&e.push(e[0]);return e}))}}class Record extends ContentObject{constructor(e){super(Wn,"record")}[gr](){this[ar]=this[ar].trim();const e=parseInt(this[ar],10);!isNaN(e)&&e>=0&&(this[ar]=e)}}class Relevant extends ContentObject{constructor(e){super(Wn,"relevant")}[gr](){this[ar]=this[ar].trim().split(/\s+/)}}class Rename extends ContentObject{constructor(e){super(Wn,"rename")}[gr](){this[ar]=this[ar].trim();(this[ar].toLowerCase().startsWith("xml")||new RegExp("[\\p{L}_][\\p{L}\\d._\\p{M}-]*","u").test(this[ar]))&&warn("XFA - Rename: invalid XFA name")}}class RenderPolicy extends OptionObject{constructor(e){super(Wn,"renderPolicy",["server","client"])}}class RunScripts extends OptionObject{constructor(e){super(Wn,"runScripts",["both","client","none","server"])}}class config_Script extends XFAObject{constructor(e){super(Wn,"script",!0);this.currentPage=null;this.exclude=null;this.runScripts=null}}class ScriptModel extends OptionObject{constructor(e){super(Wn,"scriptModel",["XFA","none"])}}class Severity extends OptionObject{constructor(e){super(Wn,"severity",["ignore","error","information","trace","warning"])}}class SilentPrint extends XFAObject{constructor(e){super(Wn,"silentPrint",!0);this.addSilentPrint=null;this.printerName=null}}class Staple extends XFAObject{constructor(e){super(Wn,"staple");this.mode=getStringOption(e.mode,["usePrinterSetting","on","off"])}}class StartNode extends StringObject{constructor(e){super(Wn,"startNode")}}class StartPage extends IntegerObject{constructor(e){super(Wn,"startPage",0,(e=>!0))}}class SubmitFormat extends OptionObject{constructor(e){super(Wn,"submitFormat",["html","delegate","fdf","xml","pdf"])}}class SubmitUrl extends StringObject{constructor(e){super(Wn,"submitUrl")}}class SubsetBelow extends IntegerObject{constructor(e){super(Wn,"subsetBelow",100,(e=>e>=0&&e<=100))}}class SuppressBanner extends Option01{constructor(e){super(Wn,"suppressBanner")}}class Tagged extends Option01{constructor(e){super(Wn,"tagged")}}class config_Template extends XFAObject{constructor(e){super(Wn,"template",!0);this.base=null;this.relevant=null;this.startPage=null;this.uri=null;this.xsl=null}}class Threshold extends OptionObject{constructor(e){super(Wn,"threshold",["trace","error","information","warning"])}}class To extends OptionObject{constructor(e){super(Wn,"to",["null","memory","stderr","stdout","system","uri"])}}class TemplateCache extends XFAObject{constructor(e){super(Wn,"templateCache");this.maxEntries=getInteger({data:e.maxEntries,defaultValue:5,validate:e=>e>=0})}}class Trace extends XFAObject{constructor(e){super(Wn,"trace",!0);this.area=new XFAObjectArray}}class Transform extends XFAObject{constructor(e){super(Wn,"transform",!0);this.groupParent=null;this.ifEmpty=null;this.nameAttr=null;this.picture=null;this.presence=null;this.rename=null;this.whitespace=null}}class Type extends OptionObject{constructor(e){super(Wn,"type",["none","ascii85","asciiHex","ccittfax","flate","lzw","runLength","native","xdp","mergedXDP"])}}class Uri extends StringObject{constructor(e){super(Wn,"uri")}}class config_Validate extends OptionObject{constructor(e){super(Wn,"validate",["preSubmit","prePrint","preExecute","preSave"])}}class ValidateApprovalSignatures extends ContentObject{constructor(e){super(Wn,"validateApprovalSignatures")}[gr](){this[ar]=this[ar].trim().split(/\s+/).filter((e=>["docReady","postSign"].includes(e)))}}class ValidationMessaging extends OptionObject{constructor(e){super(Wn,"validationMessaging",["allMessagesIndividually","allMessagesTogether","firstMessageOnly","noMessages"])}}class Version extends OptionObject{constructor(e){super(Wn,"version",["1.7","1.6","1.5","1.4","1.3","1.2"])}}class VersionControl extends XFAObject{constructor(e){super(Wn,"VersionControl");this.outputBelow=getStringOption(e.outputBelow,["warn","error","update"]);this.sourceAbove=getStringOption(e.sourceAbove,["warn","error"]);this.sourceBelow=getStringOption(e.sourceBelow,["update","maintain"])}}class ViewerPreferences extends XFAObject{constructor(e){super(Wn,"viewerPreferences",!0);this.ADBE_JSConsole=null;this.ADBE_JSDebugger=null;this.addViewerPreferences=null;this.duplexOption=null;this.enforce=null;this.numberOfCopies=null;this.pageRange=null;this.pickTrayByPDFSize=null;this.printScaling=null}}class WebClient extends XFAObject{constructor(e){super(Wn,"webClient",!0);this.name=e.name?e.name.trim():"";this.fontInfo=null;this.xdc=null}}class Whitespace extends OptionObject{constructor(e){super(Wn,"whitespace",["preserve","ltrim","normalize","rtrim","trim"])}}class Window extends ContentObject{constructor(e){super(Wn,"window")}[gr](){const e=this[ar].trim().split(/\s*,\s*/,2).map((e=>parseInt(e,10)));if(e.some((e=>isNaN(e))))this[ar]=[0,0];else{1===e.length&&e.push(e[0]);this[ar]=e}}}class Xdc extends XFAObject{constructor(e){super(Wn,"xdc",!0);this.uri=new XFAObjectArray;this.xsl=new XFAObjectArray}}class Xdp extends XFAObject{constructor(e){super(Wn,"xdp",!0);this.packets=null}}class Xsl extends XFAObject{constructor(e){super(Wn,"xsl",!0);this.debug=null;this.uri=null}}class Zpl extends XFAObject{constructor(e){super(Wn,"zpl",!0);this.name=e.name?e.name.trim():"";this.batchOutput=null;this.flipLabel=null;this.fontInfo=null;this.xdc=null}}class ConfigNamespace{static[cn](e,t){if(ConfigNamespace.hasOwnProperty(e))return ConfigNamespace[e](t)}static acrobat(e){return new Acrobat(e)}static acrobat7(e){return new Acrobat7(e)}static ADBE_JSConsole(e){return new ADBE_JSConsole(e)}static ADBE_JSDebugger(e){return new ADBE_JSDebugger(e)}static addSilentPrint(e){return new AddSilentPrint(e)}static addViewerPreferences(e){return new AddViewerPreferences(e)}static adjustData(e){return new AdjustData(e)}static adobeExtensionLevel(e){return new AdobeExtensionLevel(e)}static agent(e){return new Agent(e)}static alwaysEmbed(e){return new AlwaysEmbed(e)}static amd(e){return new Amd(e)}static area(e){return new config_Area(e)}static attributes(e){return new Attributes(e)}static autoSave(e){return new AutoSave(e)}static base(e){return new Base(e)}static batchOutput(e){return new BatchOutput(e)}static behaviorOverride(e){return new BehaviorOverride(e)}static cache(e){return new Cache(e)}static change(e){return new Change(e)}static common(e){return new Common(e)}static compress(e){return new Compress(e)}static compressLogicalStructure(e){return new CompressLogicalStructure(e)}static compressObjectStream(e){return new CompressObjectStream(e)}static compression(e){return new Compression(e)}static config(e){return new Config(e)}static conformance(e){return new Conformance(e)}static contentCopy(e){return new ContentCopy(e)}static copies(e){return new Copies(e)}static creator(e){return new Creator(e)}static currentPage(e){return new CurrentPage(e)}static data(e){return new Data(e)}static debug(e){return new Debug(e)}static defaultTypeface(e){return new DefaultTypeface(e)}static destination(e){return new Destination(e)}static documentAssembly(e){return new DocumentAssembly(e)}static driver(e){return new Driver(e)}static duplexOption(e){return new DuplexOption(e)}static dynamicRender(e){return new DynamicRender(e)}static embed(e){return new Embed(e)}static encrypt(e){return new config_Encrypt(e)}static encryption(e){return new config_Encryption(e)}static encryptionLevel(e){return new EncryptionLevel(e)}static enforce(e){return new Enforce(e)}static equate(e){return new Equate(e)}static equateRange(e){return new EquateRange(e)}static exclude(e){return new Exclude(e)}static excludeNS(e){return new ExcludeNS(e)}static flipLabel(e){return new FlipLabel(e)}static fontInfo(e){return new config_FontInfo(e)}static formFieldFilling(e){return new FormFieldFilling(e)}static groupParent(e){return new GroupParent(e)}static ifEmpty(e){return new IfEmpty(e)}static includeXDPContent(e){return new IncludeXDPContent(e)}static incrementalLoad(e){return new IncrementalLoad(e)}static incrementalMerge(e){return new IncrementalMerge(e)}static interactive(e){return new Interactive(e)}static jog(e){return new Jog(e)}static labelPrinter(e){return new LabelPrinter(e)}static layout(e){return new Layout(e)}static level(e){return new Level(e)}static linearized(e){return new Linearized(e)}static locale(e){return new Locale(e)}static localeSet(e){return new LocaleSet(e)}static log(e){return new Log(e)}static map(e){return new MapElement(e)}static mediumInfo(e){return new MediumInfo(e)}static message(e){return new config_Message(e)}static messaging(e){return new Messaging(e)}static mode(e){return new Mode(e)}static modifyAnnots(e){return new ModifyAnnots(e)}static msgId(e){return new MsgId(e)}static nameAttr(e){return new NameAttr(e)}static neverEmbed(e){return new NeverEmbed(e)}static numberOfCopies(e){return new NumberOfCopies(e)}static openAction(e){return new OpenAction(e)}static output(e){return new Output(e)}static outputBin(e){return new OutputBin(e)}static outputXSL(e){return new OutputXSL(e)}static overprint(e){return new Overprint(e)}static packets(e){return new Packets(e)}static pageOffset(e){return new PageOffset(e)}static pageRange(e){return new PageRange(e)}static pagination(e){return new Pagination(e)}static paginationOverride(e){return new PaginationOverride(e)}static part(e){return new Part(e)}static pcl(e){return new Pcl(e)}static pdf(e){return new Pdf(e)}static pdfa(e){return new Pdfa(e)}static permissions(e){return new Permissions(e)}static pickTrayByPDFSize(e){return new PickTrayByPDFSize(e)}static picture(e){return new config_Picture(e)}static plaintextMetadata(e){return new PlaintextMetadata(e)}static presence(e){return new Presence(e)}static present(e){return new Present(e)}static print(e){return new Print(e)}static printHighQuality(e){return new PrintHighQuality(e)}static printScaling(e){return new PrintScaling(e)}static printerName(e){return new PrinterName(e)}static producer(e){return new Producer(e)}static ps(e){return new Ps(e)}static range(e){return new Range(e)}static record(e){return new Record(e)}static relevant(e){return new Relevant(e)}static rename(e){return new Rename(e)}static renderPolicy(e){return new RenderPolicy(e)}static runScripts(e){return new RunScripts(e)}static script(e){return new config_Script(e)}static scriptModel(e){return new ScriptModel(e)}static severity(e){return new Severity(e)}static silentPrint(e){return new SilentPrint(e)}static staple(e){return new Staple(e)}static startNode(e){return new StartNode(e)}static startPage(e){return new StartPage(e)}static submitFormat(e){return new SubmitFormat(e)}static submitUrl(e){return new SubmitUrl(e)}static subsetBelow(e){return new SubsetBelow(e)}static suppressBanner(e){return new SuppressBanner(e)}static tagged(e){return new Tagged(e)}static template(e){return new config_Template(e)}static templateCache(e){return new TemplateCache(e)}static threshold(e){return new Threshold(e)}static to(e){return new To(e)}static trace(e){return new Trace(e)}static transform(e){return new Transform(e)}static type(e){return new Type(e)}static uri(e){return new Uri(e)}static validate(e){return new config_Validate(e)}static validateApprovalSignatures(e){return new ValidateApprovalSignatures(e)}static validationMessaging(e){return new ValidationMessaging(e)}static version(e){return new Version(e)}static versionControl(e){return new VersionControl(e)}static viewerPreferences(e){return new ViewerPreferences(e)}static webClient(e){return new WebClient(e)}static whitespace(e){return new Whitespace(e)}static window(e){return new Window(e)}static xdc(e){return new Xdc(e)}static xdp(e){return new Xdp(e)}static xsl(e){return new Xsl(e)}static zpl(e){return new Zpl(e)}}const jn=Cn.connectionSet.id;class ConnectionSet extends XFAObject{constructor(e){super(jn,"connectionSet",!0);this.wsdlConnection=new XFAObjectArray;this.xmlConnection=new XFAObjectArray;this.xsdConnection=new XFAObjectArray}}class EffectiveInputPolicy extends XFAObject{constructor(e){super(jn,"effectiveInputPolicy");this.id=e.id||"";this.name=e.name||"";this.use=e.use||"";this.usehref=e.usehref||""}}class EffectiveOutputPolicy extends XFAObject{constructor(e){super(jn,"effectiveOutputPolicy");this.id=e.id||"";this.name=e.name||"";this.use=e.use||"";this.usehref=e.usehref||""}}class Operation extends StringObject{constructor(e){super(jn,"operation");this.id=e.id||"";this.input=e.input||"";this.name=e.name||"";this.output=e.output||"";this.use=e.use||"";this.usehref=e.usehref||""}}class RootElement extends StringObject{constructor(e){super(jn,"rootElement");this.id=e.id||"";this.name=e.name||"";this.use=e.use||"";this.usehref=e.usehref||""}}class SoapAction extends StringObject{constructor(e){super(jn,"soapAction");this.id=e.id||"";this.name=e.name||"";this.use=e.use||"";this.usehref=e.usehref||""}}class SoapAddress extends StringObject{constructor(e){super(jn,"soapAddress");this.id=e.id||"";this.name=e.name||"";this.use=e.use||"";this.usehref=e.usehref||""}}class connection_set_Uri extends StringObject{constructor(e){super(jn,"uri");this.id=e.id||"";this.name=e.name||"";this.use=e.use||"";this.usehref=e.usehref||""}}class WsdlAddress extends StringObject{constructor(e){super(jn,"wsdlAddress");this.id=e.id||"";this.name=e.name||"";this.use=e.use||"";this.usehref=e.usehref||""}}class WsdlConnection extends XFAObject{constructor(e){super(jn,"wsdlConnection",!0);this.dataDescription=e.dataDescription||"";this.name=e.name||"";this.effectiveInputPolicy=null;this.effectiveOutputPolicy=null;this.operation=null;this.soapAction=null;this.soapAddress=null;this.wsdlAddress=null}}class XmlConnection extends XFAObject{constructor(e){super(jn,"xmlConnection",!0);this.dataDescription=e.dataDescription||"";this.name=e.name||"";this.uri=null}}class XsdConnection extends XFAObject{constructor(e){super(jn,"xsdConnection",!0);this.dataDescription=e.dataDescription||"";this.name=e.name||"";this.rootElement=null;this.uri=null}}class ConnectionSetNamespace{static[cn](e,t){if(ConnectionSetNamespace.hasOwnProperty(e))return ConnectionSetNamespace[e](t)}static connectionSet(e){return new ConnectionSet(e)}static effectiveInputPolicy(e){return new EffectiveInputPolicy(e)}static effectiveOutputPolicy(e){return new EffectiveOutputPolicy(e)}static operation(e){return new Operation(e)}static rootElement(e){return new RootElement(e)}static soapAction(e){return new SoapAction(e)}static soapAddress(e){return new SoapAddress(e)}static uri(e){return new connection_set_Uri(e)}static wsdlAddress(e){return new WsdlAddress(e)}static wsdlConnection(e){return new WsdlConnection(e)}static xmlConnection(e){return new XmlConnection(e)}static xsdConnection(e){return new XsdConnection(e)}}const Xn=Cn.datasets.id;class datasets_Data extends XmlObject{constructor(e){super(Xn,"data",e)}[Mr](){return!0}}class Datasets extends XFAObject{constructor(e){super(Xn,"datasets",!0);this.data=null;this.Signature=null}[Or](e){const t=e[Tr];("data"===t&&e[Kr]===Xn||"Signature"===t&&e[Kr]===Cn.signature.id)&&(this[t]=e);this[zs](e)}}class DatasetsNamespace{static[cn](e,t){if(DatasetsNamespace.hasOwnProperty(e))return DatasetsNamespace[e](t)}static datasets(e){return new Datasets(e)}static data(e){return new datasets_Data(e)}}const Zn=Cn.localeSet.id;class CalendarSymbols extends XFAObject{constructor(e){super(Zn,"calendarSymbols",!0);this.name="gregorian";this.dayNames=new XFAObjectArray(2);this.eraNames=null;this.meridiemNames=null;this.monthNames=new XFAObjectArray(2)}}class CurrencySymbol extends StringObject{constructor(e){super(Zn,"currencySymbol");this.name=getStringOption(e.name,["symbol","isoname","decimal"])}}class CurrencySymbols extends XFAObject{constructor(e){super(Zn,"currencySymbols",!0);this.currencySymbol=new XFAObjectArray(3)}}class DatePattern extends StringObject{constructor(e){super(Zn,"datePattern");this.name=getStringOption(e.name,["full","long","med","short"])}}class DatePatterns extends XFAObject{constructor(e){super(Zn,"datePatterns",!0);this.datePattern=new XFAObjectArray(4)}}class DateTimeSymbols extends ContentObject{constructor(e){super(Zn,"dateTimeSymbols")}}class Day extends StringObject{constructor(e){super(Zn,"day")}}class DayNames extends XFAObject{constructor(e){super(Zn,"dayNames",!0);this.abbr=getInteger({data:e.abbr,defaultValue:0,validate:e=>1===e});this.day=new XFAObjectArray(7)}}class Era extends StringObject{constructor(e){super(Zn,"era")}}class EraNames extends XFAObject{constructor(e){super(Zn,"eraNames",!0);this.era=new XFAObjectArray(2)}}class locale_set_Locale extends XFAObject{constructor(e){super(Zn,"locale",!0);this.desc=e.desc||"";this.name="isoname";this.calendarSymbols=null;this.currencySymbols=null;this.datePatterns=null;this.dateTimeSymbols=null;this.numberPatterns=null;this.numberSymbols=null;this.timePatterns=null;this.typeFaces=null}}class locale_set_LocaleSet extends XFAObject{constructor(e){super(Zn,"localeSet",!0);this.locale=new XFAObjectArray}}class Meridiem extends StringObject{constructor(e){super(Zn,"meridiem")}}class MeridiemNames extends XFAObject{constructor(e){super(Zn,"meridiemNames",!0);this.meridiem=new XFAObjectArray(2)}}class Month extends StringObject{constructor(e){super(Zn,"month")}}class MonthNames extends XFAObject{constructor(e){super(Zn,"monthNames",!0);this.abbr=getInteger({data:e.abbr,defaultValue:0,validate:e=>1===e});this.month=new XFAObjectArray(12)}}class NumberPattern extends StringObject{constructor(e){super(Zn,"numberPattern");this.name=getStringOption(e.name,["full","long","med","short"])}}class NumberPatterns extends XFAObject{constructor(e){super(Zn,"numberPatterns",!0);this.numberPattern=new XFAObjectArray(4)}}class NumberSymbol extends StringObject{constructor(e){super(Zn,"numberSymbol");this.name=getStringOption(e.name,["decimal","grouping","percent","minus","zero"])}}class NumberSymbols extends XFAObject{constructor(e){super(Zn,"numberSymbols",!0);this.numberSymbol=new XFAObjectArray(5)}}class TimePattern extends StringObject{constructor(e){super(Zn,"timePattern");this.name=getStringOption(e.name,["full","long","med","short"])}}class TimePatterns extends XFAObject{constructor(e){super(Zn,"timePatterns",!0);this.timePattern=new XFAObjectArray(4)}}class TypeFace extends XFAObject{constructor(e){super(Zn,"typeFace",!0);this.name=""|e.name}}class TypeFaces extends XFAObject{constructor(e){super(Zn,"typeFaces",!0);this.typeFace=new XFAObjectArray}}class LocaleSetNamespace{static[cn](e,t){if(LocaleSetNamespace.hasOwnProperty(e))return LocaleSetNamespace[e](t)}static calendarSymbols(e){return new CalendarSymbols(e)}static currencySymbol(e){return new CurrencySymbol(e)}static currencySymbols(e){return new CurrencySymbols(e)}static datePattern(e){return new DatePattern(e)}static datePatterns(e){return new DatePatterns(e)}static dateTimeSymbols(e){return new DateTimeSymbols(e)}static day(e){return new Day(e)}static dayNames(e){return new DayNames(e)}static era(e){return new Era(e)}static eraNames(e){return new EraNames(e)}static locale(e){return new locale_set_Locale(e)}static localeSet(e){return new locale_set_LocaleSet(e)}static meridiem(e){return new Meridiem(e)}static meridiemNames(e){return new MeridiemNames(e)}static month(e){return new Month(e)}static monthNames(e){return new MonthNames(e)}static numberPattern(e){return new NumberPattern(e)}static numberPatterns(e){return new NumberPatterns(e)}static numberSymbol(e){return new NumberSymbol(e)}static numberSymbols(e){return new NumberSymbols(e)}static timePattern(e){return new TimePattern(e)}static timePatterns(e){return new TimePatterns(e)}static typeFace(e){return new TypeFace(e)}static typeFaces(e){return new TypeFaces(e)}}const Vn=Cn.signature.id;class signature_Signature extends XFAObject{constructor(e){super(Vn,"signature",!0)}}class SignatureNamespace{static[cn](e,t){if(SignatureNamespace.hasOwnProperty(e))return SignatureNamespace[e](t)}static signature(e){return new signature_Signature(e)}}const zn=Cn.stylesheet.id;class Stylesheet extends XFAObject{constructor(e){super(zn,"stylesheet",!0)}}class StylesheetNamespace{static[cn](e,t){if(StylesheetNamespace.hasOwnProperty(e))return StylesheetNamespace[e](t)}static stylesheet(e){return new Stylesheet(e)}}const _n=Cn.xdp.id;class xdp_Xdp extends XFAObject{constructor(e){super(_n,"xdp",!0);this.uuid=e.uuid||"";this.timeStamp=e.timeStamp||"";this.config=null;this.connectionSet=null;this.datasets=null;this.localeSet=null;this.stylesheet=new XFAObjectArray;this.template=null}[Pr](e){const t=Cn[e[Tr]];return t&&e[Kr]===t.id}}class XdpNamespace{static[cn](e,t){if(XdpNamespace.hasOwnProperty(e))return XdpNamespace[e](t)}static xdp(e){return new xdp_Xdp(e)}}const $n=Cn.xhtml.id,Ag=Symbol(),eg=new Set(["color","font","font-family","font-size","font-stretch","font-style","font-weight","margin","margin-bottom","margin-left","margin-right","margin-top","letter-spacing","line-height","orphans","page-break-after","page-break-before","page-break-inside","tab-interval","tab-stop","text-align","text-decoration","text-indent","vertical-align","widows","kerning-mode","xfa-font-horizontal-scale","xfa-font-vertical-scale","xfa-spacerun","xfa-tab-stops"]),tg=new Map([["page-break-after","breakAfter"],["page-break-before","breakBefore"],["page-break-inside","breakInside"],["kerning-mode",e=>"none"===e?"none":"normal"],["xfa-font-horizontal-scale",e=>`scaleX(${Math.max(0,Math.min(parseInt(e)/100)).toFixed(2)})`],["xfa-font-vertical-scale",e=>`scaleY(${Math.max(0,Math.min(parseInt(e)/100)).toFixed(2)})`],["xfa-spacerun",""],["xfa-tab-stops",""],["font-size",(e,t)=>measureToString(.99*(e=t.fontSize=getMeasurement(e)))],["letter-spacing",e=>measureToString(getMeasurement(e))],["line-height",e=>measureToString(getMeasurement(e))],["margin",e=>measureToString(getMeasurement(e))],["margin-bottom",e=>measureToString(getMeasurement(e))],["margin-left",e=>measureToString(getMeasurement(e))],["margin-right",e=>measureToString(getMeasurement(e))],["margin-top",e=>measureToString(getMeasurement(e))],["text-indent",e=>measureToString(getMeasurement(e))],["font-family",e=>e],["vertical-align",e=>measureToString(getMeasurement(e))]]),ig=/\s+/g,ag=/[\r\n]+/g,sg=/\r\n?/g;function mapStyle(e,t,i){const a=Object.create(null);if(!e)return a;const s=Object.create(null);for(const[t,i]of e.split(";").map((e=>e.split(":",2)))){const e=tg.get(t);if(""===e)continue;let r=i;e&&(r="string"==typeof e?e:e(i,s));t.endsWith("scale")?a.transform=a.transform?`${a[t]} ${r}`:r:a[t.replaceAll(/-([a-zA-Z])/g,((e,t)=>t.toUpperCase()))]=r}a.fontFamily&&setFontFamily({typeface:a.fontFamily,weight:a.fontWeight||"normal",posture:a.fontStyle||"normal",size:s.fontSize||0},t,t[br].fontFinder,a);if(i&&a.verticalAlign&&"0px"!==a.verticalAlign&&a.fontSize){const e=.583,t=.333,i=getMeasurement(a.fontSize);a.fontSize=measureToString(i*e);a.verticalAlign=measureToString(Math.sign(getMeasurement(a.verticalAlign))*i*t)}i&&a.fontSize&&(a.fontSize=`calc(${a.fontSize} * var(--scale-factor))`);fixTextIndent(a);return a}const rg=new Set(["body","html"]);class XhtmlObject extends XmlObject{constructor(e,t){super($n,t);this[Ag]=!1;this.style=e.style||""}[$s](e){super[$s](e);this.style=function checkStyle(e){return e.style?e.style.trim().split(/\s*;\s*/).filter((e=>!!e)).map((e=>e.split(/\s*:\s*/,2))).filter((([t,i])=>{"font-family"===t&&e[br].usedTypefaces.add(i);return eg.has(t)})).map((e=>e.join(":"))).join(";"):""}(this)}[Zs](){return!rg.has(this[Tr])}[Wr](e,t=!1){if(t)this[Ag]=!0;else{e=e.replaceAll(ag,"");this.style.includes("xfa-spacerun:yes")||(e=e.replaceAll(ig," "))}e&&(this[ar]+=e)}[jr](e,t=!0){const i=Object.create(null),a={top:NaN,bottom:NaN,left:NaN,right:NaN};let s=null;for(const[e,t]of this.style.split(";").map((e=>e.split(":",2))))switch(e){case"font-family":i.typeface=stripQuotes(t);break;case"font-size":i.size=getMeasurement(t);break;case"font-weight":i.weight=t;break;case"font-style":i.posture=t;break;case"letter-spacing":i.letterSpacing=getMeasurement(t);break;case"margin":const e=t.split(/ \t/).map((e=>getMeasurement(e)));switch(e.length){case 1:a.top=a.bottom=a.left=a.right=e[0];break;case 2:a.top=a.bottom=e[0];a.left=a.right=e[1];break;case 3:a.top=e[0];a.bottom=e[2];a.left=a.right=e[1];break;case 4:a.top=e[0];a.left=e[1];a.bottom=e[2];a.right=e[3]}break;case"margin-top":a.top=getMeasurement(t);break;case"margin-bottom":a.bottom=getMeasurement(t);break;case"margin-left":a.left=getMeasurement(t);break;case"margin-right":a.right=getMeasurement(t);break;case"line-height":s=getMeasurement(t)}e.pushData(i,a,s);if(this[ar])e.addString(this[ar]);else for(const t of this[fr]())"#text"!==t[Tr]?t[jr](e):e.addString(t[ar]);t&&e.popFont()}[nn](e){const t=[];this[nr]={children:t};this[_s]({});if(0===t.length&&!this[ar])return HTMLResult.EMPTY;let i;i=this[Ag]?this[ar]?this[ar].replaceAll(sg,"\n"):void 0:this[ar]||void 0;return HTMLResult.success({name:this[Tr],attributes:{href:this.href,style:mapStyle(this.style,this,this[Ag])},children:t,value:i})}}class A extends XhtmlObject{constructor(e){super(e,"a");this.href=fixURL(e.href)||""}}class B extends XhtmlObject{constructor(e){super(e,"b")}[jr](e){e.pushFont({weight:"bold"});super[jr](e);e.popFont()}}class Body extends XhtmlObject{constructor(e){super(e,"body")}[nn](e){const t=super[nn](e),{html:i}=t;if(!i)return HTMLResult.EMPTY;i.name="div";i.attributes.class=["xfaRich"];return t}}class Br extends XhtmlObject{constructor(e){super(e,"br")}[sn](){return"\n"}[jr](e){e.addString("\n")}[nn](e){return HTMLResult.success({name:"br"})}}class Html extends XhtmlObject{constructor(e){super(e,"html")}[nn](e){const t=[];this[nr]={children:t};this[_s]({});if(0===t.length)return HTMLResult.success({name:"div",attributes:{class:["xfaRich"],style:{}},value:this[ar]||""});if(1===t.length){const e=t[0];if(e.attributes?.class.includes("xfaRich"))return HTMLResult.success(e)}return HTMLResult.success({name:"div",attributes:{class:["xfaRich"],style:{}},children:t})}}class I extends XhtmlObject{constructor(e){super(e,"i")}[jr](e){e.pushFont({posture:"italic"});super[jr](e);e.popFont()}}class Li extends XhtmlObject{constructor(e){super(e,"li")}}class Ol extends XhtmlObject{constructor(e){super(e,"ol")}}class P extends XhtmlObject{constructor(e){super(e,"p")}[jr](e){super[jr](e,!1);e.addString("\n");e.addPara();e.popFont()}[sn](){return this[wr]()[fr]().at(-1)===this?super[sn]():super[sn]()+"\n"}}class Span extends XhtmlObject{constructor(e){super(e,"span")}}class Sub extends XhtmlObject{constructor(e){super(e,"sub")}}class Sup extends XhtmlObject{constructor(e){super(e,"sup")}}class Ul extends XhtmlObject{constructor(e){super(e,"ul")}}class XhtmlNamespace{static[cn](e,t){if(XhtmlNamespace.hasOwnProperty(e))return XhtmlNamespace[e](t)}static a(e){return new A(e)}static b(e){return new B(e)}static body(e){return new Body(e)}static br(e){return new Br(e)}static html(e){return new Html(e)}static i(e){return new I(e)}static li(e){return new Li(e)}static ol(e){return new Ol(e)}static p(e){return new P(e)}static span(e){return new Span(e)}static sub(e){return new Sub(e)}static sup(e){return new Sup(e)}static ul(e){return new Ul(e)}}const ng={config:ConfigNamespace,connection:ConnectionSetNamespace,datasets:DatasetsNamespace,localeSet:LocaleSetNamespace,signature:SignatureNamespace,stylesheet:StylesheetNamespace,template:TemplateNamespace,xdp:XdpNamespace,xhtml:XhtmlNamespace};class UnknownNamespace{constructor(e){this.namespaceId=e}[cn](e,t){return new XmlObject(this.namespaceId,e,t)}}class Root extends XFAObject{constructor(e){super(-1,"root",Object.create(null));this.element=null;this[Sr]=e}[Or](e){this.element=e;return!0}[gr](){super[gr]();if(this.element.template instanceof Template){this[Sr].set(zr,this.element);this.element.template[_r](this[Sr]);this.element.template[Sr]=this[Sr]}}}class Empty extends XFAObject{constructor(){super(-1,"",Object.create(null))}[Or](e){return!1}}class Builder{constructor(e=null){this._namespaceStack=[];this._nsAgnosticLevel=0;this._namespacePrefixes=new Map;this._namespaces=new Map;this._nextNsId=Math.max(...Object.values(Cn).map((({id:e})=>e)));this._currentNamespace=e||new UnknownNamespace(++this._nextNsId)}buildRoot(e){return new Root(e)}build({nsPrefix:e,name:t,attributes:i,namespace:a,prefixes:s}){const r=null!==a;if(r){this._namespaceStack.push(this._currentNamespace);this._currentNamespace=this._searchNamespace(a)}s&&this._addNamespacePrefix(s);if(i.hasOwnProperty(qr)){const e=ng.datasets,t=i[qr];let a=null;for(const[i,s]of Object.entries(t)){if(this._getNamespaceToUse(i)===e){a={xfa:s};break}}a?i[qr]=a:delete i[qr]}const n=this._getNamespaceToUse(e),g=n?.[cn](t,i)||new Empty;g[Mr]()&&this._nsAgnosticLevel++;(r||s||g[Mr]())&&(g[er]={hasNamespace:r,prefixes:s,nsAgnostic:g[Mr]()});return g}isNsAgnostic(){return this._nsAgnosticLevel>0}_searchNamespace(e){let t=this._namespaces.get(e);if(t)return t;for(const[i,{check:a}]of Object.entries(Cn))if(a(e)){t=ng[i];if(t){this._namespaces.set(e,t);return t}break}t=new UnknownNamespace(++this._nextNsId);this._namespaces.set(e,t);return t}_addNamespacePrefix(e){for(const{prefix:t,value:i}of e){const e=this._searchNamespace(i);let a=this._namespacePrefixes.get(t);if(!a){a=[];this._namespacePrefixes.set(t,a)}a.push(e)}}_getNamespaceToUse(e){if(!e)return this._currentNamespace;const t=this._namespacePrefixes.get(e);if(t?.length>0)return t.at(-1);warn(`Unknown namespace prefix: ${e}.`);return null}clean(e){const{hasNamespace:t,prefixes:i,nsAgnostic:a}=e;t&&(this._currentNamespace=this._namespaceStack.pop());i&&i.forEach((({prefix:e})=>{this._namespacePrefixes.get(e).pop()}));a&&this._nsAgnosticLevel--}}class XFAParser extends XMLParserBase{constructor(e=null,t=!1){super();this._builder=new Builder(e);this._stack=[];this._globalData={usedTypefaces:new Set};this._ids=new Map;this._current=this._builder.buildRoot(this._ids);this._errorCode=xs;this._whiteRegex=/^\s+$/;this._nbsps=/\xa0+/g;this._richText=t}parse(e){this.parseXml(e);if(this._errorCode===xs){this._current[gr]();return this._current.element}}onText(e){e=e.replace(this._nbsps,(e=>e.slice(1)+" "));this._richText||this._current[Zs]()?this._current[Wr](e,this._richText):this._whiteRegex.test(e)||this._current[Wr](e.trim())}onCdata(e){this._current[Wr](e)}_mkAttributes(e,t){let i=null,a=null;const s=Object.create({});for(const{name:r,value:n}of e)if("xmlns"===r)i?warn(`XFA - multiple namespace definition in <${t}>`):i=n;else if(r.startsWith("xmlns:")){const e=r.substring(6);a||(a=[]);a.push({prefix:e,value:n})}else{const e=r.indexOf(":");if(-1===e)s[r]=n;else{let t=s[qr];t||(t=s[qr]=Object.create(null));const[i,a]=[r.slice(0,e),r.slice(e+1)];(t[i]||=Object.create(null))[a]=n}}return[i,a,s]}_getNameAndPrefix(e,t){const i=e.indexOf(":");return-1===i?[e,null]:[e.substring(i+1),t?"":e.substring(0,i)]}onBeginElement(e,t,i){const[a,s,r]=this._mkAttributes(t,e),[n,g]=this._getNameAndPrefix(e,this._builder.isNsAgnostic()),o=this._builder.build({nsPrefix:g,name:n,attributes:r,namespace:a,prefixes:s});o[br]=this._globalData;if(i){o[gr]();this._current[Or](o)&&o[An](this._ids);o[$s](this._builder)}else{this._stack.push(this._current);this._current=o}}onEndElement(e){const t=this._current;if(t[Nr]()&&"string"==typeof t[ar]){const e=new XFAParser;e._globalData=this._globalData;const i=e.parse(t[ar]);t[ar]=null;t[Or](i)}t[gr]();this._current=this._stack.pop();this._current[Or](t)&&t[An](this._ids);t[$s](this._builder)}onError(e){this._errorCode=e}}class XFAFactory{constructor(e){try{this.root=(new XFAParser).parse(XFAFactory._createDocument(e));const t=new Binder(this.root);this.form=t.bind();this.dataHandler=new DataHandler(this.root,t.getData());this.form[br].template=this.form}catch(e){warn(`XFA - an error occurred during parsing and binding: ${e}`)}}isValid(){return this.root&&this.form}_createPagesHelper(){const e=this.form[rn]();return new Promise(((t,i)=>{const nextIteration=()=>{try{const i=e.next();i.done?t(i.value):setTimeout(nextIteration,0)}catch(e){i(e)}};setTimeout(nextIteration,0)}))}async _createPages(){try{this.pages=await this._createPagesHelper();this.dims=this.pages.children.map((e=>{const{width:t,height:i}=e.attributes.style;return[0,0,parseInt(t),parseInt(i)]}))}catch(e){warn(`XFA - an error occurred during layout: ${e}`)}}getBoundingBox(e){return this.dims[e]}async getNumPages(){this.pages||await this._createPages();return this.dims.length}setImages(e){this.form[br].images=e}setFonts(e){this.form[br].fontFinder=new FontFinder(e);const t=[];for(let e of this.form[br].usedTypefaces){e=stripQuotes(e);this.form[br].fontFinder.find(e)||t.push(e)}return t.length>0?t:null}appendFonts(e,t){this.form[br].fontFinder.add(e,t)}async getPages(){this.pages||await this._createPages();const e=this.pages;this.pages=null;return e}serializeData(e){return this.dataHandler.serialize(e)}static _createDocument(e){return e["/xdp:xdp"]?Object.values(e).join(""):e["xdp:xdp"]}static getRichTextAsHtml(e){if(!e||"string"!=typeof e)return null;try{let t=new XFAParser(XhtmlNamespace,!0).parse(e);if(!["body","xhtml"].includes(t[Tr])){const e=XhtmlNamespace.body({});e[zs](t);t=e}const i=t[nn]();if(!i.success)return null;const{html:a}=i,{attributes:s}=a;if(s){s.class&&(s.class=s.class.filter((e=>!e.startsWith("xfa"))));s.dir="auto"}return{html:a,str:t[sn]()}}catch(e){warn(`XFA - an error occurred during parsing of rich text: ${e}`)}return null}}class AnnotationFactory{static createGlobals(e){return Promise.all([e.ensureCatalog("acroForm"),e.ensureDoc("xfaDatasets"),e.ensureCatalog("structTreeRoot"),e.ensureCatalog("baseUrl"),e.ensureCatalog("attachments")]).then((([t,i,a,s,r])=>({pdfManager:e,acroForm:t instanceof Dict?t:Dict.empty,xfaDatasets:i,structTreeRoot:a,baseUrl:s,attachments:r})),(e=>{warn(`createGlobals: "${e}".`);return null}))}static async create(e,t,i,a,s,r,n){const g=s?await this._getPageIndex(e,t,i.pdfManager):null;return i.pdfManager.ensure(this,"_create",[e,t,i,a,s,r,g,n])}static _create(e,t,i,a,s=!1,r=null,n=null,g=null){const o=e.fetchIfRef(t);if(!(o instanceof Dict))return;const{acroForm:c,pdfManager:C}=i,h=t instanceof Ref?t.toString():`annot_${a.createObjId()}`;let l=o.get("Subtype");l=l instanceof Name?l.name:null;const Q={xref:e,ref:t,dict:o,subtype:l,id:h,annotationGlobals:i,collectFields:s,orphanFields:r,needAppearances:!s&&!0===c.get("NeedAppearances"),pageIndex:n,evaluatorOptions:C.evaluatorOptions,pageRef:g};switch(l){case"Link":return new LinkAnnotation(Q);case"Text":return new TextAnnotation(Q);case"Widget":let e=getInheritableProperty({dict:o,key:"FT"});e=e instanceof Name?e.name:null;switch(e){case"Tx":return new TextWidgetAnnotation(Q);case"Btn":return new ButtonWidgetAnnotation(Q);case"Ch":return new ChoiceWidgetAnnotation(Q);case"Sig":return new SignatureWidgetAnnotation(Q)}warn(`Unimplemented widget field type "${e}", falling back to base field type.`);return new WidgetAnnotation(Q);case"Popup":return new PopupAnnotation(Q);case"FreeText":return new FreeTextAnnotation(Q);case"Line":return new LineAnnotation(Q);case"Square":return new SquareAnnotation(Q);case"Circle":return new CircleAnnotation(Q);case"PolyLine":return new PolylineAnnotation(Q);case"Polygon":return new PolygonAnnotation(Q);case"Caret":return new CaretAnnotation(Q);case"Ink":return new InkAnnotation(Q);case"Highlight":return new HighlightAnnotation(Q);case"Underline":return new UnderlineAnnotation(Q);case"Squiggly":return new SquigglyAnnotation(Q);case"StrikeOut":return new StrikeOutAnnotation(Q);case"Stamp":return new StampAnnotation(Q);case"FileAttachment":return new FileAttachmentAnnotation(Q);default:s||warn(l?`Unimplemented annotation type "${l}", falling back to base annotation.`:"Annotation is missing the required /Subtype.");return new Annotation(Q)}}static async _getPageIndex(e,t,i){try{const a=await e.fetchIfRefAsync(t);if(!(a instanceof Dict))return-1;const s=a.getRaw("P");if(s instanceof Ref)try{return await i.ensureCatalog("getPageIndex",[s])}catch(e){info(`_getPageIndex -- not a valid page reference: "${e}".`)}if(a.has("Kids"))return-1;const r=await i.ensureDoc("numPages");for(let e=0;ee/255))}function getQuadPoints(e,t){const i=e.getArray("QuadPoints");if(!isNumberArray(i,null)||0===i.length||i.length%8>0)return null;const a=new Float32Array(i.length);for(let e=0,s=i.length;et[2]||Et[3]))return null;a.set([l,u,Q,u,l,E,Q,E],e)}return a}function getTransformMatrix(e,t,i){const[a,s,r,n]=Util.getAxialAlignedBoundingBox(t,i);if(a===r||s===n)return[1,0,0,1,e[0],e[1]];const g=(e[2]-e[0])/(r-a),o=(e[3]-e[1])/(n-s);return[g,0,0,o,e[0]-a*g,e[1]-s*o]}class Annotation{constructor(e){const{dict:t,xref:i,annotationGlobals:a,ref:s,orphanFields:r}=e,n=r?.get(s);n&&t.set("Parent",n);this.setTitle(t.get("T"));this.setContents(t.get("Contents"));this.setModificationDate(t.get("M"));this.setFlags(t.get("F"));this.setRectangle(t.getArray("Rect"));this.setColor(t.getArray("C"));this.setBorderStyle(t);this.setAppearance(t);this.setOptionalContent(t);const g=t.get("MK");this.setBorderAndBackgroundColors(g);this.setRotation(g,t);this.ref=e.ref instanceof Ref?e.ref:null;this._streams=[];this.appearance&&this._streams.push(this.appearance);const o=!!(this.flags&eA),c=!!(this.flags&tA);this.data={annotationFlags:this.flags,borderStyle:this.borderStyle,color:this.color,backgroundColor:this.backgroundColor,borderColor:this.borderColor,rotation:this.rotation,contentsObj:this._contents,hasAppearance:!!this.appearance,id:e.id,modificationDate:this.modificationDate,rect:this.rectangle,subtype:e.subtype,hasOwnCanvas:!1,noRotate:!!(this.flags&$),noHTML:o&&c,isEditable:!1,structParent:-1};if(a.structTreeRoot){let i=t.get("StructParent");this.data.structParent=i=Number.isInteger(i)&&i>=0?i:-1;a.structTreeRoot.addAnnotationIdToPage(e.pageRef,i)}if(e.collectFields){const a=t.get("Kids");if(Array.isArray(a)){const e=[];for(const t of a)t instanceof Ref&&e.push(t.toString());0!==e.length&&(this.data.kidIds=e)}this.data.actions=collectActions(i,t,dA);this.data.fieldName=this._constructFieldName(t);this.data.pageIndex=e.pageIndex}const C=t.get("IT");C instanceof Name&&(this.data.it=C.name);this._isOffscreenCanvasSupported=e.evaluatorOptions.isOffscreenCanvasSupported;this._fallbackFontDict=null;this._needAppearances=!1}_hasFlag(e,t){return!!(e&t)}_buildFlags(e,t){let{flags:i}=this;if(void 0===e){if(void 0===t)return;return t?i&~_:i&~z|_}if(e){i|=_;return t?i&~AA|z:i&~z|AA}i&=~(z|AA);return t?i&~_:i|_}_isViewable(e){return!this._hasFlag(e,V)&&!this._hasFlag(e,AA)}_isPrintable(e){return this._hasFlag(e,_)&&!this._hasFlag(e,z)&&!this._hasFlag(e,V)}mustBeViewed(e,t){const i=e?.get(this.data.id)?.noView;return void 0!==i?!i:this.viewable&&!this._hasFlag(this.flags,z)}mustBePrinted(e){const t=e?.get(this.data.id)?.noPrint;return void 0!==t?!t:this.printable}mustBeViewedWhenEditing(e,t=null){return e?!this.data.isEditable:!t?.has(this.data.id)}get viewable(){return null!==this.data.quadPoints&&(0===this.flags||this._isViewable(this.flags))}get printable(){return null!==this.data.quadPoints&&(0!==this.flags&&this._isPrintable(this.flags))}_parseStringHelper(e){const t="string"==typeof e?stringToPDFString(e):"";return{str:t,dir:t&&"rtl"===bidi(t).dir?"rtl":"ltr"}}setDefaultAppearance(e){const{dict:t,annotationGlobals:i}=e,a=getInheritableProperty({dict:t,key:"DA"})||i.acroForm.get("DA");this._defaultAppearance="string"==typeof a?a:"";this.data.defaultAppearanceData=parseDefaultAppearance(this._defaultAppearance)}setTitle(e){this._title=this._parseStringHelper(e)}setContents(e){this._contents=this._parseStringHelper(e)}setModificationDate(e){this.modificationDate="string"==typeof e?e:null}setFlags(e){this.flags=Number.isInteger(e)&&e>0?e:0;this.flags&V&&"Annotation"!==this.constructor.name&&(this.flags^=V)}hasFlag(e){return this._hasFlag(this.flags,e)}setRectangle(e){this.rectangle=lookupNormalRect(e,[0,0,0,0])}setColor(e){this.color=getRgbColor(e)}setLineEndings(e){this.lineEndings=["None","None"];if(Array.isArray(e)&&2===e.length)for(let t=0;t<2;t++){const i=e[t];if(i instanceof Name)switch(i.name){case"None":continue;case"Square":case"Circle":case"Diamond":case"OpenArrow":case"ClosedArrow":case"Butt":case"ROpenArrow":case"RClosedArrow":case"Slash":this.lineEndings[t]=i.name;continue}warn(`Ignoring invalid lineEnding: ${i}`)}}setRotation(e,t){this.rotation=0;let i=e instanceof Dict?e.get("R")||0:t.get("Rotate")||0;if(Number.isInteger(i)&&0!==i){i%=360;i<0&&(i+=360);i%90==0&&(this.rotation=i)}}setBorderAndBackgroundColors(e){if(e instanceof Dict){this.borderColor=getRgbColor(e.getArray("BC"),null);this.backgroundColor=getRgbColor(e.getArray("BG"),null)}else this.borderColor=this.backgroundColor=null}setBorderStyle(e){this.borderStyle=new AnnotationBorderStyle;if(e instanceof Dict)if(e.has("BS")){const t=e.get("BS");if(t instanceof Dict){const e=t.get("Type");if(!e||isName(e,"Border")){this.borderStyle.setWidth(t.get("W"),this.rectangle);this.borderStyle.setStyle(t.get("S"));this.borderStyle.setDashArray(t.getArray("D"))}}}else if(e.has("Border")){const t=e.getArray("Border");if(Array.isArray(t)&&t.length>=3){this.borderStyle.setHorizontalCornerRadius(t[0]);this.borderStyle.setVerticalCornerRadius(t[1]);this.borderStyle.setWidth(t[2],this.rectangle);4===t.length&&this.borderStyle.setDashArray(t[3],!0)}}else this.borderStyle.setWidth(0)}setAppearance(e){this.appearance=null;const t=e.get("AP");if(!(t instanceof Dict))return;const i=t.get("N");if(i instanceof BaseStream){this.appearance=i;return}if(!(i instanceof Dict))return;const a=e.get("AS");if(!(a instanceof Name&&i.has(a.name)))return;const s=i.get(a.name);s instanceof BaseStream&&(this.appearance=s)}setOptionalContent(e){this.oc=null;const t=e.get("OC");t instanceof Name?warn("setOptionalContent: Support for /Name-entry is not implemented."):t instanceof Dict&&(this.oc=t)}loadResources(e,t){return t.dict.getAsync("Resources").then((t=>{if(!t)return;return new ObjectLoader(t,e,t.xref).load().then((function(){return t}))}))}async getOperatorList(e,t,a,s){const{hasOwnCanvas:r,id:n,rect:g}=this.data;let c=this.appearance;const C=!!(r&&a&o);if(C&&(g[0]===g[2]||g[1]===g[3])){this.data.hasOwnCanvas=!1;return{opList:new OperatorList,separateForm:!1,separateCanvas:!1}}if(!c){if(!C)return{opList:new OperatorList,separateForm:!1,separateCanvas:!1};c=new StringStream("");c.dict=new Dict}const h=c.dict,l=await this.loadResources(["ExtGState","ColorSpace","Pattern","Shading","XObject","Font"],c),Q=lookupRect(h.getArray("BBox"),[0,0,1,1]),E=lookupMatrix(h.getArray("Matrix"),i),u=getTransformMatrix(g,Q,E),d=new OperatorList;let f;this.oc&&(f=await e.parseMarkedContentProps(this.oc,null));void 0!==f&&d.addOp(Je,["OC",f]);d.addOp(We,[n,g,u,E,C]);await e.getOperatorList({stream:c,task:t,resources:l,operatorList:d,fallbackFontDict:this._fallbackFontDict});d.addOp(je,[]);void 0!==f&&d.addOp(Ye,[]);this.reset();return{opList:d,separateForm:!1,separateCanvas:C}}async save(e,t,i){return null}get hasTextContent(){return!1}async extractTextContent(e,t,i){if(!this.appearance)return;const a=await this.loadResources(["ExtGState","Font","Properties","XObject"],this.appearance),s=[],r=[];let n=null;const g={desiredSize:Math.Infinity,ready:!0,enqueue(e,t){for(const t of e.items)if(void 0!==t.str){n||=t.transform.slice(-2);r.push(t.str);if(t.hasEOL){s.push(r.join("").trimEnd());r.length=0}}}};await e.getTextContent({stream:this.appearance,task:t,resources:a,includeMarkedContent:!0,keepWhiteSpace:!0,sink:g,viewBox:i});this.reset();r.length&&s.push(r.join("").trimEnd());if(s.length>1||s[0]){const e=this.appearance.dict,t=lookupRect(e.getArray("BBox"),null),i=lookupMatrix(e.getArray("Matrix"),null);this.data.textPosition=this._transformPoint(n,t,i);this.data.textContent=s}}_transformPoint(e,t,i){const{rect:a}=this.data;t||=[0,0,1,1];i||=[1,0,0,1,0,0];const s=getTransformMatrix(a,t,i);s[4]-=a[0];s[5]-=a[1];e=Util.applyTransform(e,s);return Util.applyTransform(e,i)}getFieldObject(){return this.data.kidIds?{id:this.data.id,actions:this.data.actions,name:this.data.fieldName,strokeColor:this.data.borderColor,fillColor:this.data.backgroundColor,type:"",kidIds:this.data.kidIds,page:this.data.pageIndex,rotation:this.rotation}:null}reset(){for(const e of this._streams)e.reset()}_constructFieldName(e){if(!e.has("T")&&!e.has("Parent")){warn("Unknown field name, falling back to empty field name.");return""}if(!e.has("Parent"))return stringToPDFString(e.get("T"));const t=[];e.has("T")&&t.unshift(stringToPDFString(e.get("T")));let i=e;const a=new RefSet;e.objId&&a.put(e.objId);for(;i.has("Parent");){i=i.get("Parent");if(!(i instanceof Dict)||i.objId&&a.has(i.objId))break;i.objId&&a.put(i.objId);i.has("T")&&t.unshift(stringToPDFString(i.get("T")))}return t.join(".")}}class AnnotationBorderStyle{constructor(){this.width=1;this.rawWidth=1;this.style=lA;this.dashArray=[3];this.horizontalCornerRadius=0;this.verticalCornerRadius=0}setWidth(e,t=[0,0,0,0]){if(e instanceof Name)this.width=0;else if("number"==typeof e){if(e>0){this.rawWidth=e;const i=(t[2]-t[0])/2,a=(t[3]-t[1])/2;if(i>0&&a>0&&(e>i||e>a)){warn(`AnnotationBorderStyle.setWidth - ignoring width: ${e}`);e=1}}this.width=e}}setStyle(e){if(e instanceof Name)switch(e.name){case"S":this.style=lA;break;case"D":this.style=BA;break;case"B":this.style=QA;break;case"I":this.style=EA;break;case"U":this.style=uA}}setDashArray(e,t=!1){if(Array.isArray(e)){let i=!0,a=!0;for(const t of e){if(!(+t>=0)){i=!1;break}t>0&&(a=!1)}if(0===e.length||i&&!a){this.dashArray=e;t&&this.setStyle(Name.get("D"))}else this.width=0}else e&&(this.width=0)}setHorizontalCornerRadius(e){Number.isInteger(e)&&(this.horizontalCornerRadius=e)}setVerticalCornerRadius(e){Number.isInteger(e)&&(this.verticalCornerRadius=e)}}class MarkupAnnotation extends Annotation{constructor(e){super(e);const{dict:t}=e;if(t.has("IRT")){const e=t.getRaw("IRT");this.data.inReplyTo=e instanceof Ref?e.toString():null;const i=t.get("RT");this.data.replyType=i instanceof Name?i.name:Z}let i=null;if(this.data.replyType===X){const e=t.get("IRT");this.setTitle(e.get("T"));this.data.titleObj=this._title;this.setContents(e.get("Contents"));this.data.contentsObj=this._contents;if(e.has("CreationDate")){this.setCreationDate(e.get("CreationDate"));this.data.creationDate=this.creationDate}else this.data.creationDate=null;if(e.has("M")){this.setModificationDate(e.get("M"));this.data.modificationDate=this.modificationDate}else this.data.modificationDate=null;i=e.getRaw("Popup");if(e.has("C")){this.setColor(e.getArray("C"));this.data.color=this.color}else this.data.color=null}else{this.data.titleObj=this._title;this.setCreationDate(t.get("CreationDate"));this.data.creationDate=this.creationDate;i=t.getRaw("Popup");t.has("C")||(this.data.color=null)}this.data.popupRef=i instanceof Ref?i.toString():null;t.has("RC")&&(this.data.richText=XFAFactory.getRichTextAsHtml(t.get("RC")))}setCreationDate(e){this.creationDate="string"==typeof e?e:null}_setDefaultAppearance({xref:e,extra:t,strokeColor:i,fillColor:a,blendMode:s,strokeAlpha:r,fillAlpha:n,pointsCallback:g}){let o=Number.MAX_VALUE,c=Number.MAX_VALUE,C=Number.MIN_VALUE,h=Number.MIN_VALUE;const l=["q"];t&&l.push(t);i&&l.push(`${i[0]} ${i[1]} ${i[2]} RG`);a&&l.push(`${a[0]} ${a[1]} ${a[2]} rg`);let Q=this.data.quadPoints;Q||(Q=Float32Array.from([this.rectangle[0],this.rectangle[3],this.rectangle[2],this.rectangle[3],this.rectangle[0],this.rectangle[1],this.rectangle[2],this.rectangle[1]]));for(let e=0,t=Q.length;e"string"==typeof e)).map((e=>stringToPDFString(e))):e instanceof Name?stringToPDFString(e.name):"string"==typeof e?stringToPDFString(e):null}hasFieldFlag(e){return!!(this.data.fieldFlags&e)}_isViewable(e){return!0}mustBeViewed(e,t){return t?this.viewable:super.mustBeViewed(e,t)&&!this._hasFlag(this.flags,AA)}getRotationMatrix(e){let t=e?.get(this.data.id)?.rotation;void 0===t&&(t=this.rotation);if(0===t)return i;return getRotationMatrix(t,this.data.rect[2]-this.data.rect[0],this.data.rect[3]-this.data.rect[1])}getBorderAndBackgroundAppearances(e){let t=e?.get(this.data.id)?.rotation;void 0===t&&(t=this.rotation);if(!this.backgroundColor&&!this.borderColor)return"";const i=this.data.rect[2]-this.data.rect[0],a=this.data.rect[3]-this.data.rect[1],s=0===t||180===t?`0 0 ${i} ${a} re`:`0 0 ${a} ${i} re`;let r="";this.backgroundColor&&(r=`${getPdfColor(this.backgroundColor,!0)} ${s} f `);if(this.borderColor){r+=`${this.borderStyle.width||1} w ${getPdfColor(this.borderColor,!1)} ${s} S `}return r}async getOperatorList(e,t,i,a){if(i&h&&!(this instanceof SignatureWidgetAnnotation)&&!this.data.noHTML&&!this.data.hasOwnCanvas)return{opList:new OperatorList,separateForm:!0,separateCanvas:!1};if(!this._hasText)return super.getOperatorList(e,t,i,a);const s=await this._getAppearance(e,t,i,a);if(this.appearance&&null===s)return super.getOperatorList(e,t,i,a);const r=new OperatorList;if(!this._defaultAppearance||null===s)return{opList:r,separateForm:!1,separateCanvas:!1};const n=!!(this.data.hasOwnCanvas&&i&o),g=[0,0,this.data.rect[2]-this.data.rect[0],this.data.rect[3]-this.data.rect[1]],c=getTransformMatrix(this.data.rect,g,[1,0,0,1,0,0]);let C;this.oc&&(C=await e.parseMarkedContentProps(this.oc,null));void 0!==C&&r.addOp(Je,["OC",C]);r.addOp(We,[this.data.id,this.data.rect,c,this.getRotationMatrix(a),n]);const l=new StringStream(s);await e.getOperatorList({stream:l,task:t,resources:this._fieldResources.mergedResources,operatorList:r});r.addOp(je,[]);void 0!==C&&r.addOp(Ye,[]);return{opList:r,separateForm:!1,separateCanvas:n}}_getMKDict(e){const t=new Dict(null);e&&t.set("R",e);this.borderColor&&t.set("BC",getPdfColorArray(this.borderColor));this.backgroundColor&&t.set("BG",getPdfColorArray(this.backgroundColor));return t.size>0?t:null}amendSavedDict(e,t){}async save(e,t,a){const s=a?.get(this.data.id),r=this._buildFlags(s?.noView,s?.noPrint);let n=s?.value,g=s?.rotation;if(n===this.data.fieldValue||void 0===n){if(!this._hasValueFromXFA&&void 0===g&&void 0===r)return null;n||=this.data.fieldValue}if(void 0===g&&!this._hasValueFromXFA&&Array.isArray(n)&&Array.isArray(this.data.fieldValue)&&isArrayEqual(n,this.data.fieldValue)&&void 0===r)return null;void 0===g&&(g=this.rotation);let o=null;if(!this._needAppearances){o=await this._getAppearance(e,t,C,a);if(null===o&&void 0===r)return null}let c=!1;if(o?.needAppearances){c=!0;o=null}const{xref:h}=e,l=h.fetchIfRef(this.ref);if(!(l instanceof Dict))return null;const Q=new Dict(h);for(const e of l.getKeys())"AP"!==e&&Q.set(e,l.getRaw(e));if(void 0!==r){Q.set("F",r);if(null===o&&!c){const e=l.getRaw("AP");e&&Q.set("AP",e)}}const E={path:this.data.fieldName,value:n};Q.set("V",Array.isArray(n)?n.map(stringToAsciiOrUTF16BE):stringToAsciiOrUTF16BE(n));this.amendSavedDict(a,Q);const u=this._getMKDict(g);u&&Q.set("MK",u);const d=[],f=[{ref:this.ref,data:"",xfa:E,needAppearances:c}];if(null!==o){const e=h.getNewTemporaryRef(),t=new Dict(h);Q.set("AP",t);t.set("N",e);const s=this._getSaveFieldResources(h),r=new StringStream(o),n=r.dict=new Dict(h);n.set("Subtype",Name.get("Form"));n.set("Resources",s);n.set("BBox",[0,0,this.data.rect[2]-this.data.rect[0],this.data.rect[3]-this.data.rect[1]]);const g=this.getRotationMatrix(a);g!==i&&n.set("Matrix",g);await writeObject(e,r,d,h);f.push({ref:e,data:d.join(""),xfa:null,needAppearances:!1});d.length=0}Q.set("M",`D:${getModificationDate()}`);await writeObject(this.ref,Q,d,h);f[0].data=d.join("");return f}async _getAppearance(e,t,i,a){if(this.hasFieldFlag(rA))return null;const s=a?.get(this.data.id);let r,g;if(s){r=s.formattedValue||s.value;g=s.rotation}if(void 0===g&&void 0===r&&!this._needAppearances&&(!this._hasValueFromXFA||this.appearance))return null;const o=this.getBorderAndBackgroundAppearances(a);if(void 0===r){r=this.data.fieldValue;if(!r)return`/Tx BMC q ${o}Q EMC`}Array.isArray(r)&&1===r.length&&(r=r[0]);assert("string"==typeof r,"Expected `value` to be a string.");r=r.trimEnd();if(this.data.combo){const e=this.data.options.find((({exportValue:e})=>r===e));r=e?.displayValue||r}if(""===r)return`/Tx BMC q ${o}Q EMC`;void 0===g&&(g=this.rotation);let c,h=-1;if(this.data.multiLine){c=r.split(/\r\n?|\n/).map((e=>e.normalize("NFC")));h=c.length}else c=[r.replace(/\r\n?|\n/,"").normalize("NFC")];let l=this.data.rect[3]-this.data.rect[1],Q=this.data.rect[2]-this.data.rect[0];90!==g&&270!==g||([Q,l]=[l,Q]);this._defaultAppearance||(this.data.defaultAppearanceData=parseDefaultAppearance(this._defaultAppearance="/Helvetica 0 Tf 0 g"));let E,u,d,f=await WidgetAnnotation._getFontData(e,t,this.data.defaultAppearanceData,this._fieldResources.mergedResources);const p=[];let m=!1;for(const e of c){const t=f.encodeString(e);t.length>1&&(m=!0);p.push(t.join(""))}if(m&&i&C)return{needAppearances:!0};if(m&&this._isOffscreenCanvasSupported){const i=this.data.comb?"monospace":"sans-serif",a=new FakeUnicodeFont(e.xref,i),s=a.createFontResources(c.join("")),n=s.getRaw("Font");if(this._fieldResources.mergedResources.has("Font")){const e=this._fieldResources.mergedResources.get("Font");for(const t of n.getKeys())e.set(t,n.getRaw(t))}else this._fieldResources.mergedResources.set("Font",n);const g=a.fontName.name;f=await WidgetAnnotation._getFontData(e,t,{fontName:g,fontSize:0},s);for(let e=0,t=p.length;e2)return`/Tx BMC q ${o}BT `+E+` 1 0 0 1 ${numberToString(2)} ${numberToString(b)} Tm (${escapeString(p[0])}) Tj ET Q EMC`;return`/Tx BMC q ${o}BT `+E+` 1 0 0 1 0 0 Tm ${this._renderText(p[0],f,u,Q,D,{shift:0},2,b)} ET Q EMC`}static async _getFontData(e,t,i,a){const s=new OperatorList,r={font:null,clone(){return this}},{fontName:n,fontSize:g}=i;await e.handleSetFont(a,[n&&Name.get(n),g],null,s,t,r,null);return r.font}_getTextWidth(e,t){return t.charsToGlyphs(e).reduce(((e,t)=>e+t.width),0)/1e3}_computeFontSize(e,t,i,a,r){let{fontSize:n}=this.data.defaultAppearanceData,g=(n||12)*s,o=Math.round(e/g);if(!n){const roundWithTwoDigits=e=>Math.floor(100*e)/100;if(-1===r){const r=this._getTextWidth(i,a);n=roundWithTwoDigits(Math.min(e/s,t/r));o=1}else{const c=i.split(/\r\n?|\n/),C=[];for(const e of c){const t=a.encodeString(e).join(""),i=a.charsToGlyphs(t),s=a.getCharPositions(t);C.push({line:t,glyphs:i,positions:s})}const isTooBig=i=>{let s=0;for(const r of C){s+=this._splitLine(null,a,i,t,r).length*i;if(s>e)return!0}return!1};o=Math.max(o,r);for(;;){g=e/o;n=roundWithTwoDigits(g/s);if(!isTooBig(n))break;o++}}const{fontName:c,fontColor:C}=this.data.defaultAppearanceData;this._defaultAppearance=function createDefaultAppearance({fontSize:e,fontName:t,fontColor:i}){return`/${escapePDFName(t)} ${e} Tf ${getPdfColor(i,!0)}`}({fontSize:n,fontName:c,fontColor:C})}return[this._defaultAppearance,n,e/o]}_renderText(e,t,i,a,s,r,n,g){let o;if(1===s){o=(a-this._getTextWidth(e,t)*i)/2}else if(2===s){o=a-this._getTextWidth(e,t)*i-n}else o=n;const c=numberToString(o-r.shift);r.shift=o;return`${c} ${g=numberToString(g)} Td (${escapeString(e)}) Tj`}_getSaveFieldResources(e){const{localResources:t,appearanceResources:i,acroFormResources:a}=this._fieldResources,s=this.data.defaultAppearanceData?.fontName;if(!s)return t||Dict.empty;for(const e of[t,i])if(e instanceof Dict){const t=e.get("Font");if(t instanceof Dict&&t.has(s))return e}if(a instanceof Dict){const i=a.get("Font");if(i instanceof Dict&&i.has(s)){const a=new Dict(e);a.set(s,i.getRaw(s));const r=new Dict(e);r.set("Font",a);return Dict.merge({xref:e,dictArray:[r,t],mergeSubDicts:!0})}}return t||Dict.empty}getFieldObject(){return null}}class TextWidgetAnnotation extends WidgetAnnotation{constructor(e){super(e);const{dict:t}=e;if(t.has("PMD")){this.flags|=z;this.data.hidden=!0;warn("Barcodes are not supported")}this.data.hasOwnCanvas=this.data.readOnly&&!this.data.noHTML;this._hasText=!0;"string"!=typeof this.data.fieldValue&&(this.data.fieldValue="");let i=getInheritableProperty({dict:t,key:"Q"});(!Number.isInteger(i)||i<0||i>2)&&(i=null);this.data.textAlignment=i;let a=getInheritableProperty({dict:t,key:"MaxLen"});(!Number.isInteger(a)||a<0)&&(a=0);this.data.maxLen=a;this.data.multiLine=this.hasFieldFlag(sA);this.data.comb=this.hasFieldFlag(hA)&&!this.hasFieldFlag(sA)&&!this.hasFieldFlag(rA)&&!this.hasFieldFlag(IA)&&0!==this.data.maxLen;this.data.doNotScroll=this.hasFieldFlag(CA)}get hasTextContent(){return!!this.appearance&&!this._needAppearances}_getCombAppearance(e,t,i,a,s,r,n,g,o,c,C){const h=s/this.data.maxLen,l=this.getBorderAndBackgroundAppearances(C),Q=[],E=t.getCharPositions(i);for(const[e,t]of E)Q.push(`(${escapeString(i.substring(e,t))}) Tj`);const u=Q.join(` ${numberToString(h)} 0 Td `);return`/Tx BMC q ${l}BT `+e+` 1 0 0 1 ${numberToString(n)} ${numberToString(g+o)} Tm ${u} ET Q EMC`}_getMultilineAppearance(e,t,i,a,s,r,n,g,o,c,C,h){const l=[],Q=s-2*g,E={shift:0};for(let e=0,r=t.length;ea){o.push(e.substring(l,i));l=i;Q=u;c=-1;h=-1}else{Q+=u;c=i;C=s;h=t}else if(Q+u>a)if(-1!==c){o.push(e.substring(l,C));l=C;t=h+1;c=-1;Q=0}else{o.push(e.substring(l,i));l=i;Q=u}else Q+=u}lt?`\\${t}`:"\\s+"));new RegExp(`^\\s*${r}\\s*$`).test(this.data.fieldValue)&&(this.data.textContent=this.data.fieldValue.split("\n"))}getFieldObject(){return{id:this.data.id,value:this.data.fieldValue,defaultValue:this.data.defaultFieldValue||"",multiline:this.data.multiLine,password:this.hasFieldFlag(rA),charLimit:this.data.maxLen,comb:this.data.comb,editable:!this.data.readOnly,hidden:this.data.hidden,name:this.data.fieldName,rect:this.data.rect,actions:this.data.actions,page:this.data.pageIndex,strokeColor:this.data.borderColor,fillColor:this.data.backgroundColor,rotation:this.rotation,type:"text"}}}class ButtonWidgetAnnotation extends WidgetAnnotation{constructor(e){super(e);this.checkedAppearance=null;this.uncheckedAppearance=null;this.data.checkBox=!this.hasFieldFlag(nA)&&!this.hasFieldFlag(gA);this.data.radioButton=this.hasFieldFlag(nA)&&!this.hasFieldFlag(gA);this.data.pushButton=this.hasFieldFlag(gA);this.data.isTooltipOnly=!1;if(this.data.checkBox)this._processCheckBox(e);else if(this.data.radioButton)this._processRadioButton(e);else if(this.data.pushButton){this.data.hasOwnCanvas=!0;this.data.noHTML=!1;this._processPushButton(e)}else warn("Invalid field flags for button widget annotation")}async getOperatorList(e,t,a,s){if(this.data.pushButton)return super.getOperatorList(e,t,a,!1,s);let r=null,n=null;if(s){const e=s.get(this.data.id);r=e?e.value:null;n=e?e.rotation:null}if(null===r&&this.appearance)return super.getOperatorList(e,t,a,s);null==r&&(r=this.data.checkBox?this.data.fieldValue===this.data.exportValue:this.data.fieldValue===this.data.buttonValue);const g=r?this.checkedAppearance:this.uncheckedAppearance;if(g){const r=this.appearance,o=lookupMatrix(g.dict.getArray("Matrix"),i);n&&g.dict.set("Matrix",this.getRotationMatrix(s));this.appearance=g;const c=super.getOperatorList(e,t,a,s);this.appearance=r;g.dict.set("Matrix",o);return c}return{opList:new OperatorList,separateForm:!1,separateCanvas:!1}}async save(e,t,i){return this.data.checkBox?this._saveCheckbox(e,t,i):this.data.radioButton?this._saveRadioButton(e,t,i):null}async _saveCheckbox(e,t,i){if(!i)return null;const a=i.get(this.data.id),s=this._buildFlags(a?.noView,a?.noPrint);let r=a?.rotation,n=a?.value;if(void 0===r&&void 0===s){if(void 0===n)return null;if(this.data.fieldValue===this.data.exportValue===n)return null}let g=e.xref.fetchIfRef(this.ref);if(!(g instanceof Dict))return null;g=g.clone();void 0===r&&(r=this.rotation);void 0===n&&(n=this.data.fieldValue===this.data.exportValue);const o={path:this.data.fieldName,value:n?this.data.exportValue:""},c=Name.get(n?this.data.exportValue:"Off");g.set("V",c);g.set("AS",c);g.set("M",`D:${getModificationDate()}`);void 0!==s&&g.set("F",s);const C=this._getMKDict(r);C&&g.set("MK",C);const h=[];await writeObject(this.ref,g,h,e.xref);return[{ref:this.ref,data:h.join(""),xfa:o}]}async _saveRadioButton(e,t,i){if(!i)return null;const a=i.get(this.data.id),s=this._buildFlags(a?.noView,a?.noPrint);let r=a?.rotation,n=a?.value;if(void 0===r&&void 0===s){if(void 0===n)return null;if(this.data.fieldValue===this.data.buttonValue===n)return null}let g=e.xref.fetchIfRef(this.ref);if(!(g instanceof Dict))return null;g=g.clone();void 0===n&&(n=this.data.fieldValue===this.data.buttonValue);void 0===r&&(r=this.rotation);const o={path:this.data.fieldName,value:n?this.data.buttonValue:""},c=Name.get(n?this.data.buttonValue:"Off"),C=[];let h=null;if(n)if(this.parent instanceof Ref){const t=e.xref.fetch(this.parent);t.set("V",c);await writeObject(this.parent,t,C,e.xref);h=C.join("");C.length=0}else this.parent instanceof Dict&&this.parent.set("V",c);this.parent||g.set("V",c);g.set("AS",c);g.set("M",`D:${getModificationDate()}`);void 0!==s&&g.set("F",s);const l=this._getMKDict(r);l&&g.set("MK",l);await writeObject(this.ref,g,C,e.xref);const Q=[{ref:this.ref,data:C.join(""),xfa:o}];h&&Q.push({ref:this.parent,data:h,xfa:null});return Q}_getDefaultCheckedAppearance(e,t){const i=this.data.rect[2]-this.data.rect[0],a=this.data.rect[3]-this.data.rect[1],s=[0,0,i,a],r=.8*Math.min(i,a);let n,g;if("check"===t){n={width:.755*r,height:.705*r};g="3"}else if("disc"===t){n={width:.791*r,height:.705*r};g="l"}else unreachable(`_getDefaultCheckedAppearance - unsupported type: ${t}`);const o=`q BT /PdfJsZaDb ${r} Tf 0 g ${numberToString((i-n.width)/2)} ${numberToString((a-n.height)/2)} Td (${g}) Tj ET Q`,c=new Dict(e.xref);c.set("FormType",1);c.set("Subtype",Name.get("Form"));c.set("Type",Name.get("XObject"));c.set("BBox",s);c.set("Matrix",[1,0,0,1,0,0]);c.set("Length",o.length);const C=new Dict(e.xref),h=new Dict(e.xref);h.set("PdfJsZaDb",this.fallbackFontDict);C.set("Font",h);c.set("Resources",C);this.checkedAppearance=new StringStream(o);this.checkedAppearance.dict=c;this._streams.push(this.checkedAppearance)}_processCheckBox(e){const t=e.dict.get("AP");if(!(t instanceof Dict))return;const i=t.get("N");if(!(i instanceof Dict))return;const a=this._decodeFormValue(e.dict.get("AS"));"string"==typeof a&&(this.data.fieldValue=a);const s=null!==this.data.fieldValue&&"Off"!==this.data.fieldValue?this.data.fieldValue:"Yes",r=i.getKeys();if(0===r.length)r.push("Off",s);else if(1===r.length)"Off"===r[0]?r.push(s):r.unshift("Off");else if(r.includes(s)){r.length=0;r.push("Off",s)}else{const e=r.find((e=>"Off"!==e));r.length=0;r.push("Off",e)}r.includes(this.data.fieldValue)||(this.data.fieldValue="Off");this.data.exportValue=r[1];const n=i.get(this.data.exportValue);this.checkedAppearance=n instanceof BaseStream?n:null;const g=i.get("Off");this.uncheckedAppearance=g instanceof BaseStream?g:null;this.checkedAppearance?this._streams.push(this.checkedAppearance):this._getDefaultCheckedAppearance(e,"check");this.uncheckedAppearance&&this._streams.push(this.uncheckedAppearance);this._fallbackFontDict=this.fallbackFontDict;null===this.data.defaultFieldValue&&(this.data.defaultFieldValue="Off")}_processRadioButton(e){this.data.buttonValue=null;const t=e.dict.get("Parent");if(t instanceof Dict){this.parent=e.dict.getRaw("Parent");const i=t.get("V");i instanceof Name&&(this.data.fieldValue=this._decodeFormValue(i))}const i=e.dict.get("AP");if(!(i instanceof Dict))return;const a=i.get("N");if(!(a instanceof Dict))return;for(const e of a.getKeys())if("Off"!==e){this.data.buttonValue=this._decodeFormValue(e);break}const s=a.get(this.data.buttonValue);this.checkedAppearance=s instanceof BaseStream?s:null;const r=a.get("Off");this.uncheckedAppearance=r instanceof BaseStream?r:null;this.checkedAppearance?this._streams.push(this.checkedAppearance):this._getDefaultCheckedAppearance(e,"disc");this.uncheckedAppearance&&this._streams.push(this.uncheckedAppearance);this._fallbackFontDict=this.fallbackFontDict;null===this.data.defaultFieldValue&&(this.data.defaultFieldValue="Off")}_processPushButton(e){const{dict:t,annotationGlobals:i}=e;if(t.has("A")||t.has("AA")||this.data.alternativeText){this.data.isTooltipOnly=!t.has("A")&&!t.has("AA");Catalog.parseDestDictionary({destDict:t,resultObj:this.data,docBaseUrl:i.baseUrl,docAttachments:i.attachments})}else warn("Push buttons without action dictionaries are not supported")}getFieldObject(){let e,t="button";if(this.data.checkBox){t="checkbox";e=this.data.exportValue}else if(this.data.radioButton){t="radiobutton";e=this.data.buttonValue}return{id:this.data.id,value:this.data.fieldValue||"Off",defaultValue:this.data.defaultFieldValue,exportValues:e,editable:!this.data.readOnly,name:this.data.fieldName,rect:this.data.rect,hidden:this.data.hidden,actions:this.data.actions,page:this.data.pageIndex,strokeColor:this.data.borderColor,fillColor:this.data.backgroundColor,rotation:this.rotation,type:t}}get fallbackFontDict(){const e=new Dict;e.set("BaseFont",Name.get("ZapfDingbats"));e.set("Type",Name.get("FallbackType"));e.set("Subtype",Name.get("FallbackType"));e.set("Encoding",Name.get("ZapfDingbatsEncoding"));return shadow(this,"fallbackFontDict",e)}}class ChoiceWidgetAnnotation extends WidgetAnnotation{constructor(e){super(e);const{dict:t,xref:i}=e;this.indices=t.getArray("I");this.hasIndices=Array.isArray(this.indices)&&this.indices.length>0;this.data.options=[];const a=getInheritableProperty({dict:t,key:"Opt"});if(Array.isArray(a))for(let e=0,t=a.length;e=0&&t0?this.data.fieldValue[0]:null;return{id:this.data.id,value:t,defaultValue:this.data.defaultFieldValue,editable:!this.data.readOnly,name:this.data.fieldName,rect:this.data.rect,numItems:this.data.fieldValue.length,multipleSelection:this.data.multiSelect,hidden:this.data.hidden,actions:this.data.actions,items:this.data.options,page:this.data.pageIndex,strokeColor:this.data.borderColor,fillColor:this.data.backgroundColor,rotation:this.rotation,type:e}}amendSavedDict(e,t){if(!this.hasIndices)return;let i=e?.get(this.data.id)?.value;Array.isArray(i)||(i=[i]);const a=[],{options:s}=this.data;for(let e=0,t=0,r=s.length;ei){i=a;t=e}}[Q,E]=this._computeFontSize(e,c-4,t,l,-1)}const u=E*s,d=(u-E)/2,f=Math.floor(o/u);let p=0;if(h.length>0){const e=Math.min(...h),t=Math.max(...h);p=Math.max(0,t-f+1);p>e&&(p=e)}const m=Math.min(p+f+1,C),y=["/Tx BMC q",`1 1 ${c} ${o} re W n`];if(h.length){y.push("0.600006 0.756866 0.854904 rg");for(const e of h)p<=e&&ee.trimEnd()));const{coords:e,bbox:t,matrix:i}=FakeUnicodeFont.getFirstPositionInfo(this.rectangle,this.rotation,a);this.data.textPosition=this._transformPoint(e,t,i)}if(this._isOffscreenCanvasSupported){const s=e.dict.get("CA"),r=new FakeUnicodeFont(i,"sans-serif");this.appearance=r.createAppearance(this._contents.str,this.rectangle,this.rotation,a,t,s);this._streams.push(this.appearance)}else warn("FreeTextAnnotation: OffscreenCanvas is not supported, annotation may not render correctly.")}}get hasTextContent(){return this._hasAppearance}static createNewDict(e,t,{apRef:i,ap:a}){const{color:s,fontSize:r,oldAnnotation:n,rect:g,rotation:o,user:c,value:C}=e,h=n||new Dict(t);h.set("Type",Name.get("Annot"));h.set("Subtype",Name.get("FreeText"));if(n){h.set("M",`D:${getModificationDate()}`);h.delete("RC")}else h.set("CreationDate",`D:${getModificationDate()}`);h.set("Rect",g);const l=`/Helv ${r} Tf ${getPdfColor(s,!0)}`;h.set("DA",l);h.set("Contents",stringToAsciiOrUTF16BE(C));h.set("F",4);h.set("Border",[0,0,0]);h.set("Rotate",o);c&&h.set("T",stringToAsciiOrUTF16BE(c));if(i||a){const e=new Dict(t);h.set("AP",e);i?e.set("N",i):e.set("N",a)}return h}static async createNewAppearanceStream(e,t,i){const{baseFontRef:a,evaluator:r,task:n}=i,{color:g,fontSize:o,rect:c,rotation:C,value:h}=e,l=new Dict(t),Q=new Dict(t);if(a)Q.set("Helv",a);else{const e=new Dict(t);e.set("BaseFont",Name.get("Helvetica"));e.set("Type",Name.get("Font"));e.set("Subtype",Name.get("Type1"));e.set("Encoding",Name.get("WinAnsiEncoding"));Q.set("Helv",e)}l.set("Font",Q);const E=await WidgetAnnotation._getFontData(r,n,{fontName:"Helv",fontSize:o},l),[u,d,f,p]=c;let m=f-u,y=p-d;C%180!=0&&([m,y]=[y,m]);const w=h.split("\n"),D=o/1e3;let b=-1/0;const F=[];for(let e of w){const t=E.encodeString(e);if(t.length>1)return null;e=t.join("");F.push(e);let i=0;const a=E.charsToGlyphs(e);for(const e of a)i+=e.width*D;b=Math.max(b,i)}let S=1;b>m&&(S=m/b);let k=1;const R=s*o,N=1*o,G=R*w.length;G>y&&(k=y/G);const x=o*Math.min(S,k);let U,M,L;switch(C){case 0:L=[1,0,0,1];M=[c[0],c[1],m,y];U=[c[0],c[3]-N];break;case 90:L=[0,1,-1,0];M=[c[1],-c[2],m,y];U=[c[1],-c[0]-N];break;case 180:L=[-1,0,0,-1];M=[-c[2],-c[3],m,y];U=[-c[2],-c[1]-N];break;case 270:L=[0,-1,1,0];M=[-c[3],c[0],m,y];U=[-c[3],c[2]-N]}const H=["q",`${L.join(" ")} 0 0 cm`,`${M.join(" ")} re W n`,"BT",`${getPdfColor(g,!0)}`,`0 Tc /Helv ${numberToString(x)} Tf`];H.push(`${U.join(" ")} Td (${escapeString(F[0])}) Tj`);const J=numberToString(R);for(let e=1,t=F.length;e{e.push(`${a[0]} ${a[1]} m`,`${a[2]} ${a[3]} l`,"S");return[t[0]-o,t[2]+o,t[7]-o,t[3]+o]}})}}}class SquareAnnotation extends MarkupAnnotation{constructor(e){super(e);const{dict:t,xref:i}=e;this.data.annotationType=x;this.data.hasOwnCanvas=this.data.noRotate;this.data.noHTML=!1;if(!this.appearance){const e=this.color?getPdfColorArray(this.color):[0,0,0],a=t.get("CA"),s=getRgbColor(t.getArray("IC"),null),r=s?getPdfColorArray(s):null,n=r?a:null;if(0===this.borderStyle.width&&!r)return;this._setDefaultAppearance({xref:i,extra:`${this.borderStyle.width} w`,strokeColor:e,fillColor:r,strokeAlpha:a,fillAlpha:n,pointsCallback:(e,t)=>{const i=t[4]+this.borderStyle.width/2,a=t[5]+this.borderStyle.width/2,s=t[6]-t[4]-this.borderStyle.width,n=t[3]-t[7]-this.borderStyle.width;e.push(`${i} ${a} ${s} ${n} re`);r?e.push("B"):e.push("S");return[t[0],t[2],t[7],t[3]]}})}}}class CircleAnnotation extends MarkupAnnotation{constructor(e){super(e);const{dict:t,xref:i}=e;this.data.annotationType=U;if(!this.appearance){const e=this.color?getPdfColorArray(this.color):[0,0,0],a=t.get("CA"),s=getRgbColor(t.getArray("IC"),null),r=s?getPdfColorArray(s):null,n=r?a:null;if(0===this.borderStyle.width&&!r)return;const g=4/3*Math.tan(Math.PI/8);this._setDefaultAppearance({xref:i,extra:`${this.borderStyle.width} w`,strokeColor:e,fillColor:r,strokeAlpha:a,fillAlpha:n,pointsCallback:(e,t)=>{const i=t[0]+this.borderStyle.width/2,a=t[1]-this.borderStyle.width/2,s=t[6]-this.borderStyle.width/2,n=t[7]+this.borderStyle.width/2,o=i+(s-i)/2,c=a+(n-a)/2,C=(s-i)/2*g,h=(n-a)/2*g;e.push(`${o} ${n} m`,`${o+C} ${n} ${s} ${c+h} ${s} ${c} c`,`${s} ${c-h} ${o+C} ${a} ${o} ${a} c`,`${o-C} ${a} ${i} ${c-h} ${i} ${c} c`,`${i} ${c+h} ${o-C} ${n} ${o} ${n} c`,"h");r?e.push("B"):e.push("S");return[t[0],t[2],t[7],t[3]]}})}}}class PolylineAnnotation extends MarkupAnnotation{constructor(e){super(e);const{dict:t,xref:i}=e;this.data.annotationType=L;this.data.hasOwnCanvas=this.data.noRotate;this.data.noHTML=!1;this.data.vertices=null;if(!(this instanceof PolygonAnnotation)){this.setLineEndings(t.getArray("LE"));this.data.lineEndings=this.lineEndings}const a=t.getArray("Vertices");if(!isNumberArray(a,null))return;const s=this.data.vertices=Float32Array.from(a);if(!this.appearance){const e=this.color?getPdfColorArray(this.color):[0,0,0],a=t.get("CA"),r=this.borderStyle.width||1,n=2*r,g=[1/0,1/0,-1/0,-1/0];for(let e=0,t=s.length;e{for(let t=0,i=s.length;t{for(const t of this.data.inkLists){for(let i=0,a=t.length;ie.points)));h.set("F",4);h.set("Rotate",c);g&&h.set("IT",Name.get("InkHighlight"));const l=new Dict(t);h.set("BS",l);l.set("W",C);h.set("C",Array.from(s,(e=>e/255)));h.set("CA",r);const Q=new Dict(t);h.set("AP",Q);i?Q.set("N",i):Q.set("N",a);return h}static async createNewAppearanceStream(e,t,i){if(e.outlines)return this.createNewAppearanceStreamForHighlight(e,t,i);const{color:a,rect:s,paths:r,thickness:n,opacity:g}=e,o=[`${n} w 1 J 1 j`,`${getPdfColor(a,!1)}`];1!==g&&o.push("/R0 gs");const c=[];for(const{bezier:e}of r){c.length=0;c.push(`${numberToString(e[0])} ${numberToString(e[1])} m`);if(2===e.length)c.push(`${numberToString(e[0])} ${numberToString(e[1])} l S`);else{for(let t=2,i=e.length;t{e.push(`${t[0]} ${t[1]} m`,`${t[2]} ${t[3]} l`,`${t[6]} ${t[7]} l`,`${t[4]} ${t[5]} l`,"f");return[t[0],t[2],t[7],t[3]]}})}}else this.data.popupRef=null}static createNewDict(e,t,{apRef:i,ap:a}){const{color:s,oldAnnotation:r,opacity:n,rect:g,rotation:o,user:c,quadPoints:C}=e,h=r||new Dict(t);h.set("Type",Name.get("Annot"));h.set("Subtype",Name.get("Highlight"));h.set(r?"M":"CreationDate",`D:${getModificationDate()}`);h.set("CreationDate",`D:${getModificationDate()}`);h.set("Rect",g);h.set("F",4);h.set("Border",[0,0,0]);h.set("Rotate",o);h.set("QuadPoints",C);h.set("C",Array.from(s,(e=>e/255)));h.set("CA",n);c&&h.set("T",stringToAsciiOrUTF16BE(c));if(i||a){const e=new Dict(t);h.set("AP",e);e.set("N",i||a)}return h}static async createNewAppearanceStream(e,t,i){const{color:a,rect:s,outlines:r,opacity:n}=e,g=[`${getPdfColor(a,!0)}`,"/R0 gs"],o=[];for(const e of r){o.length=0;o.push(`${numberToString(e[0])} ${numberToString(e[1])} m`);for(let t=2,i=e.length;t{e.push(`${t[4]} ${t[5]+1.3} m`,`${t[6]} ${t[7]+1.3} l`,"S");return[t[0],t[2],t[7],t[3]]}})}}else this.data.popupRef=null}}class SquigglyAnnotation extends MarkupAnnotation{constructor(e){super(e);const{dict:t,xref:i}=e;this.data.annotationType=Y;if(this.data.quadPoints=getQuadPoints(t,null)){if(!this.appearance){const e=this.color?getPdfColorArray(this.color):[0,0,0],a=t.get("CA");this._setDefaultAppearance({xref:i,extra:"[] 0 d 1 w",strokeColor:e,strokeAlpha:a,pointsCallback:(e,t)=>{const i=(t[1]-t[5])/6;let a=i,s=t[4];const r=t[5],n=t[6];e.push(`${s} ${r+a} m`);do{s+=2;a=0===a?i:0;e.push(`${s} ${r+a} l`)}while(s{e.push((t[0]+t[4])/2+" "+(t[1]+t[5])/2+" m",(t[2]+t[6])/2+" "+(t[3]+t[7])/2+" l","S");return[t[0],t[2],t[7],t[3]]}})}}else this.data.popupRef=null}}class StampAnnotation extends MarkupAnnotation{#W;constructor(e){super(e);this.data.annotationType=K;this.#W=this.data.hasOwnCanvas=this.data.noRotate;this.data.isEditable=!this.data.noHTML;this.data.noHTML=!1}mustBeViewedWhenEditing(e,t=null){if(e){if(!this.data.isEditable)return!1;this.#W=this.data.hasOwnCanvas;this.data.hasOwnCanvas=!0;return!0}this.data.hasOwnCanvas=this.#W;return!t?.has(this.data.id)}static async createImage(e,t){const{width:i,height:a}=e,s=new OffscreenCanvas(i,a),r=s.getContext("2d",{alpha:!0});r.drawImage(e,0,0);const n=r.getImageData(0,0,i,a).data,g=new Uint32Array(n.buffer),o=g.some(FeatureTest.isLittleEndian?e=>e>>>24!=255:e=>255!=(255&e));if(o){r.fillStyle="white";r.fillRect(0,0,i,a);r.drawImage(e,0,0)}const c=s.convertToBlob({type:"image/jpeg",quality:1}).then((e=>e.arrayBuffer())),C=Name.get("XObject"),h=Name.get("Image"),l=new Dict(t);l.set("Type",C);l.set("Subtype",h);l.set("BitsPerComponent",8);l.set("ColorSpace",Name.get("DeviceRGB"));l.set("Filter",Name.get("DCTDecode"));l.set("BBox",[0,0,i,a]);l.set("Width",i);l.set("Height",a);let Q=null;if(o){const e=new Uint8Array(g.length);if(FeatureTest.isLittleEndian)for(let t=0,i=g.length;t>>24;else for(let t=0,i=g.length;t=0&&r<=1?r:null}}function decodeString(e){try{return stringToUTF8String(e)}catch(t){warn(`UTF-8 decoding failed: "${t}".`);return e}}class DatasetXMLParser extends SimpleXMLParser{constructor(e){super(e);this.node=null}onEndElement(e){const t=super.onEndElement(e);if(t&&"xfa:datasets"===e){this.node=t;throw new Error("Aborting DatasetXMLParser.")}}}class DatasetReader{constructor(e){if(e.datasets)this.node=new SimpleXMLParser({hasAttributes:!0}).parseFromString(e.datasets).documentElement;else{const t=new DatasetXMLParser({hasAttributes:!0});try{t.parseFromString(e["xdp:xdp"])}catch{}this.node=t.node}}getValue(e){if(!this.node||!e)return"";const t=this.node.searchNode(parseXFAPath(e),0);if(!t)return"";const i=t.firstChild;return"value"===i?.nodeName?t.children.map((e=>decodeString(e.textContent))):decodeString(t.textContent)}}class XRef{#j=null;constructor(e,t){this.stream=e;this.pdfManager=t;this.entries=[];this._xrefStms=new Set;this._cacheMap=new Map;this._pendingRefs=new RefSet;this._newPersistentRefNum=null;this._newTemporaryRefNum=null;this._persistentRefsCache=null}getNewPersistentRef(e){null===this._newPersistentRefNum&&(this._newPersistentRefNum=this.entries.length||1);const t=this._newPersistentRefNum++;this._cacheMap.set(t,e);return Ref.get(t,0)}getNewTemporaryRef(){if(null===this._newTemporaryRefNum){this._newTemporaryRefNum=this.entries.length||1;if(this._newPersistentRefNum){this._persistentRefsCache=new Map;for(let e=this._newTemporaryRefNum;e0;){const[n,g]=r;if(!Number.isInteger(n)||!Number.isInteger(g))throw new FormatError(`Invalid XRef range fields: ${n}, ${g}`);if(!Number.isInteger(i)||!Number.isInteger(a)||!Number.isInteger(s))throw new FormatError(`Invalid XRef entry fields length: ${n}, ${g}`);for(let r=t.entryNum;r=e.length);){i+=String.fromCharCode(a);a=e[t]}return i}function skipUntil(e,t,i){const a=i.length,s=e.length;let r=0;for(;t=a)break;t++;r++}return r}const e=/\b(endobj|\d+\s+\d+\s+obj|xref|trailer\s*<<)\b/g,t=/\b(startxref|\d+\s+\d+\s+obj)\b/g,i=/^(\d+)\s+(\d+)\s+obj\b/,a=new Uint8Array([116,114,97,105,108,101,114]),s=new Uint8Array([115,116,97,114,116,120,114,101,102]),r=new Uint8Array([47,88,82,101,102]);this.entries.length=0;this._cacheMap.clear();const n=this.stream;n.pos=0;const g=n.getBytes(),o=bytesToString(g),c=g.length;let C=n.start;const h=[],l=[];for(;C=c)break;Q=g[C]}while(10!==Q&&13!==Q);continue}const E=readToken(g,C);let u;if(E.startsWith("xref")&&(4===E.length||/\s/.test(E[4]))){C+=skipUntil(g,C,a);h.push(C);C+=skipUntil(g,C,s)}else if(u=i.exec(E)){const t=0|u[1],i=0|u[2],a=C+E.length;let s,h=!1;if(this.entries[t]){if(this.entries[t].gen===i)try{new Parser({lexer:new Lexer(n.makeSubStream(a))}).getObj();h=!0}catch(e){e instanceof ParserEOFException?warn(`indexObjects -- checking object (${E}): "${e}".`):h=!0}}else h=!0;h&&(this.entries[t]={offset:C-n.start,gen:i,uncompressed:!0});e.lastIndex=a;const Q=e.exec(o);if(Q){s=e.lastIndex+1-C;if("endobj"!==Q[1]){warn(`indexObjects: Found "${Q[1]}" inside of another "obj", caused by missing "endobj" -- trying to recover.`);s-=Q[1].length+1}}else s=c-C;const d=g.subarray(C,C+s),f=skipUntil(d,0,r);if(f0?Math.max(...this._xrefStms):null)}getEntry(e){const t=this.entries[e];return t&&!t.free&&t.offset?t:null}fetchIfRef(e,t=!1){return e instanceof Ref?this.fetch(e,t):e}fetch(e,t=!1){if(!(e instanceof Ref))throw new Error("ref object is not a reference");const i=e.num,a=this._cacheMap.get(i);if(void 0!==a){a instanceof Dict&&!a.objId&&(a.objId=e.toString());return a}let s=this.getEntry(i);if(null===s){this._cacheMap.set(i,s);return s}if(this._pendingRefs.has(e)){this._pendingRefs.remove(e);warn(`Ignoring circular reference: ${e}.`);return mt}this._pendingRefs.put(e);try{s=s.uncompressed?this.fetchUncompressed(e,s,t):this.fetchCompressed(e,s,t);this._pendingRefs.remove(e)}catch(t){this._pendingRefs.remove(e);throw t}s instanceof Dict?s.objId=e.toString():s instanceof BaseStream&&(s.dict.objId=e.toString());return s}fetchUncompressed(e,t,i=!1){const a=e.gen;let s=e.num;if(t.gen!==a){const r=`Inconsistent generation in XRef: ${e}`;if(this._generationFallback&&t.gen0&&t[3]-t[1]>0)return t;warn(`Empty, or invalid, /${e} entry.`)}return null}get mediaBox(){return shadow(this,"mediaBox",this._getBoundingBox("MediaBox")||gg)}get cropBox(){return shadow(this,"cropBox",this._getBoundingBox("CropBox")||this.mediaBox)}get userUnit(){let e=this.pageDict.get("UserUnit");("number"!=typeof e||e<=0)&&(e=1);return shadow(this,"userUnit",e)}get view(){const{cropBox:e,mediaBox:t}=this;if(e!==t&&!isArrayEqual(e,t)){const i=Util.intersect(e,t);if(i&&i[2]-i[0]>0&&i[3]-i[1]>0)return shadow(this,"view",i);warn("Empty /CropBox and /MediaBox intersection.")}return shadow(this,"view",t)}get rotate(){let e=this._getInheritableProperty("Rotate")||0;e%90!=0?e=0:e>=360?e%=360:e<0&&(e=(e%360+360)%360);return shadow(this,"rotate",e)}_onSubStreamError(e,t){if(!this.evaluatorOptions.ignoreErrors)throw e;warn(`getContentStream - ignoring sub-stream (${t}): "${e}".`)}getContentStream(){return this.pdfManager.ensure(this,"content").then((e=>e instanceof BaseStream?e:Array.isArray(e)?new StreamsSequenceStream(e,this._onSubStreamError.bind(this)):new NullStream))}get xfaData(){return shadow(this,"xfaData",this.xfaFactory?{bbox:this.xfaFactory.getBoundingBox(this.pageIndex)}:null)}async#X(e,t,i){const a=[];for(const s of e)if(s.id){const e=Ref.fromString(s.id);if(!e){warn(`A non-linked annotation cannot be modified: ${s.id}`);continue}if(s.deleted){t.put(e,e);if(s.popupRef){const e=Ref.fromString(s.popupRef);e&&t.put(e,e)}continue}i?.put(e);s.ref=e;a.push(this.xref.fetchAsync(e).then((e=>{e instanceof Dict&&(s.oldAnnotation=e.clone())}),(()=>{warn(`Cannot fetch \`oldAnnotation\` for: ${e}.`)})));delete s.id}await Promise.all(a)}async saveNewAnnotations(e,t,i,a){if(this.xfaFactory)throw new Error("XFA: Cannot save new annotations.");const s=new PartialEvaluator({xref:this.xref,handler:e,pageIndex:this.pageIndex,idFactory:this._localIdFactory,fontCache:this.fontCache,builtInCMapCache:this.builtInCMapCache,standardFontDataCache:this.standardFontDataCache,globalImageCache:this.globalImageCache,systemFontCache:this.systemFontCache,options:this.evaluatorOptions}),r=new RefSetCache,n=new RefSet;await this.#X(i,r,n);const g=this.pageDict,o=this.annotations.filter((e=>!(e instanceof Ref&&r.has(e)))),c=await AnnotationFactory.saveNewAnnotations(s,t,i,a);for(const{ref:e}of c.annotations)e instanceof Ref&&!n.has(e)&&o.push(e);const C=g.get("Annots");g.set("Annots",o);const h=[];await writeObject(this.ref,g,h,this.xref);C&&g.set("Annots",C);const l=c.dependencies;l.push({ref:this.ref,data:h.join("")},...c.annotations);for(const e of r)l.push({ref:e,data:null});return l}save(e,t,i){const a=new PartialEvaluator({xref:this.xref,handler:e,pageIndex:this.pageIndex,idFactory:this._localIdFactory,fontCache:this.fontCache,builtInCMapCache:this.builtInCMapCache,standardFontDataCache:this.standardFontDataCache,globalImageCache:this.globalImageCache,systemFontCache:this.systemFontCache,options:this.evaluatorOptions});return this._parsedAnnotations.then((function(e){const s=[];for(const r of e)s.push(r.save(a,t,i).catch((function(e){warn(`save - ignoring annotation data during "${t.name}" task: "${e}".`);return null})));return Promise.all(s).then((function(e){return e.filter((e=>!!e))}))}))}loadResources(e){this.resourcesPromise||=this.pdfManager.ensure(this,"resources");return this.resourcesPromise.then((()=>new ObjectLoader(this.resources,e,this.xref).load()))}getOperatorList({handler:e,sink:t,task:i,intent:a,cacheKey:s,annotationStorage:r=null,modifiedIds:n=null}){const C=this.getContentStream(),E=this.loadResources(["ColorSpace","ExtGState","Font","Pattern","Properties","Shading","XObject"]),d=new PartialEvaluator({xref:this.xref,handler:e,pageIndex:this.pageIndex,idFactory:this._localIdFactory,fontCache:this.fontCache,builtInCMapCache:this.builtInCMapCache,standardFontDataCache:this.standardFontDataCache,globalImageCache:this.globalImageCache,systemFontCache:this.systemFontCache,options:this.evaluatorOptions}),f=this.xfaFactory?null:getNewAnnotationsMap(r),p=f?.get(this.pageIndex);let m=Promise.resolve(null),y=null;if(p){const e=this.pdfManager.ensureDoc("annotationGlobals");let t;const a=new Set;for(const{bitmapId:e,bitmap:t}of p)!e||t||a.has(e)||a.add(e);const{isOffscreenCanvasSupported:s}=this.evaluatorOptions;if(a.size>0){const e=p.slice();for(const[t,i]of r)t.startsWith(u)&&i.bitmap&&a.has(i.bitmapId)&&e.push(i);t=AnnotationFactory.generateImages(e,this.xref,s)}else t=AnnotationFactory.generateImages(p,this.xref,s);y=new RefSet;m=Promise.all([e,this.#X(p,y,null)]).then((([e])=>e?AnnotationFactory.printNewAnnotations(e,d,i,p,t):null))}const w=Promise.all([C,E]).then((([r])=>{const n=new OperatorList(a,t);e.send("StartRenderPage",{transparency:d.hasBlendModes(this.resources,this.nonBlendModesSet),pageIndex:this.pageIndex,cacheKey:s});return d.getOperatorList({stream:r,task:i,resources:this.resources,operatorList:n}).then((function(){return n}))}));return Promise.all([w,this._parsedAnnotations,m]).then((function([e,t,s]){if(s){t=t.filter((e=>!(e.ref&&y.has(e.ref))));for(let e=0,i=s.length;ee.ref&&isRefsEqual(e.ref,a.refToReplace)));if(r>=0){t.splice(r,1,a);s.splice(e--,1);i--}}}t=t.concat(s)}if(0===t.length||a&l){e.flush(!0);return{length:e.totalLength}}const C=!!(a&h),E=!!(a&Q),u=!!(a&g),f=!!(a&o),p=!!(a&c),m=[];for(const e of t)(u||f&&e.mustBeViewed(r,C)&&e.mustBeViewedWhenEditing(E,n)||p&&e.mustBePrinted(r))&&m.push(e.getOperatorList(d,i,a,r).catch((function(e){warn(`getOperatorList - ignoring annotation data during "${i.name}" task: "${e}".`);return{opList:null,separateForm:!1,separateCanvas:!1}})));return Promise.all(m).then((function(t){let i=!1,a=!1;for(const{opList:s,separateForm:r,separateCanvas:n}of t){e.addOpList(s);i||=r;a||=n}e.flush(!0,{form:i,canvas:a});return{length:e.totalLength}}))}))}async extractTextContent({handler:e,task:t,includeMarkedContent:i,disableNormalization:a,sink:s}){const r=this.getContentStream(),n=this.loadResources(["ExtGState","Font","Properties","XObject"]),g=this.pdfManager.ensureCatalog("lang"),[o,,c]=await Promise.all([r,n,g]);return new PartialEvaluator({xref:this.xref,handler:e,pageIndex:this.pageIndex,idFactory:this._localIdFactory,fontCache:this.fontCache,builtInCMapCache:this.builtInCMapCache,standardFontDataCache:this.standardFontDataCache,globalImageCache:this.globalImageCache,systemFontCache:this.systemFontCache,options:this.evaluatorOptions}).getTextContent({stream:o,task:t,resources:this.resources,includeMarkedContent:i,disableNormalization:a,sink:s,viewBox:this.view,lang:c})}async getStructTree(){const e=await this.pdfManager.ensureCatalog("structTreeRoot");if(!e)return null;await this._parsedAnnotations;const t=await this.pdfManager.ensure(this,"_parseStructTree",[e]);return this.pdfManager.ensure(t,"serializable")}_parseStructTree(e){const t=new StructTreePage(e,this.pageDict);t.parse(this.ref);return t}async getAnnotationsData(e,t,i){const a=await this._parsedAnnotations;if(0===a.length)return a;const s=[],r=[];let n;const C=!!(i&g),h=!!(i&o),l=!!(i&c);for(const i of a){const a=C||h&&i.viewable;(a||l&&i.printable)&&s.push(i.data);if(i.hasTextContent&&a){n||=new PartialEvaluator({xref:this.xref,handler:e,pageIndex:this.pageIndex,idFactory:this._localIdFactory,fontCache:this.fontCache,builtInCMapCache:this.builtInCMapCache,standardFontDataCache:this.standardFontDataCache,globalImageCache:this.globalImageCache,systemFontCache:this.systemFontCache,options:this.evaluatorOptions});r.push(i.extractTextContent(n,t,[-1/0,-1/0,1/0,1/0]).catch((function(e){warn(`getAnnotationsData - ignoring textContent during "${t.name}" task: "${e}".`)})))}}await Promise.all(r);return s}get annotations(){const e=this._getInheritableProperty("Annots");return shadow(this,"annotations",Array.isArray(e)?e:[])}get _parsedAnnotations(){return shadow(this,"_parsedAnnotations",this.pdfManager.ensure(this,"annotations").then((async e=>{if(0===e.length)return e;const[t,i]=await Promise.all([this.pdfManager.ensureDoc("annotationGlobals"),this.pdfManager.ensureDoc("fieldObjects")]);if(!t)return[];const a=i?.orphanFields,s=[];for(const i of e)s.push(AnnotationFactory.create(this.xref,i,t,this._localIdFactory,!1,a,this.ref).catch((function(e){warn(`_parsedAnnotations: "${e}".`);return null})));const r=[];let n,g;for(const e of await Promise.all(s))e&&(e instanceof WidgetAnnotation?(g||=[]).push(e):e instanceof PopupAnnotation?(n||=[]).push(e):r.push(e));g&&r.push(...g);n&&r.push(...n);return r})))}get jsActions(){return shadow(this,"jsActions",collectActions(this.xref,this.pageDict,pA))}}const og=new Uint8Array([37,80,68,70,45]),Ig=new Uint8Array([115,116,97,114,116,120,114,101,102]),cg=new Uint8Array([101,110,100,111,98,106]);function find(e,t,i=1024,a=!1){const s=t.length,r=e.peekBytes(i),n=r.length-s;if(n<=0)return!1;if(a){const i=s-1;let a=r.length-1;for(;a>=i;){let n=0;for(;n=s){e.pos+=a-i;return!0}a--}}else{let i=0;for(;i<=n;){let a=0;for(;a=s){e.pos+=i;return!0}i++}}return!1}class PDFDocument{constructor(e,t){if(t.length<=0)throw new InvalidPDFException("The PDF file is empty, i.e. its size is zero bytes.");this.pdfManager=e;this.stream=t;this.xref=new XRef(t,e);this._pagePromises=new Map;this._version=null;const i={font:0};this._globalIdFactory=class{static getDocId(){return`g_${e.docId}`}static createFontId(){return"f"+ ++i.font}static createObjId(){unreachable("Abstract method `createObjId` called.")}static getPageObjId(){unreachable("Abstract method `getPageObjId` called.")}}}parse(e){this.xref.parse(e);this.catalog=new Catalog(this.pdfManager,this.xref)}get linearization(){let e=null;try{e=Linearization.create(this.stream)}catch(e){if(e instanceof MissingDataException)throw e;info(e)}return shadow(this,"linearization",e)}get startXRef(){const e=this.stream;let t=0;if(this.linearization){e.reset();if(find(e,cg)){e.skip(6);let i=e.peekByte();for(;isWhiteSpace(i);){e.pos++;i=e.peekByte()}t=e.pos-e.start}}else{const i=1024,a=Ig.length;let s=!1,r=e.end;for(;!s&&r>0;){r-=i-a;r<0&&(r=0);e.pos=r;s=find(e,Ig,i,!0)}if(s){e.skip(9);let i;do{i=e.getByte()}while(isWhiteSpace(i));let a="";for(;i>=32&&i<=57;){a+=String.fromCharCode(i);i=e.getByte()}t=parseInt(a,10);isNaN(t)&&(t=0)}}return shadow(this,"startXRef",t)}checkHeader(){const e=this.stream;e.reset();if(!find(e,og))return;e.moveStart();e.skip(og.length);let t,i="";for(;(t=e.getByte())>32&&i.length<7;)i+=String.fromCharCode(t);St.test(i)?this._version=i:warn(`Invalid PDF header version: ${i}`)}parseStartXRef(){this.xref.setStartXRef(this.startXRef)}get numPages(){let e=0;e=this.catalog.hasActualNumPages?this.catalog.numPages:this.xfaFactory?this.xfaFactory.getNumPages():this.linearization?this.linearization.numPages:this.catalog.numPages;return shadow(this,"numPages",e)}_hasOnlyDocumentSignatures(e,t=0){return!!Array.isArray(e)&&e.every((e=>{if(!((e=this.xref.fetchIfRef(e))instanceof Dict))return!1;if(e.has("Kids")){if(++t>10){warn("_hasOnlyDocumentSignatures: maximum recursion depth reached");return!1}return this._hasOnlyDocumentSignatures(e.get("Kids"),t)}const i=isName(e.get("FT"),"Sig"),a=e.get("Rect"),s=Array.isArray(a)&&a.every((e=>0===e));return i&&s}))}get _xfaStreams(){const e=this.catalog.acroForm;if(!e)return null;const t=e.get("XFA"),i={"xdp:xdp":"",template:"",datasets:"",config:"",connectionSet:"",localeSet:"",stylesheet:"","/xdp:xdp":""};if(t instanceof BaseStream&&!t.isEmpty){i["xdp:xdp"]=t;return i}if(!Array.isArray(t)||0===t.length)return null;for(let e=0,a=t.length;e{h.set(e,t)}));const l=[];for(const[e,i]of h){const s=i.get("FontDescriptor");if(!(s instanceof Dict))continue;let r=s.get("FontFamily");r=r.replaceAll(/[ ]+(\d)/g,"$1");const n={fontFamily:r,fontWeight:s.get("FontWeight"),italicAngle:-s.get("ItalicAngle")};validateCSSFont(n)&&l.push(g.handleSetFont(a,[Name.get(e),1],null,o,t,C,null,n).catch((function(e){warn(`loadXfaFonts: "${e}".`);return null})))}await Promise.all(l);const Q=this.xfaFactory.setFonts(c);if(!Q)return;n.ignoreErrors=!0;l.length=0;c.length=0;const E=new Set;for(const e of Q)getXfaFontName(`${e}-Regular`)||E.add(e);E.size&&Q.push("PdfJS-Fallback");for(const e of Q)if(!E.has(e))for(const i of[{name:"Regular",fontWeight:400,italicAngle:0},{name:"Bold",fontWeight:700,italicAngle:0},{name:"Italic",fontWeight:400,italicAngle:12},{name:"BoldItalic",fontWeight:700,italicAngle:12}]){const s=`${e}-${i.name}`,r=getXfaFontDict(s);l.push(g.handleSetFont(a,[Name.get(s),1],null,o,t,C,r,{fontFamily:e,fontWeight:i.fontWeight,italicAngle:i.italicAngle}).catch((function(e){warn(`loadXfaFonts: "${e}".`);return null})))}await Promise.all(l);this.xfaFactory.appendFonts(c,E)}async serializeXfaData(e){return this.xfaFactory?this.xfaFactory.serializeData(e):null}get version(){return this.catalog.version||this._version}get formInfo(){const e={hasFields:!1,hasAcroForm:!1,hasXfa:!1,hasSignatures:!1},t=this.catalog.acroForm;if(!t)return shadow(this,"formInfo",e);try{const i=t.get("Fields"),a=Array.isArray(i)&&i.length>0;e.hasFields=a;const s=t.get("XFA");e.hasXfa=Array.isArray(s)&&s.length>0||s instanceof BaseStream&&!s.isEmpty;const r=!!(1&t.get("SigFlags")),n=r&&this._hasOnlyDocumentSignatures(i);e.hasAcroForm=a&&!n;e.hasSignatures=r}catch(e){if(e instanceof MissingDataException)throw e;warn(`Cannot fetch form information: "${e}".`)}return shadow(this,"formInfo",e)}get documentInfo(){const e={PDFFormatVersion:this.version,Language:this.catalog.lang,EncryptFilterName:this.xref.encrypt?this.xref.encrypt.filterName:null,IsLinearized:!!this.linearization,IsAcroFormPresent:this.formInfo.hasAcroForm,IsXFAPresent:this.formInfo.hasXfa,IsCollectionPresent:!!this.catalog.collection,IsSignaturesPresent:this.formInfo.hasSignatures};let t;try{t=this.xref.trailer.get("Info")}catch(e){if(e instanceof MissingDataException)throw e;info("The document information dictionary is invalid.")}if(!(t instanceof Dict))return shadow(this,"documentInfo",e);for(const i of t.getKeys()){const a=t.get(i);switch(i){case"Title":case"Author":case"Subject":case"Keywords":case"Creator":case"Producer":case"CreationDate":case"ModDate":if("string"==typeof a){e[i]=stringToPDFString(a);continue}break;case"Trapped":if(a instanceof Name){e[i]=a;continue}break;default:let t;switch(typeof a){case"string":t=stringToPDFString(a);break;case"number":case"boolean":t=a;break;default:a instanceof Name&&(t=a)}if(void 0===t){warn(`Bad value, for custom key "${i}", in Info: ${a}.`);continue}e.Custom||(e.Custom=Object.create(null));e.Custom[i]=t;continue}warn(`Bad value, for key "${i}", in Info: ${a}.`)}return shadow(this,"documentInfo",e)}get fingerprints(){const e="\0".repeat(16);function validate(t){return"string"==typeof t&&16===t.length&&t!==e}const t=this.xref.trailer.get("ID");let i,a;if(Array.isArray(t)&&validate(t[0])){i=stringToBytes(t[0]);t[1]!==t[0]&&validate(t[1])&&(a=stringToBytes(t[1]))}else i=vs(this.stream.getByteRange(0,1024),0,1024);return shadow(this,"fingerprints",[toHexUtil(i),a?toHexUtil(a):null])}async _getLinearizationPage(e){const{catalog:t,linearization:i,xref:a}=this,s=Ref.get(i.objectNumberFirst,0);try{const e=await a.fetchAsync(s);if(e instanceof Dict){let i=e.getRaw("Type");i instanceof Ref&&(i=await a.fetchAsync(i));if(isName(i,"Page")||!e.has("Type")&&!e.has("Kids")&&e.has("Contents")){t.pageKidsCountCache.has(s)||t.pageKidsCountCache.put(s,1);t.pageIndexCache.has(s)||t.pageIndexCache.put(s,0);return[e,s]}}throw new FormatError("The Linearization dictionary doesn't point to a valid Page dictionary.")}catch(i){warn(`_getLinearizationPage: "${i.message}".`);return t.getPageDict(e)}}getPage(e){const t=this._pagePromises.get(e);if(t)return t;const{catalog:i,linearization:a,xfaFactory:s}=this;let r;r=s?Promise.resolve([Dict.empty,null]):a?.pageFirst===e?this._getLinearizationPage(e):i.getPageDict(e);r=r.then((([t,a])=>new Page({pdfManager:this.pdfManager,xref:this.xref,pageIndex:e,pageDict:t,ref:a,globalIdFactory:this._globalIdFactory,fontCache:i.fontCache,builtInCMapCache:i.builtInCMapCache,standardFontDataCache:i.standardFontDataCache,globalImageCache:i.globalImageCache,systemFontCache:i.systemFontCache,nonBlendModesSet:i.nonBlendModesSet,xfaFactory:s})));this._pagePromises.set(e,r);return r}async checkFirstPage(e=!1){if(!e)try{await this.getPage(0)}catch(e){if(e instanceof XRefEntryException){this._pagePromises.delete(0);await this.cleanup();throw new XRefParseException}}}async checkLastPage(e=!1){const{catalog:t,pdfManager:i}=this;t.setActualNumPages();let a;try{await Promise.all([i.ensureDoc("xfaFactory"),i.ensureDoc("linearization"),i.ensureCatalog("numPages")]);if(this.xfaFactory)return;a=this.linearization?this.linearization.numPages:t.numPages;if(!Number.isInteger(a))throw new FormatError("Page count is not an integer.");if(a<=1)return;await this.getPage(a-1)}catch(s){this._pagePromises.delete(a-1);await this.cleanup();if(s instanceof XRefEntryException&&!e)throw new XRefParseException;warn(`checkLastPage - invalid /Pages tree /Count: ${a}.`);let r;try{r=await t.getAllPageDicts(e)}catch(i){if(i instanceof XRefEntryException&&!e)throw new XRefParseException;t.setActualNumPages(1);return}for(const[e,[a,s]]of r){let r;if(a instanceof Error){r=Promise.reject(a);r.catch((()=>{}))}else r=Promise.resolve(new Page({pdfManager:i,xref:this.xref,pageIndex:e,pageDict:a,ref:s,globalIdFactory:this._globalIdFactory,fontCache:t.fontCache,builtInCMapCache:t.builtInCMapCache,standardFontDataCache:t.standardFontDataCache,globalImageCache:t.globalImageCache,systemFontCache:t.systemFontCache,nonBlendModesSet:t.nonBlendModesSet,xfaFactory:null}));this._pagePromises.set(e,r)}t.setActualNumPages(r.size)}}fontFallback(e,t){return this.catalog.fontFallback(e,t)}async cleanup(e=!1){return this.catalog?this.catalog.cleanup(e):clearGlobalCaches()}async#Z(e,t,i,a,s,r,n){const{xref:g}=this;if(!(i instanceof Ref)||r.has(i))return;r.put(i);const o=await g.fetchAsync(i);if(!(o instanceof Dict))return;if(o.has("T")){const t=stringToPDFString(await o.getAsync("T"));e=""===e?t:`${e}.${t}`}else{let i=o;for(;;){i=i.getRaw("Parent")||t;if(i instanceof Ref){if(r.has(i))break;i=await g.fetchAsync(i)}if(!(i instanceof Dict))break;if(i.has("T")){const t=stringToPDFString(await i.getAsync("T"));e=""===e?t:`${e}.${t}`;break}}}t&&!o.has("Parent")&&isName(o.get("Subtype"),"Widget")&&n.put(i,t);a.has(e)||a.set(e,[]);a.get(e).push(AnnotationFactory.create(g,i,s,null,!0,n,null).then((e=>e?.getFieldObject())).catch((function(e){warn(`#collectFieldObjects: "${e}".`);return null})));if(!o.has("Kids"))return;const c=await o.getAsync("Kids");if(Array.isArray(c))for(const t of c)await this.#Z(e,i,t,a,s,r,n)}get fieldObjects(){return shadow(this,"fieldObjects",this.pdfManager.ensureDoc("formInfo").then((async e=>{if(!e.hasFields)return null;const[t,i]=await Promise.all([this.pdfManager.ensureDoc("annotationGlobals"),this.pdfManager.ensureCatalog("acroForm")]);if(!t)return null;const a=new RefSet,s=Object.create(null),r=new Map,n=new RefSetCache;for(const e of await i.getAsync("Fields"))await this.#Z("",null,e,r,t,a,n);const g=[];for(const[e,t]of r)g.push(Promise.all(t).then((t=>{(t=t.filter((e=>!!e))).length>0&&(s[e]=t)})));await Promise.all(g);return{allFields:s,orphanFields:n}})))}get hasJSActions(){return shadow(this,"hasJSActions",this.pdfManager.ensureDoc("_parseHasJSActions"))}async _parseHasJSActions(){const[e,t]=await Promise.all([this.pdfManager.ensureCatalog("jsActions"),this.pdfManager.ensureDoc("fieldObjects")]);return!!e||!!t&&Object.values(t.allFields).some((e=>e.some((e=>null!==e.actions))))}get calculationOrderIds(){const e=this.catalog.acroForm?.get("CO");if(!Array.isArray(e)||0===e.length)return shadow(this,"calculationOrderIds",null);const t=[];for(const i of e)i instanceof Ref&&t.push(i.toString());return shadow(this,"calculationOrderIds",t.length?t:null)}get annotationGlobals(){return shadow(this,"annotationGlobals",AnnotationFactory.createGlobals(this.pdfManager))}}class BasePdfManager{constructor(e){this._docBaseUrl=function parseDocBaseUrl(e){if(e){const t=createValidAbsoluteUrl(e);if(t)return t.href;warn(`Invalid absolute docBaseUrl: "${e}".`)}return null}(e.docBaseUrl);this._docId=e.docId;this._password=e.password;this.enableXfa=e.enableXfa;e.evaluatorOptions.isOffscreenCanvasSupported&&=FeatureTest.isOffscreenCanvasSupported;this.evaluatorOptions=Object.freeze(e.evaluatorOptions)}get docId(){return this._docId}get password(){return this._password}get docBaseUrl(){return this._docBaseUrl}get catalog(){return this.pdfDocument.catalog}ensureDoc(e,t){return this.ensure(this.pdfDocument,e,t)}ensureXRef(e,t){return this.ensure(this.pdfDocument.xref,e,t)}ensureCatalog(e,t){return this.ensure(this.pdfDocument.catalog,e,t)}getPage(e){return this.pdfDocument.getPage(e)}fontFallback(e,t){return this.pdfDocument.fontFallback(e,t)}loadXfaFonts(e,t){return this.pdfDocument.loadXfaFonts(e,t)}loadXfaImages(){return this.pdfDocument.loadXfaImages()}serializeXfaData(e){return this.pdfDocument.serializeXfaData(e)}cleanup(e=!1){return this.pdfDocument.cleanup(e)}async ensure(e,t,i){unreachable("Abstract method `ensure` called")}requestRange(e,t){unreachable("Abstract method `requestRange` called")}requestLoadedStream(e=!1){unreachable("Abstract method `requestLoadedStream` called")}sendProgressiveData(e){unreachable("Abstract method `sendProgressiveData` called")}updatePassword(e){this._password=e}terminate(e){unreachable("Abstract method `terminate` called")}}class LocalPdfManager extends BasePdfManager{constructor(e){super(e);const t=new Stream(e.source);this.pdfDocument=new PDFDocument(this,t);this._loadedStreamPromise=Promise.resolve(t)}async ensure(e,t,i){const a=e[t];return"function"==typeof a?a.apply(e,i):a}requestRange(e,t){return Promise.resolve()}requestLoadedStream(e=!1){return this._loadedStreamPromise}terminate(e){}}class NetworkPdfManager extends BasePdfManager{constructor(e){super(e);this.streamManager=new ChunkedStreamManager(e.source,{msgHandler:e.handler,length:e.length,disableAutoFetch:e.disableAutoFetch,rangeChunkSize:e.rangeChunkSize});this.pdfDocument=new PDFDocument(this,this.streamManager.getStream())}async ensure(e,t,i){try{const a=e[t];return"function"==typeof a?a.apply(e,i):a}catch(a){if(!(a instanceof MissingDataException))throw a;await this.requestRange(a.begin,a.end);return this.ensure(e,t,i)}}requestRange(e,t){return this.streamManager.requestRange(e,t)}requestLoadedStream(e=!1){return this.streamManager.requestAllChunks(e)}sendProgressiveData(e){this.streamManager.onReceiveData({chunk:e})}terminate(e){this.streamManager.abort(e)}}const Cg=1,hg=2,lg=1,Bg=2,Qg=3,Eg=4,ug=5,dg=6,fg=7,pg=8;function wrapReason(e){e instanceof Error||"object"==typeof e&&null!==e||unreachable('wrapReason: Expected "reason" to be a (possibly cloned) Error.');switch(e.name){case"AbortException":return new AbortException(e.message);case"MissingPDFException":return new MissingPDFException(e.message);case"PasswordException":return new PasswordException(e.message,e.code);case"UnexpectedResponseException":return new UnexpectedResponseException(e.message,e.status);case"UnknownErrorException":return new UnknownErrorException(e.message,e.details);default:return new UnknownErrorException(e.message,e.toString())}}class MessageHandler{#V=new AbortController;constructor(e,t,i){this.sourceName=e;this.targetName=t;this.comObj=i;this.callbackId=1;this.streamId=1;this.streamSinks=Object.create(null);this.streamControllers=Object.create(null);this.callbackCapabilities=Object.create(null);this.actionHandler=Object.create(null);i.addEventListener("message",this.#z.bind(this),{signal:this.#V.signal})}#z({data:e}){if(e.targetName!==this.sourceName)return;if(e.stream){this.#_(e);return}if(e.callback){const t=e.callbackId,i=this.callbackCapabilities[t];if(!i)throw new Error(`Cannot resolve callback ${t}`);delete this.callbackCapabilities[t];if(e.callback===Cg)i.resolve(e.data);else{if(e.callback!==hg)throw new Error("Unexpected callback case");i.reject(wrapReason(e.reason))}return}const t=this.actionHandler[e.action];if(!t)throw new Error(`Unknown action from worker: ${e.action}`);if(e.callbackId){const i=this.sourceName,a=e.sourceName,s=this.comObj;new Promise((function(i){i(t(e.data))})).then((function(t){s.postMessage({sourceName:i,targetName:a,callback:Cg,callbackId:e.callbackId,data:t})}),(function(t){s.postMessage({sourceName:i,targetName:a,callback:hg,callbackId:e.callbackId,reason:wrapReason(t)})}))}else e.streamId?this.#$(e):t(e.data)}on(e,t){const i=this.actionHandler;if(i[e])throw new Error(`There is already an actionName called "${e}"`);i[e]=t}send(e,t,i){this.comObj.postMessage({sourceName:this.sourceName,targetName:this.targetName,action:e,data:t},i)}sendWithPromise(e,t,i){const a=this.callbackId++,s=Promise.withResolvers();this.callbackCapabilities[a]=s;try{this.comObj.postMessage({sourceName:this.sourceName,targetName:this.targetName,action:e,callbackId:a,data:t},i)}catch(e){s.reject(e)}return s.promise}sendWithStream(e,t,i,a){const s=this.streamId++,r=this.sourceName,n=this.targetName,g=this.comObj;return new ReadableStream({start:i=>{const o=Promise.withResolvers();this.streamControllers[s]={controller:i,startCall:o,pullCall:null,cancelCall:null,isClosed:!1};g.postMessage({sourceName:r,targetName:n,action:e,streamId:s,data:t,desiredSize:i.desiredSize},a);return o.promise},pull:e=>{const t=Promise.withResolvers();this.streamControllers[s].pullCall=t;g.postMessage({sourceName:r,targetName:n,stream:dg,streamId:s,desiredSize:e.desiredSize});return t.promise},cancel:e=>{assert(e instanceof Error,"cancel must have a valid reason");const t=Promise.withResolvers();this.streamControllers[s].cancelCall=t;this.streamControllers[s].isClosed=!0;g.postMessage({sourceName:r,targetName:n,stream:lg,streamId:s,reason:wrapReason(e)});return t.promise}},i)}#$(e){const t=e.streamId,i=this.sourceName,a=e.sourceName,s=this.comObj,r=this,n=this.actionHandler[e.action],g={enqueue(e,r=1,n){if(this.isCancelled)return;const g=this.desiredSize;this.desiredSize-=r;if(g>0&&this.desiredSize<=0){this.sinkCapability=Promise.withResolvers();this.ready=this.sinkCapability.promise}s.postMessage({sourceName:i,targetName:a,stream:Eg,streamId:t,chunk:e},n)},close(){if(!this.isCancelled){this.isCancelled=!0;s.postMessage({sourceName:i,targetName:a,stream:Qg,streamId:t});delete r.streamSinks[t]}},error(e){assert(e instanceof Error,"error must have a valid reason");if(!this.isCancelled){this.isCancelled=!0;s.postMessage({sourceName:i,targetName:a,stream:ug,streamId:t,reason:wrapReason(e)})}},sinkCapability:Promise.withResolvers(),onPull:null,onCancel:null,isCancelled:!1,desiredSize:e.desiredSize,ready:null};g.sinkCapability.resolve();g.ready=g.sinkCapability.promise;this.streamSinks[t]=g;new Promise((function(t){t(n(e.data,g))})).then((function(){s.postMessage({sourceName:i,targetName:a,stream:pg,streamId:t,success:!0})}),(function(e){s.postMessage({sourceName:i,targetName:a,stream:pg,streamId:t,reason:wrapReason(e)})}))}#_(e){const t=e.streamId,i=this.sourceName,a=e.sourceName,s=this.comObj,r=this.streamControllers[t],n=this.streamSinks[t];switch(e.stream){case pg:e.success?r.startCall.resolve():r.startCall.reject(wrapReason(e.reason));break;case fg:e.success?r.pullCall.resolve():r.pullCall.reject(wrapReason(e.reason));break;case dg:if(!n){s.postMessage({sourceName:i,targetName:a,stream:fg,streamId:t,success:!0});break}n.desiredSize<=0&&e.desiredSize>0&&n.sinkCapability.resolve();n.desiredSize=e.desiredSize;new Promise((function(e){e(n.onPull?.())})).then((function(){s.postMessage({sourceName:i,targetName:a,stream:fg,streamId:t,success:!0})}),(function(e){s.postMessage({sourceName:i,targetName:a,stream:fg,streamId:t,reason:wrapReason(e)})}));break;case Eg:assert(r,"enqueue should have stream controller");if(r.isClosed)break;r.controller.enqueue(e.chunk);break;case Qg:assert(r,"close should have stream controller");if(r.isClosed)break;r.isClosed=!0;r.controller.close();this.#AA(r,t);break;case ug:assert(r,"error should have stream controller");r.controller.error(wrapReason(e.reason));this.#AA(r,t);break;case Bg:e.success?r.cancelCall.resolve():r.cancelCall.reject(wrapReason(e.reason));this.#AA(r,t);break;case lg:if(!n)break;new Promise((function(t){t(n.onCancel?.(wrapReason(e.reason)))})).then((function(){s.postMessage({sourceName:i,targetName:a,stream:Bg,streamId:t,success:!0})}),(function(e){s.postMessage({sourceName:i,targetName:a,stream:Bg,streamId:t,reason:wrapReason(e)})}));n.sinkCapability.reject(wrapReason(e.reason));n.isCancelled=!0;delete this.streamSinks[t];break;default:throw new Error("Unexpected stream case")}}async#AA(e,t){await Promise.allSettled([e.startCall?.promise,e.pullCall?.promise,e.cancelCall?.promise]);delete this.streamControllers[t]}destroy(){this.#V?.abort();this.#V=null}}class PDFWorkerStream{constructor(e){this._msgHandler=e;this._contentLength=null;this._fullRequestReader=null;this._rangeRequestReaders=[]}getFullReader(){assert(!this._fullRequestReader,"PDFWorkerStream.getFullReader can only be called once.");this._fullRequestReader=new PDFWorkerStreamReader(this._msgHandler);return this._fullRequestReader}getRangeReader(e,t){const i=new PDFWorkerStreamRangeReader(e,t,this._msgHandler);this._rangeRequestReaders.push(i);return i}cancelAllRequests(e){this._fullRequestReader?.cancel(e);for(const t of this._rangeRequestReaders.slice(0))t.cancel(e)}}class PDFWorkerStreamReader{constructor(e){this._msgHandler=e;this.onProgress=null;this._contentLength=null;this._isRangeSupported=!1;this._isStreamingSupported=!1;const t=this._msgHandler.sendWithStream("GetReader");this._reader=t.getReader();this._headersReady=this._msgHandler.sendWithPromise("ReaderHeadersReady").then((e=>{this._isStreamingSupported=e.isStreamingSupported;this._isRangeSupported=e.isRangeSupported;this._contentLength=e.contentLength}))}get headersReady(){return this._headersReady}get contentLength(){return this._contentLength}get isStreamingSupported(){return this._isStreamingSupported}get isRangeSupported(){return this._isRangeSupported}async read(){const{value:e,done:t}=await this._reader.read();return t?{value:void 0,done:!0}:{value:e.buffer,done:!1}}cancel(e){this._reader.cancel(e)}}class PDFWorkerStreamRangeReader{constructor(e,t,i){this._msgHandler=i;this.onProgress=null;const a=this._msgHandler.sendWithStream("GetRangeReader",{begin:e,end:t});this._reader=a.getReader()}get isStreamingSupported(){return!1}async read(){const{value:e,done:t}=await this._reader.read();return t?{value:void 0,done:!0}:{value:e.buffer,done:!1}}cancel(e){this._reader.cancel(e)}}class WorkerTask{constructor(e){this.name=e;this.terminated=!1;this._capability=Promise.withResolvers()}get finished(){return this._capability.promise}finish(){this._capability.resolve()}terminate(){this.terminated=!0}ensureNotTerminated(){if(this.terminated)throw new Error("Worker task was terminated")}}class WorkerMessageHandler{static setup(e,t){let i=!1;e.on("test",(function(t){if(!i){i=!0;e.send("test",t instanceof Uint8Array)}}));e.on("configure",(function(e){!function setVerbosityLevel(e){Number.isInteger(e)&&(nt=e)}(e.verbosity)}));e.on("GetDocRequest",(function(e){return WorkerMessageHandler.createDocumentHandler(e,t)}))}static createDocumentHandler(e,t){let i,a=!1,s=null;const r=new Set,n=getVerbosityLevel(),{docId:g,apiVersion:o}=e,c="4.8.69";if(o!==c)throw new Error(`The API version "${o}" does not match the Worker version "${c}".`);const C=[];for(const e in[])C.push(e);if(C.length)throw new Error("The `Array.prototype` contains unexpected enumerable properties: "+C.join(", ")+"; thus breaking e.g. `for...in` iteration of `Array`s.");const h=g+"_worker";let l=new MessageHandler(h,g,t);function ensureNotTerminated(){if(a)throw new Error("Worker was terminated")}function startWorkerTask(e){r.add(e)}function finishWorkerTask(e){e.finish();r.delete(e)}async function loadDocument(e){await i.ensureDoc("checkHeader");await i.ensureDoc("parseStartXRef");await i.ensureDoc("parse",[e]);await i.ensureDoc("checkFirstPage",[e]);await i.ensureDoc("checkLastPage",[e]);const t=await i.ensureDoc("isPureXfa");if(t){const e=new WorkerTask("loadXfaFonts");startWorkerTask(e);await Promise.all([i.loadXfaFonts(l,e).catch((e=>{})).then((()=>finishWorkerTask(e))),i.loadXfaImages()])}const[a,s]=await Promise.all([i.ensureDoc("numPages"),i.ensureDoc("fingerprints")]);return{numPages:a,fingerprints:s,htmlForXfa:t?await i.ensureDoc("htmlForXfa"):null}}function setupDoc(e){function onSuccess(e){ensureNotTerminated();l.send("GetDoc",{pdfInfo:e})}function onFailure(e){ensureNotTerminated();if(e instanceof PasswordException){const t=new WorkerTask(`PasswordException: response ${e.code}`);startWorkerTask(t);l.sendWithPromise("PasswordRequest",e).then((function({password:e}){finishWorkerTask(t);i.updatePassword(e);pdfManagerReady()})).catch((function(){finishWorkerTask(t);l.send("DocException",e)}))}else e instanceof InvalidPDFException||e instanceof MissingPDFException||e instanceof UnexpectedResponseException||e instanceof UnknownErrorException?l.send("DocException",e):l.send("DocException",new UnknownErrorException(e.message,e.toString()))}function pdfManagerReady(){ensureNotTerminated();loadDocument(!1).then(onSuccess,(function(e){ensureNotTerminated();e instanceof XRefParseException?i.requestLoadedStream().then((function(){ensureNotTerminated();loadDocument(!0).then(onSuccess,onFailure)})):onFailure(e)}))}ensureNotTerminated();(function getPdfManager({data:e,password:t,disableAutoFetch:i,rangeChunkSize:a,length:r,docBaseUrl:n,enableXfa:o,evaluatorOptions:c}){const C={source:null,disableAutoFetch:i,docBaseUrl:n,docId:g,enableXfa:o,evaluatorOptions:c,handler:l,length:r,password:t,rangeChunkSize:a},h=Promise.withResolvers();let Q;if(e){try{C.source=e;Q=new LocalPdfManager(C);h.resolve(Q)}catch(e){h.reject(e)}return h.promise}let E,u=[],d=0;try{E=new PDFWorkerStream(l)}catch(e){h.reject(e);return h.promise}const f=E.getFullReader();f.headersReady.then((function(){if(f.isRangeSupported){C.source=E;C.length=f.contentLength;C.disableAutoFetch||=f.isStreamingSupported;Q=new NetworkPdfManager(C);for(const e of u)Q.sendProgressiveData(e);u=[];h.resolve(Q);s=null}})).catch((function(e){h.reject(e);s=null}));new Promise((function(e,t){const readChunk=function({value:e,done:i}){try{ensureNotTerminated();if(i){if(!Q){const e=arrayBuffersToBytes(u);u=[];r&&e.length!==r&&warn("reported HTTP length is different from actual");C.source=e;Q=new LocalPdfManager(C);h.resolve(Q)}s=null;return}d+=e.byteLength;f.isStreamingSupported||l.send("DocProgress",{loaded:d,total:Math.max(d,f.contentLength||0)});Q?Q.sendProgressiveData(e):u.push(e);f.read().then(readChunk,t)}catch(e){t(e)}};f.read().then(readChunk,t)})).catch((function(e){h.reject(e);s=null}));s=function(e){E.cancelAllRequests(e)};return h.promise})(e).then((function(e){if(a){e.terminate(new AbortException("Worker was terminated."));throw new Error("Worker was terminated")}i=e;i.requestLoadedStream(!0).then((e=>{l.send("DataLoaded",{length:e.bytes.byteLength})}))})).then(pdfManagerReady,onFailure)}l.on("GetPage",(function(e){return i.getPage(e.pageIndex).then((function(e){return Promise.all([i.ensure(e,"rotate"),i.ensure(e,"ref"),i.ensure(e,"userUnit"),i.ensure(e,"view")]).then((function([e,t,i,a]){return{rotate:e,ref:t,refStr:t?.toString()??null,userUnit:i,view:a}}))}))}));l.on("GetPageIndex",(function(e){const t=Ref.get(e.num,e.gen);return i.ensureCatalog("getPageIndex",[t])}));l.on("GetDestinations",(function(e){return i.ensureCatalog("destinations")}));l.on("GetDestination",(function(e){return i.ensureCatalog("getDestination",[e.id])}));l.on("GetPageLabels",(function(e){return i.ensureCatalog("pageLabels")}));l.on("GetPageLayout",(function(e){return i.ensureCatalog("pageLayout")}));l.on("GetPageMode",(function(e){return i.ensureCatalog("pageMode")}));l.on("GetViewerPreferences",(function(e){return i.ensureCatalog("viewerPreferences")}));l.on("GetOpenAction",(function(e){return i.ensureCatalog("openAction")}));l.on("GetAttachments",(function(e){return i.ensureCatalog("attachments")}));l.on("GetDocJSActions",(function(e){return i.ensureCatalog("jsActions")}));l.on("GetPageJSActions",(function({pageIndex:e}){return i.getPage(e).then((function(e){return i.ensure(e,"jsActions")}))}));l.on("GetOutline",(function(e){return i.ensureCatalog("documentOutline")}));l.on("GetOptionalContentConfig",(function(e){return i.ensureCatalog("optionalContentConfig")}));l.on("GetPermissions",(function(e){return i.ensureCatalog("permissions")}));l.on("GetMetadata",(function(e){return Promise.all([i.ensureDoc("documentInfo"),i.ensureCatalog("metadata")])}));l.on("GetMarkInfo",(function(e){return i.ensureCatalog("markInfo")}));l.on("GetData",(function(e){return i.requestLoadedStream().then((function(e){return e.bytes}))}));l.on("GetAnnotations",(function({pageIndex:e,intent:t}){return i.getPage(e).then((function(i){const a=new WorkerTask(`GetAnnotations: page ${e}`);startWorkerTask(a);return i.getAnnotationsData(l,a,t).then((e=>{finishWorkerTask(a);return e}),(e=>{finishWorkerTask(a);throw e}))}))}));l.on("GetFieldObjects",(function(e){return i.ensureDoc("fieldObjects").then((e=>e?.allFields||null))}));l.on("HasJSActions",(function(e){return i.ensureDoc("hasJSActions")}));l.on("GetCalculationOrderIds",(function(e){return i.ensureDoc("calculationOrderIds")}));l.on("SaveDocument",(async function({isPureXfa:e,numPages:t,annotationStorage:a,filename:s}){const r=[i.requestLoadedStream(),i.ensureCatalog("acroForm"),i.ensureCatalog("acroFormRef"),i.ensureDoc("startXRef"),i.ensureDoc("xref"),i.ensureDoc("linearization"),i.ensureCatalog("structTreeRoot")],n=[],g=e?null:getNewAnnotationsMap(a),[o,c,C,h,Q,E,u]=await Promise.all(r),d=Q.trailer.getRaw("Root")||null;let f;if(g){u?await u.canUpdateStructTree({pdfManager:i,xref:Q,newAnnotationsByPage:g})&&(f=u):await StructTreeRoot.canCreateStructureTree({catalogRef:d,pdfManager:i,newAnnotationsByPage:g})&&(f=null);const e=AnnotationFactory.generateImages(a.values(),Q,i.evaluatorOptions.isOffscreenCanvasSupported),t=void 0===f?n:[];for(const[a,s]of g)t.push(i.getPage(a).then((t=>{const i=new WorkerTask(`Save (editor): page ${a}`);return t.saveNewAnnotations(l,i,s,e).finally((function(){finishWorkerTask(i)}))})));null===f?n.push(Promise.all(t).then((async e=>{await StructTreeRoot.createStructureTree({newAnnotationsByPage:g,xref:Q,catalogRef:d,pdfManager:i,newRefs:e});return e}))):f&&n.push(Promise.all(t).then((async e=>{await f.updateStructureTree({newAnnotationsByPage:g,pdfManager:i,newRefs:e});return e})))}if(e)n.push(i.serializeXfaData(a));else for(let e=0;ee.needAppearances)),D=c instanceof Dict&&c.get("XFA")||null;let b=null,F=!1;if(Array.isArray(D)){for(let e=0,t=D.length;e{"string"==typeof i&&(e[t]=stringToPDFString(i))}));S={rootRef:d,encryptRef:Q.trailer.getRaw("Encrypt")||null,newRef:Q.getNewTemporaryRef(),infoRef:Q.trailer.getRaw("Info")||null,info:e,fileIds:Q.trailer.get("ID")||null,startXRef:E?h:Q.lastXRefStreamPos??h,filename:s}}return incrementalUpdate({originalData:o.bytes,xrefInfo:S,newRefs:m,xref:Q,hasXfa:!!D,xfaDatasetsRef:b,hasXfaDatasetsEntry:F,needAppearances:w,acroFormRef:C,acroForm:c,xfaData:y,useXrefStream:isDict(Q.topDict,"XRef")}).finally((()=>{Q.resetNewTemporaryRef()}))}));l.on("GetOperatorList",(function(e,t){const a=e.pageIndex;i.getPage(a).then((function(i){const s=new WorkerTask(`GetOperatorList: page ${a}`);startWorkerTask(s);const r=n>=mA.INFOS?Date.now():0;i.getOperatorList({handler:l,sink:t,task:s,intent:e.intent,cacheKey:e.cacheKey,annotationStorage:e.annotationStorage,modifiedIds:e.modifiedIds}).then((function(e){finishWorkerTask(s);r&&info(`page=${a+1} - getOperatorList: time=${Date.now()-r}ms, len=${e.length}`);t.close()}),(function(e){finishWorkerTask(s);s.terminated||t.error(e)}))}))}));l.on("GetTextContent",(function(e,t){const{pageIndex:a,includeMarkedContent:s,disableNormalization:r}=e;i.getPage(a).then((function(e){const i=new WorkerTask("GetTextContent: page "+a);startWorkerTask(i);const g=n>=mA.INFOS?Date.now():0;e.extractTextContent({handler:l,task:i,sink:t,includeMarkedContent:s,disableNormalization:r}).then((function(){finishWorkerTask(i);g&&info(`page=${a+1} - getTextContent: time=`+(Date.now()-g)+"ms");t.close()}),(function(e){finishWorkerTask(i);i.terminated||t.error(e)}))}))}));l.on("GetStructTree",(function(e){return i.getPage(e.pageIndex).then((function(e){return i.ensure(e,"getStructTree")}))}));l.on("FontFallback",(function(e){return i.fontFallback(e.id,l)}));l.on("Cleanup",(function(e){return i.cleanup(!0)}));l.on("Terminate",(function(e){a=!0;const t=[];if(i){i.terminate(new AbortException("Worker was terminated."));const e=i.cleanup();t.push(e);i=null}else clearGlobalCaches();s?.(new AbortException("Worker was terminated."));for(const e of r){t.push(e.finished);e.terminate()}return Promise.all(t).then((function(){l.destroy();l=null}))}));l.on("Ready",(function(t){setupDoc(e);e=null}));return h}static initializeFromPort(e){const t=new MessageHandler("worker","main",e);WorkerMessageHandler.setup(t,e);t.send("ready",null)}}"undefined"==typeof window&&!t&&"undefined"!=typeof self&&function isMessagePort(e){return"function"==typeof e.postMessage&&"onmessage"in e}(self)&&WorkerMessageHandler.initializeFromPort(self);var mg=__webpack_exports__.WorkerMessageHandler;export{mg as WorkerMessageHandler}; \ No newline at end of file diff --git a/src/App.jsx b/src/App.jsx new file mode 100644 index 0000000..28b6f74 --- /dev/null +++ b/src/App.jsx @@ -0,0 +1,6 @@ +import { useRoutes } from "react-router"; +import { routes } from "@/routes"; +function App() { + return useRoutes(routes); +} +export default App; \ No newline at end of file diff --git a/src/api/client.js b/src/api/client.js new file mode 100644 index 0000000..1ba8d26 --- /dev/null +++ b/src/api/client.js @@ -0,0 +1,135 @@ +import axios from 'axios'; +import { APPLICATION, resolveUrl } from '@/api/config'; +import { getAccessToken, getRefreshToken, getSession, setSession } from '@/auth/storage'; + +let onSessionChange = () => {}; +let onLogout = () => {}; +let refreshPromise = null; + +export function configureClient({ onSessionChange: sessionCb, onLogout: logoutCb }) { + if (sessionCb) onSessionChange = sessionCb; + if (logoutCb) onLogout = logoutCb; +} + +function isSuccess(payload) { + return payload && (payload.statusCode === 200 || payload.status === 'success'); +} + +async function refreshAccessToken() { + const refresh_token = getRefreshToken(); + if (!refresh_token) { + throw new Error('No refresh token'); + } + const response = await axios.post(resolveUrl('ums', 'auth/reverify'), { + application: APPLICATION, + refresh_token, + }); + const payload = response.data; + if (!isSuccess(payload)) { + throw new Error(payload?.message || 'Refresh failed'); + } + const current = getSession() || {}; + const next = { + ...current, + access_token: payload.data.access_token, + refresh_token: payload.data.refresh_token || refresh_token, + expiresin: payload.data.expiresin, + user: payload.data.user || current.user, + permissions: payload.data.permissions || current.permissions, + roles: payload.data.user?.roles || current.roles, + hierarchy: payload.data.user?.hierarchy || current.hierarchy, + domain: payload.data.user?.domain || current.domain, + }; + setSession(next); + onSessionChange(next); + return next.access_token; +} + +function ensureRefresh() { + if (!refreshPromise) { + refreshPromise = refreshAccessToken().finally(() => { + refreshPromise = null; + }); + } + return refreshPromise; +} + +async function request(method, service, path, data = {}, { signed = true, timeout = 30000 } = {}) { + const params = { application: APPLICATION, ...(data || {}) }; + const url = resolveUrl(service, path); + const headers = {}; + if (signed) { + const token = getAccessToken(); + if (token) headers.Authorization = token; + } + + const config = { + method, + url, + headers, + timeout, + withCredentials: false, + }; + if (method === 'get') { + config.params = params; + } else { + config.data = params; + } + + try { + const response = await axios(config); + return response.data; + } catch (error) { + const status = error.response?.status; + const payload = error.response?.data; + const apiStatus = payload?.statusCode; + if (signed && (status === 401 || apiStatus === 401)) { + try { + const token = await ensureRefresh(); + const retry = await axios({ + ...config, + headers: { ...headers, Authorization: token }, + }); + return retry.data; + } catch { + clearAndLogout(); + return payload || { statusCode: 401, status: 'error', message: 'Unauthorised' }; + } + } + if (payload) return payload; + if (error.code === 'ECONNABORTED') { + return { statusCode: 504, status: 'error', message: 'The report timed out. Try a shorter period or refresh again.' }; + } + return { + statusCode: 0, + status: 'error', + message: error.message === 'Network Error' ? 'Network Error: the report API was blocked or unreachable.' : error.message || 'Network Error', + }; + } +} + +function clearAndLogout() { + onLogout(); +} + +export function apiGet(service, path, data = {}, options = {}) { + return request('get', service, path, data, options); +} + +export function apiPost(service, path, data = {}, options = {}) { + return request('post', service, path, data, options); +} + +export function signedGet(service, path, data = {}, options = {}) { + return request('get', service, path, data, { ...options, signed: true }); +} + +export function signedPost(service, path, data = {}, options = {}) { + return request('post', service, path, data, { ...options, signed: true }); +} + +export function publicPost(service, path, data = {}, options = {}) { + return request('post', service, path, data, { ...options, signed: false }); +} + +export { isSuccess }; diff --git a/src/api/config.js b/src/api/config.js new file mode 100644 index 0000000..cf7395b --- /dev/null +++ b/src/api/config.js @@ -0,0 +1,33 @@ +export const APPLICATION = 'rapport'; +export const PROD_URL = 'https://rapportapi.click/'; + +export const LOCAL_SERVICES = { + ums: 3010, + wall: 3011, + mag: 3012, + metric: 3013, + recognition: 3014, + form: 3015, + detailing: 3016, + competition: 3017, + communication: 3018, + formreminders: 3019, + catalog: 3020, + reports: 3021, + rcpa: 3022, + events: 3023, + contact: 3024, + forum: 4002, + vgreet: 4003, +}; + +export const isLocalApi = () => import.meta.env.VITE_API_MODE === 'local'; + +export function resolveUrl(service, path) { + if (isLocalApi()) { + return `/api/${service}/${path}`; + } + // Do not call Lambda Function URLs from the browser. Their CORS config + // omits Authorization / Content-Type, which surfaces as Axios "Network Error". + return `${PROD_URL}${service}/${path}`; +} diff --git a/src/api/dropdowns.js b/src/api/dropdowns.js new file mode 100644 index 0000000..79bb172 --- /dev/null +++ b/src/api/dropdowns.js @@ -0,0 +1,17 @@ +import { signedGet, isSuccess } from '@/api/client'; +import { loadRoleMap } from '@/helpers/roles'; + +export async function dropdownMap(service, module, labelFn, keyFn) { + if (service === 'ums' && module === 'roles' && !keyFn) { + return loadRoleMap(); + } + const response = await signedGet(service, `${module}/dropdown`); + const items = isSuccess(response) ? response.data?.items || [] : []; + const values = {}; + items.forEach((item) => { + const key = keyFn ? keyFn(item) : item.id; + if (key === undefined || key === null || key === '') return; + values[key] = labelFn ? labelFn(item) : item.name || key; + }); + return values; +} diff --git a/src/assets/images/auth.jpg b/src/assets/images/auth.jpg new file mode 100644 index 0000000..eef6bc7 Binary files /dev/null and b/src/assets/images/auth.jpg differ diff --git a/src/assets/images/cards/american-express.svg b/src/assets/images/cards/american-express.svg new file mode 100644 index 0000000..0c2f9d7 --- /dev/null +++ b/src/assets/images/cards/american-express.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/assets/images/cards/bhim.svg b/src/assets/images/cards/bhim.svg new file mode 100644 index 0000000..da9037d --- /dev/null +++ b/src/assets/images/cards/bhim.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/assets/images/cards/discover-card.svg b/src/assets/images/cards/discover-card.svg new file mode 100644 index 0000000..38bd92c --- /dev/null +++ b/src/assets/images/cards/discover-card.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/assets/images/cards/google-wallet.svg b/src/assets/images/cards/google-wallet.svg new file mode 100644 index 0000000..dbaeaa3 --- /dev/null +++ b/src/assets/images/cards/google-wallet.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/assets/images/cards/mastercard.svg b/src/assets/images/cards/mastercard.svg new file mode 100644 index 0000000..2766d77 --- /dev/null +++ b/src/assets/images/cards/mastercard.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/assets/images/cards/payoneer.svg b/src/assets/images/cards/payoneer.svg new file mode 100644 index 0000000..e26b644 --- /dev/null +++ b/src/assets/images/cards/payoneer.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/assets/images/cards/paypal.svg b/src/assets/images/cards/paypal.svg new file mode 100644 index 0000000..0ee10ad --- /dev/null +++ b/src/assets/images/cards/paypal.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/assets/images/cards/stripe.svg b/src/assets/images/cards/stripe.svg new file mode 100644 index 0000000..6e48697 --- /dev/null +++ b/src/assets/images/cards/stripe.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/assets/images/cards/unionpay.svg b/src/assets/images/cards/unionpay.svg new file mode 100644 index 0000000..1968980 --- /dev/null +++ b/src/assets/images/cards/unionpay.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/assets/images/cards/visa.svg b/src/assets/images/cards/visa.svg new file mode 100644 index 0000000..f888f80 --- /dev/null +++ b/src/assets/images/cards/visa.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/assets/images/clients/01.svg b/src/assets/images/clients/01.svg new file mode 100644 index 0000000..476213b --- /dev/null +++ b/src/assets/images/clients/01.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/assets/images/clients/02.svg b/src/assets/images/clients/02.svg new file mode 100644 index 0000000..6ec028a --- /dev/null +++ b/src/assets/images/clients/02.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/assets/images/clients/03.svg b/src/assets/images/clients/03.svg new file mode 100644 index 0000000..9b6a1dc --- /dev/null +++ b/src/assets/images/clients/03.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/assets/images/clients/04.svg b/src/assets/images/clients/04.svg new file mode 100644 index 0000000..351db90 --- /dev/null +++ b/src/assets/images/clients/04.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/assets/images/clients/05.svg b/src/assets/images/clients/05.svg new file mode 100644 index 0000000..d6e3866 --- /dev/null +++ b/src/assets/images/clients/05.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/assets/images/clients/06.svg b/src/assets/images/clients/06.svg new file mode 100644 index 0000000..ca981dc --- /dev/null +++ b/src/assets/images/clients/06.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/assets/images/clients/07.svg b/src/assets/images/clients/07.svg new file mode 100644 index 0000000..c47652e --- /dev/null +++ b/src/assets/images/clients/07.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/assets/images/dashboard.png b/src/assets/images/dashboard.png new file mode 100644 index 0000000..612f85b Binary files /dev/null and b/src/assets/images/dashboard.png differ diff --git a/src/assets/images/email-send.png b/src/assets/images/email-send.png new file mode 100644 index 0000000..b16f14a Binary files /dev/null and b/src/assets/images/email-send.png differ diff --git a/src/assets/images/emails/activated.png b/src/assets/images/emails/activated.png new file mode 100644 index 0000000..5e4497a Binary files /dev/null and b/src/assets/images/emails/activated.png differ diff --git a/src/assets/images/emails/confirm.png b/src/assets/images/emails/confirm.png new file mode 100644 index 0000000..fd51aeb Binary files /dev/null and b/src/assets/images/emails/confirm.png differ diff --git a/src/assets/images/emails/invoice.png b/src/assets/images/emails/invoice.png new file mode 100644 index 0000000..3815009 Binary files /dev/null and b/src/assets/images/emails/invoice.png differ diff --git a/src/assets/images/emails/marketing.png b/src/assets/images/emails/marketing.png new file mode 100644 index 0000000..f4f9b8c Binary files /dev/null and b/src/assets/images/emails/marketing.png differ diff --git a/src/assets/images/emails/reports.png b/src/assets/images/emails/reports.png new file mode 100644 index 0000000..edba069 Binary files /dev/null and b/src/assets/images/emails/reports.png differ diff --git a/src/assets/images/emails/reset-password.png b/src/assets/images/emails/reset-password.png new file mode 100644 index 0000000..698db4e Binary files /dev/null and b/src/assets/images/emails/reset-password.png differ diff --git a/src/assets/images/emails/warning-mail.png b/src/assets/images/emails/warning-mail.png new file mode 100644 index 0000000..82540f3 Binary files /dev/null and b/src/assets/images/emails/warning-mail.png differ diff --git a/src/assets/images/favicon.ico b/src/assets/images/favicon.ico new file mode 100644 index 0000000..776ea34 Binary files /dev/null and b/src/assets/images/favicon.ico differ diff --git a/src/assets/images/flags/ac.svg b/src/assets/images/flags/ac.svg new file mode 100644 index 0000000..5de2a4a --- /dev/null +++ b/src/assets/images/flags/ac.svg @@ -0,0 +1,76 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/assets/images/flags/ad.svg b/src/assets/images/flags/ad.svg new file mode 100644 index 0000000..b2c0d99 --- /dev/null +++ b/src/assets/images/flags/ad.svg @@ -0,0 +1,148 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/assets/images/flags/ae.svg b/src/assets/images/flags/ae.svg new file mode 100644 index 0000000..639ef29 --- /dev/null +++ b/src/assets/images/flags/ae.svg @@ -0,0 +1,6 @@ + + + + + + diff --git a/src/assets/images/flags/af.svg b/src/assets/images/flags/af.svg new file mode 100644 index 0000000..5430521 --- /dev/null +++ b/src/assets/images/flags/af.svg @@ -0,0 +1,81 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/assets/images/flags/ag.svg b/src/assets/images/flags/ag.svg new file mode 100644 index 0000000..22ad141 --- /dev/null +++ b/src/assets/images/flags/ag.svg @@ -0,0 +1,14 @@ + + + + + + + + + + + + + + diff --git a/src/assets/images/flags/ai.svg b/src/assets/images/flags/ai.svg new file mode 100644 index 0000000..72cf015 --- /dev/null +++ b/src/assets/images/flags/ai.svg @@ -0,0 +1,758 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/assets/images/flags/al.svg b/src/assets/images/flags/al.svg new file mode 100644 index 0000000..075056f --- /dev/null +++ b/src/assets/images/flags/al.svg @@ -0,0 +1,5 @@ + + + + + diff --git a/src/assets/images/flags/am.svg b/src/assets/images/flags/am.svg new file mode 100644 index 0000000..523b4d9 --- /dev/null +++ b/src/assets/images/flags/am.svg @@ -0,0 +1,5 @@ + + + + + diff --git a/src/assets/images/flags/ao.svg b/src/assets/images/flags/ao.svg new file mode 100644 index 0000000..9e559b0 --- /dev/null +++ b/src/assets/images/flags/ao.svg @@ -0,0 +1,13 @@ + + + + + + + + + + + + + diff --git a/src/assets/images/flags/aq.svg b/src/assets/images/flags/aq.svg new file mode 100644 index 0000000..d6321d4 --- /dev/null +++ b/src/assets/images/flags/aq.svg @@ -0,0 +1,5 @@ + + + + + diff --git a/src/assets/images/flags/ar.svg b/src/assets/images/flags/ar.svg new file mode 100644 index 0000000..aaf4b48 --- /dev/null +++ b/src/assets/images/flags/ar.svg @@ -0,0 +1,32 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/assets/images/flags/as.svg b/src/assets/images/flags/as.svg new file mode 100644 index 0000000..e969a92 --- /dev/null +++ b/src/assets/images/flags/as.svg @@ -0,0 +1,73 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/assets/images/flags/at.svg b/src/assets/images/flags/at.svg new file mode 100644 index 0000000..4b57247 --- /dev/null +++ b/src/assets/images/flags/at.svg @@ -0,0 +1,6 @@ + + + + + + diff --git a/src/assets/images/flags/au.svg b/src/assets/images/flags/au.svg new file mode 100644 index 0000000..b7b7904 --- /dev/null +++ b/src/assets/images/flags/au.svg @@ -0,0 +1,8 @@ + + + + + + + + diff --git a/src/assets/images/flags/aw.svg b/src/assets/images/flags/aw.svg new file mode 100644 index 0000000..02777f2 --- /dev/null +++ b/src/assets/images/flags/aw.svg @@ -0,0 +1,186 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/assets/images/flags/ax.svg b/src/assets/images/flags/ax.svg new file mode 100644 index 0000000..9ce8721 --- /dev/null +++ b/src/assets/images/flags/ax.svg @@ -0,0 +1,18 @@ + + + + + + + + + + + + + + + + + + diff --git a/src/assets/images/flags/az.svg b/src/assets/images/flags/az.svg new file mode 100644 index 0000000..16647c2 --- /dev/null +++ b/src/assets/images/flags/az.svg @@ -0,0 +1,8 @@ + + + + + + + + diff --git a/src/assets/images/flags/ba.svg b/src/assets/images/flags/ba.svg new file mode 100644 index 0000000..3e061db --- /dev/null +++ b/src/assets/images/flags/ba.svg @@ -0,0 +1,12 @@ + + + + + + + + + + + + diff --git a/src/assets/images/flags/bb.svg b/src/assets/images/flags/bb.svg new file mode 100644 index 0000000..011bd3e --- /dev/null +++ b/src/assets/images/flags/bb.svg @@ -0,0 +1,6 @@ + + + + + + diff --git a/src/assets/images/flags/bd.svg b/src/assets/images/flags/bd.svg new file mode 100644 index 0000000..a2705af --- /dev/null +++ b/src/assets/images/flags/bd.svg @@ -0,0 +1,4 @@ + + + + diff --git a/src/assets/images/flags/be.svg b/src/assets/images/flags/be.svg new file mode 100644 index 0000000..b99fe8a --- /dev/null +++ b/src/assets/images/flags/be.svg @@ -0,0 +1,7 @@ + + + + + + + diff --git a/src/assets/images/flags/bf.svg b/src/assets/images/flags/bf.svg new file mode 100644 index 0000000..1d5b1e8 --- /dev/null +++ b/src/assets/images/flags/bf.svg @@ -0,0 +1,7 @@ + + + + + + + diff --git a/src/assets/images/flags/bg.svg b/src/assets/images/flags/bg.svg new file mode 100644 index 0000000..51dd0b9 --- /dev/null +++ b/src/assets/images/flags/bg.svg @@ -0,0 +1,7 @@ + + + + + + + diff --git a/src/assets/images/flags/bh.svg b/src/assets/images/flags/bh.svg new file mode 100644 index 0000000..9d24eee --- /dev/null +++ b/src/assets/images/flags/bh.svg @@ -0,0 +1,4 @@ + + + + diff --git a/src/assets/images/flags/bi.svg b/src/assets/images/flags/bi.svg new file mode 100644 index 0000000..5105f74 --- /dev/null +++ b/src/assets/images/flags/bi.svg @@ -0,0 +1,15 @@ + + + + + + + + + + + + + + + diff --git a/src/assets/images/flags/bj.svg b/src/assets/images/flags/bj.svg new file mode 100644 index 0000000..1fdf8e6 --- /dev/null +++ b/src/assets/images/flags/bj.svg @@ -0,0 +1,14 @@ + + + + + + + + + + + + + + diff --git a/src/assets/images/flags/bl.svg b/src/assets/images/flags/bl.svg new file mode 100644 index 0000000..82e01bd --- /dev/null +++ b/src/assets/images/flags/bl.svg @@ -0,0 +1,7 @@ + + + + + + + diff --git a/src/assets/images/flags/bm.svg b/src/assets/images/flags/bm.svg new file mode 100644 index 0000000..67c4cf9 --- /dev/null +++ b/src/assets/images/flags/bm.svg @@ -0,0 +1,97 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/assets/images/flags/bn.svg b/src/assets/images/flags/bn.svg new file mode 100644 index 0000000..2119002 --- /dev/null +++ b/src/assets/images/flags/bn.svg @@ -0,0 +1,36 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/assets/images/flags/bo.svg b/src/assets/images/flags/bo.svg new file mode 100644 index 0000000..72f643e --- /dev/null +++ b/src/assets/images/flags/bo.svg @@ -0,0 +1,678 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/assets/images/flags/bq.svg b/src/assets/images/flags/bq.svg new file mode 100644 index 0000000..beac148 --- /dev/null +++ b/src/assets/images/flags/bq.svg @@ -0,0 +1,5 @@ + + + + + diff --git a/src/assets/images/flags/br.svg b/src/assets/images/flags/br.svg new file mode 100644 index 0000000..28072ed --- /dev/null +++ b/src/assets/images/flags/br.svg @@ -0,0 +1,26 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/src/assets/images/flags/bs.svg b/src/assets/images/flags/bs.svg new file mode 100644 index 0000000..6f4626e --- /dev/null +++ b/src/assets/images/flags/bs.svg @@ -0,0 +1,13 @@ + + + + + + + + + + + + + diff --git a/src/assets/images/flags/bt.svg b/src/assets/images/flags/bt.svg new file mode 100644 index 0000000..23582b1 --- /dev/null +++ b/src/assets/images/flags/bt.svg @@ -0,0 +1,89 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/assets/images/flags/bv.svg b/src/assets/images/flags/bv.svg new file mode 100644 index 0000000..6c22d1a --- /dev/null +++ b/src/assets/images/flags/bv.svg @@ -0,0 +1,13 @@ + + + + + + + + + + + + + diff --git a/src/assets/images/flags/bw.svg b/src/assets/images/flags/bw.svg new file mode 100644 index 0000000..9f6ad0b --- /dev/null +++ b/src/assets/images/flags/bw.svg @@ -0,0 +1,7 @@ + + + + + + + diff --git a/src/assets/images/flags/by.svg b/src/assets/images/flags/by.svg new file mode 100644 index 0000000..1c7c16c --- /dev/null +++ b/src/assets/images/flags/by.svg @@ -0,0 +1,22 @@ + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/assets/images/flags/bz.svg b/src/assets/images/flags/bz.svg new file mode 100644 index 0000000..2dd7140 --- /dev/null +++ b/src/assets/images/flags/bz.svg @@ -0,0 +1,145 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/assets/images/flags/ca.svg b/src/assets/images/flags/ca.svg new file mode 100644 index 0000000..ab59dbe --- /dev/null +++ b/src/assets/images/flags/ca.svg @@ -0,0 +1,4 @@ + + + + diff --git a/src/assets/images/flags/cc.svg b/src/assets/images/flags/cc.svg new file mode 100644 index 0000000..7d8657e --- /dev/null +++ b/src/assets/images/flags/cc.svg @@ -0,0 +1,19 @@ + + + + + + + + + + + + + + + + + + + diff --git a/src/assets/images/flags/cd.svg b/src/assets/images/flags/cd.svg new file mode 100644 index 0000000..0f44abd --- /dev/null +++ b/src/assets/images/flags/cd.svg @@ -0,0 +1,12 @@ + + + + + + + + + + + + diff --git a/src/assets/images/flags/cefta.svg b/src/assets/images/flags/cefta.svg new file mode 100644 index 0000000..985cc9f --- /dev/null +++ b/src/assets/images/flags/cefta.svg @@ -0,0 +1,13 @@ + + + + + + + + + + + + + diff --git a/src/assets/images/flags/cf.svg b/src/assets/images/flags/cf.svg new file mode 100644 index 0000000..113da4c --- /dev/null +++ b/src/assets/images/flags/cf.svg @@ -0,0 +1,15 @@ + + + + + + + + + + + + + + + diff --git a/src/assets/images/flags/cg.svg b/src/assets/images/flags/cg.svg new file mode 100644 index 0000000..48aec20 --- /dev/null +++ b/src/assets/images/flags/cg.svg @@ -0,0 +1,12 @@ + + + + + + + + + + + + diff --git a/src/assets/images/flags/ch.svg b/src/assets/images/flags/ch.svg new file mode 100644 index 0000000..58907f3 --- /dev/null +++ b/src/assets/images/flags/ch.svg @@ -0,0 +1,9 @@ + + + + + + + + + diff --git a/src/assets/images/flags/ci.svg b/src/assets/images/flags/ci.svg new file mode 100644 index 0000000..a42598e --- /dev/null +++ b/src/assets/images/flags/ci.svg @@ -0,0 +1,7 @@ + + + + + + + diff --git a/src/assets/images/flags/ck.svg b/src/assets/images/flags/ck.svg new file mode 100644 index 0000000..e85c39d --- /dev/null +++ b/src/assets/images/flags/ck.svg @@ -0,0 +1,9 @@ + + + + + + + + + diff --git a/src/assets/images/flags/cl.svg b/src/assets/images/flags/cl.svg new file mode 100644 index 0000000..1594088 --- /dev/null +++ b/src/assets/images/flags/cl.svg @@ -0,0 +1,13 @@ + + + + + + + + + + + + + diff --git a/src/assets/images/flags/cm.svg b/src/assets/images/flags/cm.svg new file mode 100644 index 0000000..1046380 --- /dev/null +++ b/src/assets/images/flags/cm.svg @@ -0,0 +1,15 @@ + + + + + + + + + + + + + + + diff --git a/src/assets/images/flags/cn.svg b/src/assets/images/flags/cn.svg new file mode 100644 index 0000000..524103f --- /dev/null +++ b/src/assets/images/flags/cn.svg @@ -0,0 +1,11 @@ + + + + + + + + + + + diff --git a/src/assets/images/flags/co.svg b/src/assets/images/flags/co.svg new file mode 100644 index 0000000..7b77431 --- /dev/null +++ b/src/assets/images/flags/co.svg @@ -0,0 +1,7 @@ + + + + + + + diff --git a/src/assets/images/flags/cp.svg b/src/assets/images/flags/cp.svg new file mode 100644 index 0000000..b3212a9 --- /dev/null +++ b/src/assets/images/flags/cp.svg @@ -0,0 +1,7 @@ + + + + + + + diff --git a/src/assets/images/flags/cr.svg b/src/assets/images/flags/cr.svg new file mode 100644 index 0000000..6fbdbea --- /dev/null +++ b/src/assets/images/flags/cr.svg @@ -0,0 +1,7 @@ + + + + + + + diff --git a/src/assets/images/flags/cu.svg b/src/assets/images/flags/cu.svg new file mode 100644 index 0000000..4ec8310 --- /dev/null +++ b/src/assets/images/flags/cu.svg @@ -0,0 +1,13 @@ + + + + + + + + + + + + + diff --git a/src/assets/images/flags/cv.svg b/src/assets/images/flags/cv.svg new file mode 100644 index 0000000..81ade2a --- /dev/null +++ b/src/assets/images/flags/cv.svg @@ -0,0 +1,13 @@ + + + + + + + + + + + + + diff --git a/src/assets/images/flags/cw.svg b/src/assets/images/flags/cw.svg new file mode 100644 index 0000000..10b866c --- /dev/null +++ b/src/assets/images/flags/cw.svg @@ -0,0 +1,14 @@ + + + + + + + + + + + + + + diff --git a/src/assets/images/flags/cx.svg b/src/assets/images/flags/cx.svg new file mode 100644 index 0000000..43ceb4d --- /dev/null +++ b/src/assets/images/flags/cx.svg @@ -0,0 +1,15 @@ + + + + + + + + + + + + + + + diff --git a/src/assets/images/flags/cy.svg b/src/assets/images/flags/cy.svg new file mode 100644 index 0000000..f3925df --- /dev/null +++ b/src/assets/images/flags/cy.svg @@ -0,0 +1,6 @@ + + + + + + diff --git a/src/assets/images/flags/cz.svg b/src/assets/images/flags/cz.svg new file mode 100644 index 0000000..3b3b354 --- /dev/null +++ b/src/assets/images/flags/cz.svg @@ -0,0 +1,5 @@ + + + + + diff --git a/src/assets/images/flags/de.svg b/src/assets/images/flags/de.svg new file mode 100644 index 0000000..265b587 --- /dev/null +++ b/src/assets/images/flags/de.svg @@ -0,0 +1,5 @@ + + + + + diff --git a/src/assets/images/flags/dg.svg b/src/assets/images/flags/dg.svg new file mode 100644 index 0000000..b0fc581 --- /dev/null +++ b/src/assets/images/flags/dg.svg @@ -0,0 +1,129 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/assets/images/flags/dj.svg b/src/assets/images/flags/dj.svg new file mode 100644 index 0000000..724b5e2 --- /dev/null +++ b/src/assets/images/flags/dj.svg @@ -0,0 +1,13 @@ + + + + + + + + + + + + + diff --git a/src/assets/images/flags/dk.svg b/src/assets/images/flags/dk.svg new file mode 100644 index 0000000..4a07f0e --- /dev/null +++ b/src/assets/images/flags/dk.svg @@ -0,0 +1,5 @@ + + + + + diff --git a/src/assets/images/flags/dm.svg b/src/assets/images/flags/dm.svg new file mode 100644 index 0000000..74ca291 --- /dev/null +++ b/src/assets/images/flags/dm.svg @@ -0,0 +1,152 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/assets/images/flags/do.svg b/src/assets/images/flags/do.svg new file mode 100644 index 0000000..4c63efe --- /dev/null +++ b/src/assets/images/flags/do.svg @@ -0,0 +1,6745 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/assets/images/flags/dz.svg b/src/assets/images/flags/dz.svg new file mode 100644 index 0000000..88deafe --- /dev/null +++ b/src/assets/images/flags/dz.svg @@ -0,0 +1,5 @@ + + + + + diff --git a/src/assets/images/flags/ea.svg b/src/assets/images/flags/ea.svg new file mode 100644 index 0000000..4b11936 --- /dev/null +++ b/src/assets/images/flags/ea.svg @@ -0,0 +1,547 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/assets/images/flags/ec.svg b/src/assets/images/flags/ec.svg new file mode 100644 index 0000000..fbb2af1 --- /dev/null +++ b/src/assets/images/flags/ec.svg @@ -0,0 +1,138 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/assets/images/flags/ee.svg b/src/assets/images/flags/ee.svg new file mode 100644 index 0000000..fed4073 --- /dev/null +++ b/src/assets/images/flags/ee.svg @@ -0,0 +1,7 @@ + + + + + + + diff --git a/src/assets/images/flags/eg.svg b/src/assets/images/flags/eg.svg new file mode 100644 index 0000000..df6c6bd --- /dev/null +++ b/src/assets/images/flags/eg.svg @@ -0,0 +1,38 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/assets/images/flags/eh.svg b/src/assets/images/flags/eh.svg new file mode 100644 index 0000000..ba145b7 --- /dev/null +++ b/src/assets/images/flags/eh.svg @@ -0,0 +1,11 @@ + + + + + + + + + + + diff --git a/src/assets/images/flags/er.svg b/src/assets/images/flags/er.svg new file mode 100644 index 0000000..3b7e0bd --- /dev/null +++ b/src/assets/images/flags/er.svg @@ -0,0 +1,13 @@ + + + + + + + + + + + + + diff --git a/src/assets/images/flags/es-ct.svg b/src/assets/images/flags/es-ct.svg new file mode 100644 index 0000000..27a0086 --- /dev/null +++ b/src/assets/images/flags/es-ct.svg @@ -0,0 +1,4 @@ + + + + diff --git a/src/assets/images/flags/es-ga.svg b/src/assets/images/flags/es-ga.svg new file mode 100644 index 0000000..1574352 --- /dev/null +++ b/src/assets/images/flags/es-ga.svg @@ -0,0 +1,187 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/assets/images/flags/es.svg b/src/assets/images/flags/es.svg new file mode 100644 index 0000000..44870bc --- /dev/null +++ b/src/assets/images/flags/es.svg @@ -0,0 +1,547 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/assets/images/flags/et.svg b/src/assets/images/flags/et.svg new file mode 100644 index 0000000..1daeaab --- /dev/null +++ b/src/assets/images/flags/et.svg @@ -0,0 +1,14 @@ + + + + + + + + + + + + + + diff --git a/src/assets/images/flags/eu.svg b/src/assets/images/flags/eu.svg new file mode 100644 index 0000000..6b67646 --- /dev/null +++ b/src/assets/images/flags/eu.svg @@ -0,0 +1,28 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/assets/images/flags/fi.svg b/src/assets/images/flags/fi.svg new file mode 100644 index 0000000..dd9840a --- /dev/null +++ b/src/assets/images/flags/fi.svg @@ -0,0 +1,5 @@ + + + + + diff --git a/src/assets/images/flags/fj.svg b/src/assets/images/flags/fj.svg new file mode 100644 index 0000000..841e699 --- /dev/null +++ b/src/assets/images/flags/fj.svg @@ -0,0 +1,123 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/assets/images/flags/fk.svg b/src/assets/images/flags/fk.svg new file mode 100644 index 0000000..e0a0488 --- /dev/null +++ b/src/assets/images/flags/fk.svg @@ -0,0 +1,89 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/assets/images/flags/fm.svg b/src/assets/images/flags/fm.svg new file mode 100644 index 0000000..cd69753 --- /dev/null +++ b/src/assets/images/flags/fm.svg @@ -0,0 +1,11 @@ + + + + + + + + + + + diff --git a/src/assets/images/flags/fo.svg b/src/assets/images/flags/fo.svg new file mode 100644 index 0000000..92617a7 --- /dev/null +++ b/src/assets/images/flags/fo.svg @@ -0,0 +1,12 @@ + + + + + + + + + + + + diff --git a/src/assets/images/flags/fr.svg b/src/assets/images/flags/fr.svg new file mode 100644 index 0000000..73f0732 --- /dev/null +++ b/src/assets/images/flags/fr.svg @@ -0,0 +1,7 @@ + + + + + + + diff --git a/src/assets/images/flags/ga.svg b/src/assets/images/flags/ga.svg new file mode 100644 index 0000000..440af40 --- /dev/null +++ b/src/assets/images/flags/ga.svg @@ -0,0 +1,7 @@ + + + + + + + diff --git a/src/assets/images/flags/gb-eng.svg b/src/assets/images/flags/gb-eng.svg new file mode 100644 index 0000000..a7d1563 --- /dev/null +++ b/src/assets/images/flags/gb-eng.svg @@ -0,0 +1,5 @@ + + + + + diff --git a/src/assets/images/flags/gb-nir.svg b/src/assets/images/flags/gb-nir.svg new file mode 100644 index 0000000..78bdce0 --- /dev/null +++ b/src/assets/images/flags/gb-nir.svg @@ -0,0 +1,131 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/assets/images/flags/gb-sct.svg b/src/assets/images/flags/gb-sct.svg new file mode 100644 index 0000000..d2c7684 --- /dev/null +++ b/src/assets/images/flags/gb-sct.svg @@ -0,0 +1,4 @@ + + + + diff --git a/src/assets/images/flags/gb-wls.svg b/src/assets/images/flags/gb-wls.svg new file mode 100644 index 0000000..7968589 --- /dev/null +++ b/src/assets/images/flags/gb-wls.svg @@ -0,0 +1,9 @@ + + + + + + + + + diff --git a/src/assets/images/flags/gb.svg b/src/assets/images/flags/gb.svg new file mode 100644 index 0000000..3f8a6e5 --- /dev/null +++ b/src/assets/images/flags/gb.svg @@ -0,0 +1,7 @@ + + + + + + + diff --git a/src/assets/images/flags/gd.svg b/src/assets/images/flags/gd.svg new file mode 100644 index 0000000..15979e3 --- /dev/null +++ b/src/assets/images/flags/gd.svg @@ -0,0 +1,27 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/assets/images/flags/ge.svg b/src/assets/images/flags/ge.svg new file mode 100644 index 0000000..6ca87ca --- /dev/null +++ b/src/assets/images/flags/ge.svg @@ -0,0 +1,6 @@ + + + + + + diff --git a/src/assets/images/flags/gf.svg b/src/assets/images/flags/gf.svg new file mode 100644 index 0000000..9deada4 --- /dev/null +++ b/src/assets/images/flags/gf.svg @@ -0,0 +1,6 @@ + + + + + + \ No newline at end of file diff --git a/src/assets/images/flags/gg.svg b/src/assets/images/flags/gg.svg new file mode 100644 index 0000000..29f628a --- /dev/null +++ b/src/assets/images/flags/gg.svg @@ -0,0 +1,9 @@ + + + + + + + + + diff --git a/src/assets/images/flags/gh.svg b/src/assets/images/flags/gh.svg new file mode 100644 index 0000000..6fe5a89 --- /dev/null +++ b/src/assets/images/flags/gh.svg @@ -0,0 +1,6 @@ + + + + + + diff --git a/src/assets/images/flags/gi.svg b/src/assets/images/flags/gi.svg new file mode 100644 index 0000000..4679943 --- /dev/null +++ b/src/assets/images/flags/gi.svg @@ -0,0 +1,32 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/assets/images/flags/gl.svg b/src/assets/images/flags/gl.svg new file mode 100644 index 0000000..dc7f8bf --- /dev/null +++ b/src/assets/images/flags/gl.svg @@ -0,0 +1,4 @@ + + + + diff --git a/src/assets/images/flags/gm.svg b/src/assets/images/flags/gm.svg new file mode 100644 index 0000000..72616e2 --- /dev/null +++ b/src/assets/images/flags/gm.svg @@ -0,0 +1,9 @@ + + + + + + + + + diff --git a/src/assets/images/flags/gn.svg b/src/assets/images/flags/gn.svg new file mode 100644 index 0000000..d5a4512 --- /dev/null +++ b/src/assets/images/flags/gn.svg @@ -0,0 +1,7 @@ + + + + + + + diff --git a/src/assets/images/flags/gp.svg b/src/assets/images/flags/gp.svg new file mode 100644 index 0000000..071b5f6 --- /dev/null +++ b/src/assets/images/flags/gp.svg @@ -0,0 +1,7 @@ + + + + + + + diff --git a/src/assets/images/flags/gq.svg b/src/assets/images/flags/gq.svg new file mode 100644 index 0000000..9dc564f --- /dev/null +++ b/src/assets/images/flags/gq.svg @@ -0,0 +1,23 @@ + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/assets/images/flags/gr.svg b/src/assets/images/flags/gr.svg new file mode 100644 index 0000000..911b165 --- /dev/null +++ b/src/assets/images/flags/gr.svg @@ -0,0 +1,16 @@ + + + + + + + + + + + + + + + + diff --git a/src/assets/images/flags/gs.svg b/src/assets/images/flags/gs.svg new file mode 100644 index 0000000..8c97486 --- /dev/null +++ b/src/assets/images/flags/gs.svg @@ -0,0 +1,132 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/assets/images/flags/gt.svg b/src/assets/images/flags/gt.svg new file mode 100644 index 0000000..8eb8e87 --- /dev/null +++ b/src/assets/images/flags/gt.svg @@ -0,0 +1,220 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/assets/images/flags/gu.svg b/src/assets/images/flags/gu.svg new file mode 100644 index 0000000..ff3395f --- /dev/null +++ b/src/assets/images/flags/gu.svg @@ -0,0 +1,23 @@ + + + + + + + + + + G + U + A + M + + + + + + + + + + diff --git a/src/assets/images/flags/gw.svg b/src/assets/images/flags/gw.svg new file mode 100644 index 0000000..9fa07cf --- /dev/null +++ b/src/assets/images/flags/gw.svg @@ -0,0 +1,15 @@ + + + + + + + + + + + + + + + diff --git a/src/assets/images/flags/gy.svg b/src/assets/images/flags/gy.svg new file mode 100644 index 0000000..14f4d25 --- /dev/null +++ b/src/assets/images/flags/gy.svg @@ -0,0 +1,9 @@ + + + + + + + + + diff --git a/src/assets/images/flags/hk.svg b/src/assets/images/flags/hk.svg new file mode 100644 index 0000000..224ad86 --- /dev/null +++ b/src/assets/images/flags/hk.svg @@ -0,0 +1,30 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/assets/images/flags/hm.svg b/src/assets/images/flags/hm.svg new file mode 100644 index 0000000..ab3c34c --- /dev/null +++ b/src/assets/images/flags/hm.svg @@ -0,0 +1,8 @@ + + + + + + + + diff --git a/src/assets/images/flags/hn.svg b/src/assets/images/flags/hn.svg new file mode 100644 index 0000000..61b04d9 --- /dev/null +++ b/src/assets/images/flags/hn.svg @@ -0,0 +1,18 @@ + + + + + + + + + + + + + + + + + + diff --git a/src/assets/images/flags/hr.svg b/src/assets/images/flags/hr.svg new file mode 100644 index 0000000..693dff5 --- /dev/null +++ b/src/assets/images/flags/hr.svg @@ -0,0 +1,56 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/assets/images/flags/ht.svg b/src/assets/images/flags/ht.svg new file mode 100644 index 0000000..6ab139e --- /dev/null +++ b/src/assets/images/flags/ht.svg @@ -0,0 +1,116 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/assets/images/flags/hu.svg b/src/assets/images/flags/hu.svg new file mode 100644 index 0000000..5d1a506 --- /dev/null +++ b/src/assets/images/flags/hu.svg @@ -0,0 +1,7 @@ + + + + + + + diff --git a/src/assets/images/flags/ic.svg b/src/assets/images/flags/ic.svg new file mode 100644 index 0000000..0ac9777 --- /dev/null +++ b/src/assets/images/flags/ic.svg @@ -0,0 +1,7 @@ + + + + + + + diff --git a/src/assets/images/flags/id.svg b/src/assets/images/flags/id.svg new file mode 100644 index 0000000..84626e0 --- /dev/null +++ b/src/assets/images/flags/id.svg @@ -0,0 +1,6 @@ + + + + + + diff --git a/src/assets/images/flags/ie.svg b/src/assets/images/flags/ie.svg new file mode 100644 index 0000000..2486b9f --- /dev/null +++ b/src/assets/images/flags/ie.svg @@ -0,0 +1,7 @@ + + + + + + + diff --git a/src/assets/images/flags/il.svg b/src/assets/images/flags/il.svg new file mode 100644 index 0000000..79c5fc3 --- /dev/null +++ b/src/assets/images/flags/il.svg @@ -0,0 +1,14 @@ + + + + + + + + + + + + + + diff --git a/src/assets/images/flags/im.svg b/src/assets/images/flags/im.svg new file mode 100644 index 0000000..1166daf --- /dev/null +++ b/src/assets/images/flags/im.svg @@ -0,0 +1,36 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/assets/images/flags/in.svg b/src/assets/images/flags/in.svg new file mode 100644 index 0000000..312f1db --- /dev/null +++ b/src/assets/images/flags/in.svg @@ -0,0 +1,25 @@ + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/assets/images/flags/io.svg b/src/assets/images/flags/io.svg new file mode 100644 index 0000000..412afae --- /dev/null +++ b/src/assets/images/flags/io.svg @@ -0,0 +1,129 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/assets/images/flags/iq.svg b/src/assets/images/flags/iq.svg new file mode 100644 index 0000000..4ed4ab6 --- /dev/null +++ b/src/assets/images/flags/iq.svg @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/src/assets/images/flags/ir.svg b/src/assets/images/flags/ir.svg new file mode 100644 index 0000000..1958813 --- /dev/null +++ b/src/assets/images/flags/ir.svg @@ -0,0 +1,219 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/assets/images/flags/is.svg b/src/assets/images/flags/is.svg new file mode 100644 index 0000000..0d75052 --- /dev/null +++ b/src/assets/images/flags/is.svg @@ -0,0 +1,12 @@ + + + + + + + + + + + + diff --git a/src/assets/images/flags/it.svg b/src/assets/images/flags/it.svg new file mode 100644 index 0000000..823adc6 --- /dev/null +++ b/src/assets/images/flags/it.svg @@ -0,0 +1,7 @@ + + + + + + + diff --git a/src/assets/images/flags/italy.svg b/src/assets/images/flags/italy.svg new file mode 100644 index 0000000..dc4053a --- /dev/null +++ b/src/assets/images/flags/italy.svg @@ -0,0 +1,37 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/assets/images/flags/je.svg b/src/assets/images/flags/je.svg new file mode 100644 index 0000000..5348d32 --- /dev/null +++ b/src/assets/images/flags/je.svg @@ -0,0 +1,44 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/assets/images/flags/jm.svg b/src/assets/images/flags/jm.svg new file mode 100644 index 0000000..7a3aaac --- /dev/null +++ b/src/assets/images/flags/jm.svg @@ -0,0 +1,8 @@ + + + + + + + + diff --git a/src/assets/images/flags/jo.svg b/src/assets/images/flags/jo.svg new file mode 100644 index 0000000..453f73a --- /dev/null +++ b/src/assets/images/flags/jo.svg @@ -0,0 +1,16 @@ + + + + + + + + + + + + + + + + diff --git a/src/assets/images/flags/jp.svg b/src/assets/images/flags/jp.svg new file mode 100644 index 0000000..4af8792 --- /dev/null +++ b/src/assets/images/flags/jp.svg @@ -0,0 +1,11 @@ + + + + + + + + + + + diff --git a/src/assets/images/flags/ke.svg b/src/assets/images/flags/ke.svg new file mode 100644 index 0000000..0b8cb05 --- /dev/null +++ b/src/assets/images/flags/ke.svg @@ -0,0 +1,23 @@ + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/assets/images/flags/kg.svg b/src/assets/images/flags/kg.svg new file mode 100644 index 0000000..bdb5d1f --- /dev/null +++ b/src/assets/images/flags/kg.svg @@ -0,0 +1,15 @@ + + + + + + + + + + + + + + + diff --git a/src/assets/images/flags/kh.svg b/src/assets/images/flags/kh.svg new file mode 100644 index 0000000..c72d6fe --- /dev/null +++ b/src/assets/images/flags/kh.svg @@ -0,0 +1,61 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/assets/images/flags/ki.svg b/src/assets/images/flags/ki.svg new file mode 100644 index 0000000..122d74b --- /dev/null +++ b/src/assets/images/flags/ki.svg @@ -0,0 +1,36 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/assets/images/flags/km.svg b/src/assets/images/flags/km.svg new file mode 100644 index 0000000..a8f3021 --- /dev/null +++ b/src/assets/images/flags/km.svg @@ -0,0 +1,16 @@ + + + + + + + + + + + + + + + + diff --git a/src/assets/images/flags/kn.svg b/src/assets/images/flags/kn.svg new file mode 100644 index 0000000..cd8f9de --- /dev/null +++ b/src/assets/images/flags/kn.svg @@ -0,0 +1,14 @@ + + + + + + + + + + + + + + diff --git a/src/assets/images/flags/kp.svg b/src/assets/images/flags/kp.svg new file mode 100644 index 0000000..eddff81 --- /dev/null +++ b/src/assets/images/flags/kp.svg @@ -0,0 +1,15 @@ + + + + + + + + + + + + + + + diff --git a/src/assets/images/flags/kr.svg b/src/assets/images/flags/kr.svg new file mode 100644 index 0000000..2fd011d --- /dev/null +++ b/src/assets/images/flags/kr.svg @@ -0,0 +1,17 @@ + + + + + + + + + + + + + + + + + diff --git a/src/assets/images/flags/kw.svg b/src/assets/images/flags/kw.svg new file mode 100644 index 0000000..1f105f8 --- /dev/null +++ b/src/assets/images/flags/kw.svg @@ -0,0 +1,13 @@ + + + + + + + + + + + + + diff --git a/src/assets/images/flags/ky.svg b/src/assets/images/flags/ky.svg new file mode 100644 index 0000000..b359c3b --- /dev/null +++ b/src/assets/images/flags/ky.svg @@ -0,0 +1,109 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/assets/images/flags/kz.svg b/src/assets/images/flags/kz.svg new file mode 100644 index 0000000..6d12c67 --- /dev/null +++ b/src/assets/images/flags/kz.svg @@ -0,0 +1,23 @@ + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/assets/images/flags/la.svg b/src/assets/images/flags/la.svg new file mode 100644 index 0000000..2518842 --- /dev/null +++ b/src/assets/images/flags/la.svg @@ -0,0 +1,12 @@ + + + + + + + + + + + + diff --git a/src/assets/images/flags/lb.svg b/src/assets/images/flags/lb.svg new file mode 100644 index 0000000..7edd7b9 --- /dev/null +++ b/src/assets/images/flags/lb.svg @@ -0,0 +1,15 @@ + + + + + + + + + + + + + + + diff --git a/src/assets/images/flags/lc.svg b/src/assets/images/flags/lc.svg new file mode 100644 index 0000000..11f0dbf --- /dev/null +++ b/src/assets/images/flags/lc.svg @@ -0,0 +1,8 @@ + + + + + + + + diff --git a/src/assets/images/flags/li.svg b/src/assets/images/flags/li.svg new file mode 100644 index 0000000..43fe29f --- /dev/null +++ b/src/assets/images/flags/li.svg @@ -0,0 +1,43 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/assets/images/flags/lk.svg b/src/assets/images/flags/lk.svg new file mode 100644 index 0000000..1ca4c4b --- /dev/null +++ b/src/assets/images/flags/lk.svg @@ -0,0 +1,22 @@ + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/assets/images/flags/lr.svg b/src/assets/images/flags/lr.svg new file mode 100644 index 0000000..38971b5 --- /dev/null +++ b/src/assets/images/flags/lr.svg @@ -0,0 +1,14 @@ + + + + + + + + + + + + + + diff --git a/src/assets/images/flags/ls.svg b/src/assets/images/flags/ls.svg new file mode 100644 index 0000000..7307cba --- /dev/null +++ b/src/assets/images/flags/ls.svg @@ -0,0 +1,8 @@ + + + + + + + + diff --git a/src/assets/images/flags/lt.svg b/src/assets/images/flags/lt.svg new file mode 100644 index 0000000..2340bc6 --- /dev/null +++ b/src/assets/images/flags/lt.svg @@ -0,0 +1,7 @@ + + + + + + + diff --git a/src/assets/images/flags/lu.svg b/src/assets/images/flags/lu.svg new file mode 100644 index 0000000..f3d1dcd --- /dev/null +++ b/src/assets/images/flags/lu.svg @@ -0,0 +1,5 @@ + + + + + diff --git a/src/assets/images/flags/lv.svg b/src/assets/images/flags/lv.svg new file mode 100644 index 0000000..3b9583d --- /dev/null +++ b/src/assets/images/flags/lv.svg @@ -0,0 +1,6 @@ + + + + + + diff --git a/src/assets/images/flags/ly.svg b/src/assets/images/flags/ly.svg new file mode 100644 index 0000000..2828a8b --- /dev/null +++ b/src/assets/images/flags/ly.svg @@ -0,0 +1,13 @@ + + + + + + + + + + + + + diff --git a/src/assets/images/flags/ma.svg b/src/assets/images/flags/ma.svg new file mode 100644 index 0000000..bdf21ed --- /dev/null +++ b/src/assets/images/flags/ma.svg @@ -0,0 +1,4 @@ + + + + diff --git a/src/assets/images/flags/mc.svg b/src/assets/images/flags/mc.svg new file mode 100644 index 0000000..9bc6749 --- /dev/null +++ b/src/assets/images/flags/mc.svg @@ -0,0 +1,6 @@ + + + + + + diff --git a/src/assets/images/flags/md.svg b/src/assets/images/flags/md.svg new file mode 100644 index 0000000..d4109fb --- /dev/null +++ b/src/assets/images/flags/md.svg @@ -0,0 +1,71 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/assets/images/flags/me.svg b/src/assets/images/flags/me.svg new file mode 100644 index 0000000..e95f86b --- /dev/null +++ b/src/assets/images/flags/me.svg @@ -0,0 +1,118 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/assets/images/flags/mf.svg b/src/assets/images/flags/mf.svg new file mode 100644 index 0000000..885c65f --- /dev/null +++ b/src/assets/images/flags/mf.svg @@ -0,0 +1,7 @@ + + + + + + + diff --git a/src/assets/images/flags/mg.svg b/src/assets/images/flags/mg.svg new file mode 100644 index 0000000..da92817 --- /dev/null +++ b/src/assets/images/flags/mg.svg @@ -0,0 +1,7 @@ + + + + + + + diff --git a/src/assets/images/flags/mh.svg b/src/assets/images/flags/mh.svg new file mode 100644 index 0000000..dd23a3d --- /dev/null +++ b/src/assets/images/flags/mh.svg @@ -0,0 +1,8 @@ + + + + + + + + diff --git a/src/assets/images/flags/mk.svg b/src/assets/images/flags/mk.svg new file mode 100644 index 0000000..6ba114e --- /dev/null +++ b/src/assets/images/flags/mk.svg @@ -0,0 +1,5 @@ + + + + + diff --git a/src/assets/images/flags/ml.svg b/src/assets/images/flags/ml.svg new file mode 100644 index 0000000..b1929c9 --- /dev/null +++ b/src/assets/images/flags/ml.svg @@ -0,0 +1,7 @@ + + + + + + + diff --git a/src/assets/images/flags/mm.svg b/src/assets/images/flags/mm.svg new file mode 100644 index 0000000..7922dc4 --- /dev/null +++ b/src/assets/images/flags/mm.svg @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/src/assets/images/flags/mn.svg b/src/assets/images/flags/mn.svg new file mode 100644 index 0000000..e7a78a1 --- /dev/null +++ b/src/assets/images/flags/mn.svg @@ -0,0 +1,14 @@ + + + + + + + + + + + + + + diff --git a/src/assets/images/flags/mo.svg b/src/assets/images/flags/mo.svg new file mode 100644 index 0000000..3549cf6 --- /dev/null +++ b/src/assets/images/flags/mo.svg @@ -0,0 +1,9 @@ + + + + + + + + + diff --git a/src/assets/images/flags/mp.svg b/src/assets/images/flags/mp.svg new file mode 100644 index 0000000..acab75a --- /dev/null +++ b/src/assets/images/flags/mp.svg @@ -0,0 +1,86 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/assets/images/flags/mq.svg b/src/assets/images/flags/mq.svg new file mode 100644 index 0000000..06f0283 --- /dev/null +++ b/src/assets/images/flags/mq.svg @@ -0,0 +1,7 @@ + + + + + + + diff --git a/src/assets/images/flags/mr.svg b/src/assets/images/flags/mr.svg new file mode 100644 index 0000000..79d08ce --- /dev/null +++ b/src/assets/images/flags/mr.svg @@ -0,0 +1,6 @@ + + + + + + diff --git a/src/assets/images/flags/ms.svg b/src/assets/images/flags/ms.svg new file mode 100644 index 0000000..9038d97 --- /dev/null +++ b/src/assets/images/flags/ms.svg @@ -0,0 +1,25 @@ + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/assets/images/flags/mt.svg b/src/assets/images/flags/mt.svg new file mode 100644 index 0000000..9e0ac59 --- /dev/null +++ b/src/assets/images/flags/mt.svg @@ -0,0 +1,50 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/assets/images/flags/mu.svg b/src/assets/images/flags/mu.svg new file mode 100644 index 0000000..a5fab45 --- /dev/null +++ b/src/assets/images/flags/mu.svg @@ -0,0 +1,8 @@ + + + + + + + + diff --git a/src/assets/images/flags/mv.svg b/src/assets/images/flags/mv.svg new file mode 100644 index 0000000..e54fc1f --- /dev/null +++ b/src/assets/images/flags/mv.svg @@ -0,0 +1,6 @@ + + + + + + diff --git a/src/assets/images/flags/mw.svg b/src/assets/images/flags/mw.svg new file mode 100644 index 0000000..6134e54 --- /dev/null +++ b/src/assets/images/flags/mw.svg @@ -0,0 +1,15 @@ + + + + + + + + + + + + + + + diff --git a/src/assets/images/flags/mx.svg b/src/assets/images/flags/mx.svg new file mode 100644 index 0000000..b260fc7 --- /dev/null +++ b/src/assets/images/flags/mx.svg @@ -0,0 +1,378 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/assets/images/flags/my.svg b/src/assets/images/flags/my.svg new file mode 100644 index 0000000..f4aeeb8 --- /dev/null +++ b/src/assets/images/flags/my.svg @@ -0,0 +1,7 @@ + + + + + + + diff --git a/src/assets/images/flags/mz.svg b/src/assets/images/flags/mz.svg new file mode 100644 index 0000000..a3442b1 --- /dev/null +++ b/src/assets/images/flags/mz.svg @@ -0,0 +1,21 @@ + + + + + + + + + + + + + + + + + + + + + diff --git a/src/assets/images/flags/na.svg b/src/assets/images/flags/na.svg new file mode 100644 index 0000000..74c8624 --- /dev/null +++ b/src/assets/images/flags/na.svg @@ -0,0 +1,16 @@ + + + + + + + + + + + + + + + + diff --git a/src/assets/images/flags/nc.svg b/src/assets/images/flags/nc.svg new file mode 100644 index 0000000..21076aa --- /dev/null +++ b/src/assets/images/flags/nc.svg @@ -0,0 +1,12 @@ + + + + + + + + + + + + diff --git a/src/assets/images/flags/ne.svg b/src/assets/images/flags/ne.svg new file mode 100644 index 0000000..6b2c339 --- /dev/null +++ b/src/assets/images/flags/ne.svg @@ -0,0 +1,6 @@ + + + + + + diff --git a/src/assets/images/flags/nf.svg b/src/assets/images/flags/nf.svg new file mode 100644 index 0000000..e697351 --- /dev/null +++ b/src/assets/images/flags/nf.svg @@ -0,0 +1,11 @@ + + + + + + + + + + + diff --git a/src/assets/images/flags/ng.svg b/src/assets/images/flags/ng.svg new file mode 100644 index 0000000..242d01b --- /dev/null +++ b/src/assets/images/flags/ng.svg @@ -0,0 +1,6 @@ + + + + + + diff --git a/src/assets/images/flags/ni.svg b/src/assets/images/flags/ni.svg new file mode 100644 index 0000000..d12b1a7 --- /dev/null +++ b/src/assets/images/flags/ni.svg @@ -0,0 +1,129 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/assets/images/flags/nl.svg b/src/assets/images/flags/nl.svg new file mode 100644 index 0000000..f96d716 --- /dev/null +++ b/src/assets/images/flags/nl.svg @@ -0,0 +1,5 @@ + + + + + diff --git a/src/assets/images/flags/no.svg b/src/assets/images/flags/no.svg new file mode 100644 index 0000000..3ed3e21 --- /dev/null +++ b/src/assets/images/flags/no.svg @@ -0,0 +1,7 @@ + + + + + + + diff --git a/src/assets/images/flags/np.svg b/src/assets/images/flags/np.svg new file mode 100644 index 0000000..6c07b48 --- /dev/null +++ b/src/assets/images/flags/np.svg @@ -0,0 +1,19 @@ + + + + + + + + + + + + + + + + + + + diff --git a/src/assets/images/flags/nr.svg b/src/assets/images/flags/nr.svg new file mode 100644 index 0000000..33b80f9 --- /dev/null +++ b/src/assets/images/flags/nr.svg @@ -0,0 +1,12 @@ + + + + + + + + + + + + diff --git a/src/assets/images/flags/nu.svg b/src/assets/images/flags/nu.svg new file mode 100644 index 0000000..bc09388 --- /dev/null +++ b/src/assets/images/flags/nu.svg @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/src/assets/images/flags/nz.svg b/src/assets/images/flags/nz.svg new file mode 100644 index 0000000..3dd5e85 --- /dev/null +++ b/src/assets/images/flags/nz.svg @@ -0,0 +1,36 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/assets/images/flags/om.svg b/src/assets/images/flags/om.svg new file mode 100644 index 0000000..c1dfe96 --- /dev/null +++ b/src/assets/images/flags/om.svg @@ -0,0 +1,115 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/assets/images/flags/pa.svg b/src/assets/images/flags/pa.svg new file mode 100644 index 0000000..57cdc17 --- /dev/null +++ b/src/assets/images/flags/pa.svg @@ -0,0 +1,13 @@ + + + + + + + + + + + + + diff --git a/src/assets/images/flags/pe.svg b/src/assets/images/flags/pe.svg new file mode 100644 index 0000000..625ae5c --- /dev/null +++ b/src/assets/images/flags/pe.svg @@ -0,0 +1,244 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/assets/images/flags/pf.svg b/src/assets/images/flags/pf.svg new file mode 100644 index 0000000..bd033a4 --- /dev/null +++ b/src/assets/images/flags/pf.svg @@ -0,0 +1,18 @@ + + + + + + + + + + + + + + + + + + diff --git a/src/assets/images/flags/pg.svg b/src/assets/images/flags/pg.svg new file mode 100644 index 0000000..66d4912 --- /dev/null +++ b/src/assets/images/flags/pg.svg @@ -0,0 +1,16 @@ + + + + + + + + + + + + + + + + diff --git a/src/assets/images/flags/ph.svg b/src/assets/images/flags/ph.svg new file mode 100644 index 0000000..e2e8ec0 --- /dev/null +++ b/src/assets/images/flags/ph.svg @@ -0,0 +1,8 @@ + + + + + + + + diff --git a/src/assets/images/flags/pk.svg b/src/assets/images/flags/pk.svg new file mode 100644 index 0000000..b5a5cb6 --- /dev/null +++ b/src/assets/images/flags/pk.svg @@ -0,0 +1,15 @@ + + + + + + + + + + + + + + + diff --git a/src/assets/images/flags/pl.svg b/src/assets/images/flags/pl.svg new file mode 100644 index 0000000..98d7fc0 --- /dev/null +++ b/src/assets/images/flags/pl.svg @@ -0,0 +1,6 @@ + + + + + + diff --git a/src/assets/images/flags/pm.svg b/src/assets/images/flags/pm.svg new file mode 100644 index 0000000..4606f14 --- /dev/null +++ b/src/assets/images/flags/pm.svg @@ -0,0 +1,7 @@ + + + + + + + diff --git a/src/assets/images/flags/pn.svg b/src/assets/images/flags/pn.svg new file mode 100644 index 0000000..6e9c971 --- /dev/null +++ b/src/assets/images/flags/pn.svg @@ -0,0 +1,53 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/assets/images/flags/pr.svg b/src/assets/images/flags/pr.svg new file mode 100644 index 0000000..1a2770f --- /dev/null +++ b/src/assets/images/flags/pr.svg @@ -0,0 +1,13 @@ + + + + + + + + + + + + + diff --git a/src/assets/images/flags/ps.svg b/src/assets/images/flags/ps.svg new file mode 100644 index 0000000..708caf0 --- /dev/null +++ b/src/assets/images/flags/ps.svg @@ -0,0 +1,15 @@ + + + + + + + + + + + + + + + diff --git a/src/assets/images/flags/pt.svg b/src/assets/images/flags/pt.svg new file mode 100644 index 0000000..c5df06e --- /dev/null +++ b/src/assets/images/flags/pt.svg @@ -0,0 +1,57 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/assets/images/flags/pw.svg b/src/assets/images/flags/pw.svg new file mode 100644 index 0000000..14250c8 --- /dev/null +++ b/src/assets/images/flags/pw.svg @@ -0,0 +1,11 @@ + + + + + + + + + + + diff --git a/src/assets/images/flags/py.svg b/src/assets/images/flags/py.svg new file mode 100644 index 0000000..0396c56 --- /dev/null +++ b/src/assets/images/flags/py.svg @@ -0,0 +1,156 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/assets/images/flags/qa.svg b/src/assets/images/flags/qa.svg new file mode 100644 index 0000000..4beaace --- /dev/null +++ b/src/assets/images/flags/qa.svg @@ -0,0 +1,4 @@ + + + + diff --git a/src/assets/images/flags/re.svg b/src/assets/images/flags/re.svg new file mode 100644 index 0000000..ad3efaf --- /dev/null +++ b/src/assets/images/flags/re.svg @@ -0,0 +1,7 @@ + + + + + + + diff --git a/src/assets/images/flags/ro.svg b/src/assets/images/flags/ro.svg new file mode 100644 index 0000000..38715b3 --- /dev/null +++ b/src/assets/images/flags/ro.svg @@ -0,0 +1,7 @@ + + + + + + + diff --git a/src/assets/images/flags/rs.svg b/src/assets/images/flags/rs.svg new file mode 100644 index 0000000..2625fb6 --- /dev/null +++ b/src/assets/images/flags/rs.svg @@ -0,0 +1,296 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/assets/images/flags/ru.svg b/src/assets/images/flags/ru.svg new file mode 100644 index 0000000..93da47c --- /dev/null +++ b/src/assets/images/flags/ru.svg @@ -0,0 +1,7 @@ + + + + + + + diff --git a/src/assets/images/flags/rw.svg b/src/assets/images/flags/rw.svg new file mode 100644 index 0000000..69f54b2 --- /dev/null +++ b/src/assets/images/flags/rw.svg @@ -0,0 +1,13 @@ + + + + + + + + + + + + + diff --git a/src/assets/images/flags/sa.svg b/src/assets/images/flags/sa.svg new file mode 100644 index 0000000..c43ed46 --- /dev/null +++ b/src/assets/images/flags/sa.svg @@ -0,0 +1,26 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/assets/images/flags/sb.svg b/src/assets/images/flags/sb.svg new file mode 100644 index 0000000..ba02df4 --- /dev/null +++ b/src/assets/images/flags/sb.svg @@ -0,0 +1,13 @@ + + + + + + + + + + + + + diff --git a/src/assets/images/flags/sc.svg b/src/assets/images/flags/sc.svg new file mode 100644 index 0000000..e16230d --- /dev/null +++ b/src/assets/images/flags/sc.svg @@ -0,0 +1,7 @@ + + + + + + + diff --git a/src/assets/images/flags/sd.svg b/src/assets/images/flags/sd.svg new file mode 100644 index 0000000..ec5db80 --- /dev/null +++ b/src/assets/images/flags/sd.svg @@ -0,0 +1,13 @@ + + + + + + + + + + + + + diff --git a/src/assets/images/flags/se.svg b/src/assets/images/flags/se.svg new file mode 100644 index 0000000..8d2b22a --- /dev/null +++ b/src/assets/images/flags/se.svg @@ -0,0 +1,4 @@ + + + + diff --git a/src/assets/images/flags/sg.svg b/src/assets/images/flags/sg.svg new file mode 100644 index 0000000..a7348df --- /dev/null +++ b/src/assets/images/flags/sg.svg @@ -0,0 +1,13 @@ + + + + + + + + + + + + + diff --git a/src/assets/images/flags/sh.svg b/src/assets/images/flags/sh.svg new file mode 100644 index 0000000..3484cb3 --- /dev/null +++ b/src/assets/images/flags/sh.svg @@ -0,0 +1,76 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/assets/images/flags/si.svg b/src/assets/images/flags/si.svg new file mode 100644 index 0000000..c6f7e15 --- /dev/null +++ b/src/assets/images/flags/si.svg @@ -0,0 +1,18 @@ + + + + + + + + + + + + + + + + + + diff --git a/src/assets/images/flags/sj.svg b/src/assets/images/flags/sj.svg new file mode 100644 index 0000000..7d8658a --- /dev/null +++ b/src/assets/images/flags/sj.svg @@ -0,0 +1,7 @@ + + + + + + + diff --git a/src/assets/images/flags/sk.svg b/src/assets/images/flags/sk.svg new file mode 100644 index 0000000..b3e0d67 --- /dev/null +++ b/src/assets/images/flags/sk.svg @@ -0,0 +1,9 @@ + + + + + + + + + diff --git a/src/assets/images/flags/sl.svg b/src/assets/images/flags/sl.svg new file mode 100644 index 0000000..aee055f --- /dev/null +++ b/src/assets/images/flags/sl.svg @@ -0,0 +1,12 @@ + + + + + + + + + + + + diff --git a/src/assets/images/flags/sm.svg b/src/assets/images/flags/sm.svg new file mode 100644 index 0000000..1de9d4e --- /dev/null +++ b/src/assets/images/flags/sm.svg @@ -0,0 +1,73 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/assets/images/flags/sn.svg b/src/assets/images/flags/sn.svg new file mode 100644 index 0000000..6edbb8f --- /dev/null +++ b/src/assets/images/flags/sn.svg @@ -0,0 +1,8 @@ + + + + + + + + diff --git a/src/assets/images/flags/so.svg b/src/assets/images/flags/so.svg new file mode 100644 index 0000000..fb59ab2 --- /dev/null +++ b/src/assets/images/flags/so.svg @@ -0,0 +1,11 @@ + + + + + + + + + + + diff --git a/src/assets/images/flags/sr.svg b/src/assets/images/flags/sr.svg new file mode 100644 index 0000000..68f092f --- /dev/null +++ b/src/assets/images/flags/sr.svg @@ -0,0 +1,6 @@ + + + + + + diff --git a/src/assets/images/flags/ss.svg b/src/assets/images/flags/ss.svg new file mode 100644 index 0000000..7706160 --- /dev/null +++ b/src/assets/images/flags/ss.svg @@ -0,0 +1,8 @@ + + + + + + + + diff --git a/src/assets/images/flags/st.svg b/src/assets/images/flags/st.svg new file mode 100644 index 0000000..2fdb95c --- /dev/null +++ b/src/assets/images/flags/st.svg @@ -0,0 +1,16 @@ + + + + + + + + + + + + + + + + diff --git a/src/assets/images/flags/sv.svg b/src/assets/images/flags/sv.svg new file mode 100644 index 0000000..f06ffec --- /dev/null +++ b/src/assets/images/flags/sv.svg @@ -0,0 +1,594 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/assets/images/flags/sx.svg b/src/assets/images/flags/sx.svg new file mode 100644 index 0000000..3441ebe --- /dev/null +++ b/src/assets/images/flags/sx.svg @@ -0,0 +1,56 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/assets/images/flags/sy.svg b/src/assets/images/flags/sy.svg new file mode 100644 index 0000000..1bee63a --- /dev/null +++ b/src/assets/images/flags/sy.svg @@ -0,0 +1,6 @@ + + + + + + diff --git a/src/assets/images/flags/sz.svg b/src/assets/images/flags/sz.svg new file mode 100644 index 0000000..65a739d --- /dev/null +++ b/src/assets/images/flags/sz.svg @@ -0,0 +1,34 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/assets/images/flags/ta.svg b/src/assets/images/flags/ta.svg new file mode 100644 index 0000000..a2c99cb --- /dev/null +++ b/src/assets/images/flags/ta.svg @@ -0,0 +1,76 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/assets/images/flags/tc.svg b/src/assets/images/flags/tc.svg new file mode 100644 index 0000000..31cfaf4 --- /dev/null +++ b/src/assets/images/flags/tc.svg @@ -0,0 +1,50 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/assets/images/flags/td.svg b/src/assets/images/flags/td.svg new file mode 100644 index 0000000..e003b22 --- /dev/null +++ b/src/assets/images/flags/td.svg @@ -0,0 +1,7 @@ + + + + + + + diff --git a/src/assets/images/flags/tf.svg b/src/assets/images/flags/tf.svg new file mode 100644 index 0000000..5654f6d --- /dev/null +++ b/src/assets/images/flags/tf.svg @@ -0,0 +1,15 @@ + + + + + + + + + + + + + + + diff --git a/src/assets/images/flags/tg.svg b/src/assets/images/flags/tg.svg new file mode 100644 index 0000000..cf5ec29 --- /dev/null +++ b/src/assets/images/flags/tg.svg @@ -0,0 +1,14 @@ + + + + + + + + + + + + + + diff --git a/src/assets/images/flags/th.svg b/src/assets/images/flags/th.svg new file mode 100644 index 0000000..749ca05 --- /dev/null +++ b/src/assets/images/flags/th.svg @@ -0,0 +1,7 @@ + + + + + + + diff --git a/src/assets/images/flags/tj.svg b/src/assets/images/flags/tj.svg new file mode 100644 index 0000000..a9f82a0 --- /dev/null +++ b/src/assets/images/flags/tj.svg @@ -0,0 +1,26 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/assets/images/flags/tk.svg b/src/assets/images/flags/tk.svg new file mode 100644 index 0000000..21f3740 --- /dev/null +++ b/src/assets/images/flags/tk.svg @@ -0,0 +1,5 @@ + + + + + diff --git a/src/assets/images/flags/tl.svg b/src/assets/images/flags/tl.svg new file mode 100644 index 0000000..f542e2e --- /dev/null +++ b/src/assets/images/flags/tl.svg @@ -0,0 +1,13 @@ + + + + + + + + + + + + + diff --git a/src/assets/images/flags/tm.svg b/src/assets/images/flags/tm.svg new file mode 100644 index 0000000..42c2acc --- /dev/null +++ b/src/assets/images/flags/tm.svg @@ -0,0 +1,202 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/assets/images/flags/tn.svg b/src/assets/images/flags/tn.svg new file mode 100644 index 0000000..2ee6d6c --- /dev/null +++ b/src/assets/images/flags/tn.svg @@ -0,0 +1,13 @@ + + + + + + + + + + + + + diff --git a/src/assets/images/flags/to.svg b/src/assets/images/flags/to.svg new file mode 100644 index 0000000..be4aa48 --- /dev/null +++ b/src/assets/images/flags/to.svg @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/src/assets/images/flags/tr.svg b/src/assets/images/flags/tr.svg new file mode 100644 index 0000000..5057b62 --- /dev/null +++ b/src/assets/images/flags/tr.svg @@ -0,0 +1,8 @@ + + + + + + + + diff --git a/src/assets/images/flags/tt.svg b/src/assets/images/flags/tt.svg new file mode 100644 index 0000000..da3d0bb --- /dev/null +++ b/src/assets/images/flags/tt.svg @@ -0,0 +1,7 @@ + + + + + + + diff --git a/src/assets/images/flags/tv.svg b/src/assets/images/flags/tv.svg new file mode 100644 index 0000000..c738e4a --- /dev/null +++ b/src/assets/images/flags/tv.svg @@ -0,0 +1,9 @@ + + + + + + + + + diff --git a/src/assets/images/flags/tw.svg b/src/assets/images/flags/tw.svg new file mode 100644 index 0000000..68793b7 --- /dev/null +++ b/src/assets/images/flags/tw.svg @@ -0,0 +1,32 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/assets/images/flags/tz.svg b/src/assets/images/flags/tz.svg new file mode 100644 index 0000000..e1d0684 --- /dev/null +++ b/src/assets/images/flags/tz.svg @@ -0,0 +1,15 @@ + + + + + + + + + + + + + + + diff --git a/src/assets/images/flags/ua.svg b/src/assets/images/flags/ua.svg new file mode 100644 index 0000000..a48e36d --- /dev/null +++ b/src/assets/images/flags/ua.svg @@ -0,0 +1,6 @@ + + + + + + diff --git a/src/assets/images/flags/ug.svg b/src/assets/images/flags/ug.svg new file mode 100644 index 0000000..b403243 --- /dev/null +++ b/src/assets/images/flags/ug.svg @@ -0,0 +1,30 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/assets/images/flags/um.svg b/src/assets/images/flags/um.svg new file mode 100644 index 0000000..48687d1 --- /dev/null +++ b/src/assets/images/flags/um.svg @@ -0,0 +1,15 @@ + + + + + + + + + + + + + + + diff --git a/src/assets/images/flags/un.svg b/src/assets/images/flags/un.svg new file mode 100644 index 0000000..a84f57b --- /dev/null +++ b/src/assets/images/flags/un.svg @@ -0,0 +1,16 @@ + + + + + + + + + + + + + + + + diff --git a/src/assets/images/flags/us.svg b/src/assets/images/flags/us.svg new file mode 100644 index 0000000..fc2a4a9 --- /dev/null +++ b/src/assets/images/flags/us.svg @@ -0,0 +1,171 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/assets/images/flags/uy.svg b/src/assets/images/flags/uy.svg new file mode 100644 index 0000000..9e76884 --- /dev/null +++ b/src/assets/images/flags/uy.svg @@ -0,0 +1,28 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/assets/images/flags/uz.svg b/src/assets/images/flags/uz.svg new file mode 100644 index 0000000..b41ef60 --- /dev/null +++ b/src/assets/images/flags/uz.svg @@ -0,0 +1,30 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/assets/images/flags/va.svg b/src/assets/images/flags/va.svg new file mode 100644 index 0000000..3f1e654 --- /dev/null +++ b/src/assets/images/flags/va.svg @@ -0,0 +1,479 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/assets/images/flags/vc.svg b/src/assets/images/flags/vc.svg new file mode 100644 index 0000000..ad0ace7 --- /dev/null +++ b/src/assets/images/flags/vc.svg @@ -0,0 +1,8 @@ + + + + + + + + diff --git a/src/assets/images/flags/ve.svg b/src/assets/images/flags/ve.svg new file mode 100644 index 0000000..4ab4909 --- /dev/null +++ b/src/assets/images/flags/ve.svg @@ -0,0 +1,26 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/assets/images/flags/vg.svg b/src/assets/images/flags/vg.svg new file mode 100644 index 0000000..9662b4b --- /dev/null +++ b/src/assets/images/flags/vg.svg @@ -0,0 +1,63 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/assets/images/flags/vi.svg b/src/assets/images/flags/vi.svg new file mode 100644 index 0000000..f1b5a1a --- /dev/null +++ b/src/assets/images/flags/vi.svg @@ -0,0 +1,28 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/assets/images/flags/vn.svg b/src/assets/images/flags/vn.svg new file mode 100644 index 0000000..a3b623a --- /dev/null +++ b/src/assets/images/flags/vn.svg @@ -0,0 +1,11 @@ + + + + + + + + + + + diff --git a/src/assets/images/flags/vu.svg b/src/assets/images/flags/vu.svg new file mode 100644 index 0000000..df8fc59 --- /dev/null +++ b/src/assets/images/flags/vu.svg @@ -0,0 +1,21 @@ + + + + + + + + + + + + + + + + + + + + + diff --git a/src/assets/images/flags/wf.svg b/src/assets/images/flags/wf.svg new file mode 100644 index 0000000..0395be7 --- /dev/null +++ b/src/assets/images/flags/wf.svg @@ -0,0 +1,7 @@ + + + + + + + diff --git a/src/assets/images/flags/ws.svg b/src/assets/images/flags/ws.svg new file mode 100644 index 0000000..c29fb5c --- /dev/null +++ b/src/assets/images/flags/ws.svg @@ -0,0 +1,7 @@ + + + + + + + diff --git a/src/assets/images/flags/xk.svg b/src/assets/images/flags/xk.svg new file mode 100644 index 0000000..4365a34 --- /dev/null +++ b/src/assets/images/flags/xk.svg @@ -0,0 +1,8 @@ + + + + + + + + diff --git a/src/assets/images/flags/xx.svg b/src/assets/images/flags/xx.svg new file mode 100644 index 0000000..4879d6d --- /dev/null +++ b/src/assets/images/flags/xx.svg @@ -0,0 +1,4 @@ + + + + diff --git a/src/assets/images/flags/ye.svg b/src/assets/images/flags/ye.svg new file mode 100644 index 0000000..a2c79e1 --- /dev/null +++ b/src/assets/images/flags/ye.svg @@ -0,0 +1,7 @@ + + + + + + + diff --git a/src/assets/images/flags/yt.svg b/src/assets/images/flags/yt.svg new file mode 100644 index 0000000..90bda1a --- /dev/null +++ b/src/assets/images/flags/yt.svg @@ -0,0 +1,7 @@ + + + + + + + diff --git a/src/assets/images/flags/za.svg b/src/assets/images/flags/za.svg new file mode 100644 index 0000000..1d22149 --- /dev/null +++ b/src/assets/images/flags/za.svg @@ -0,0 +1,17 @@ + + + + + + + + + + + + + + + + + diff --git a/src/assets/images/flags/zm.svg b/src/assets/images/flags/zm.svg new file mode 100644 index 0000000..dda29e3 --- /dev/null +++ b/src/assets/images/flags/zm.svg @@ -0,0 +1,27 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/assets/images/flags/zw.svg b/src/assets/images/flags/zw.svg new file mode 100644 index 0000000..8cde31b --- /dev/null +++ b/src/assets/images/flags/zw.svg @@ -0,0 +1,21 @@ + + + + + + + + + + + + + + + + + + + + + diff --git a/src/assets/images/landing-cta.jpg b/src/assets/images/landing-cta.jpg new file mode 100644 index 0000000..25cbc4d Binary files /dev/null and b/src/assets/images/landing-cta.jpg differ diff --git a/src/assets/images/layouts/boxed.svg b/src/assets/images/layouts/boxed.svg new file mode 100644 index 0000000..b5958b1 --- /dev/null +++ b/src/assets/images/layouts/boxed.svg @@ -0,0 +1,34 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/assets/images/layouts/dark.svg b/src/assets/images/layouts/dark.svg new file mode 100644 index 0000000..b134e17 --- /dev/null +++ b/src/assets/images/layouts/dark.svg @@ -0,0 +1,35 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/assets/images/layouts/fluid.svg b/src/assets/images/layouts/fluid.svg new file mode 100644 index 0000000..e0c1e29 --- /dev/null +++ b/src/assets/images/layouts/fluid.svg @@ -0,0 +1,35 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/assets/images/layouts/light.svg b/src/assets/images/layouts/light.svg new file mode 100644 index 0000000..230402c --- /dev/null +++ b/src/assets/images/layouts/light.svg @@ -0,0 +1,35 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/assets/images/layouts/side-dark.svg b/src/assets/images/layouts/side-dark.svg new file mode 100644 index 0000000..1e4ec6c --- /dev/null +++ b/src/assets/images/layouts/side-dark.svg @@ -0,0 +1,35 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/assets/images/layouts/side-gradient.svg b/src/assets/images/layouts/side-gradient.svg new file mode 100644 index 0000000..c793be8 --- /dev/null +++ b/src/assets/images/layouts/side-gradient.svg @@ -0,0 +1,39 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/assets/images/layouts/side-gray.svg b/src/assets/images/layouts/side-gray.svg new file mode 100644 index 0000000..beaa45a --- /dev/null +++ b/src/assets/images/layouts/side-gray.svg @@ -0,0 +1,35 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/assets/images/layouts/side-image.svg b/src/assets/images/layouts/side-image.svg new file mode 100644 index 0000000..c80ebca --- /dev/null +++ b/src/assets/images/layouts/side-image.svg @@ -0,0 +1,47 @@ + + + + + + + + + + + +
+
+
+
+ + + +
+
+ + + + + + + + + + + + +
+ + + + + + + + + + + +
+ + diff --git a/src/assets/images/layouts/side-light.svg b/src/assets/images/layouts/side-light.svg new file mode 100644 index 0000000..892f7a2 --- /dev/null +++ b/src/assets/images/layouts/side-light.svg @@ -0,0 +1,35 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/assets/images/layouts/sidebar-compact.svg b/src/assets/images/layouts/sidebar-compact.svg new file mode 100644 index 0000000..8b12b83 --- /dev/null +++ b/src/assets/images/layouts/sidebar-compact.svg @@ -0,0 +1,35 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/assets/images/layouts/sidebar-full.svg b/src/assets/images/layouts/sidebar-full.svg new file mode 100644 index 0000000..09aa549 --- /dev/null +++ b/src/assets/images/layouts/sidebar-full.svg @@ -0,0 +1,22 @@ + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/assets/images/layouts/sidebar-hover.svg b/src/assets/images/layouts/sidebar-hover.svg new file mode 100644 index 0000000..3ef8535 --- /dev/null +++ b/src/assets/images/layouts/sidebar-hover.svg @@ -0,0 +1,33 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/assets/images/layouts/sidebar-sm.svg b/src/assets/images/layouts/sidebar-sm.svg new file mode 100644 index 0000000..35eaa6a --- /dev/null +++ b/src/assets/images/layouts/sidebar-sm.svg @@ -0,0 +1,33 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/assets/images/layouts/system.svg b/src/assets/images/layouts/system.svg new file mode 100644 index 0000000..d79a46e --- /dev/null +++ b/src/assets/images/layouts/system.svg @@ -0,0 +1,35 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/assets/images/layouts/themes/theme-default.png b/src/assets/images/layouts/themes/theme-default.png new file mode 100644 index 0000000..3a98ca7 Binary files /dev/null and b/src/assets/images/layouts/themes/theme-default.png differ diff --git a/src/assets/images/layouts/themes/theme-flat.png b/src/assets/images/layouts/themes/theme-flat.png new file mode 100644 index 0000000..65dc277 Binary files /dev/null and b/src/assets/images/layouts/themes/theme-flat.png differ diff --git a/src/assets/images/layouts/themes/theme-galaxy.png b/src/assets/images/layouts/themes/theme-galaxy.png new file mode 100644 index 0000000..76dc253 Binary files /dev/null and b/src/assets/images/layouts/themes/theme-galaxy.png differ diff --git a/src/assets/images/layouts/themes/theme-material.png b/src/assets/images/layouts/themes/theme-material.png new file mode 100644 index 0000000..86efe95 Binary files /dev/null and b/src/assets/images/layouts/themes/theme-material.png differ diff --git a/src/assets/images/layouts/themes/theme-minimal.png b/src/assets/images/layouts/themes/theme-minimal.png new file mode 100644 index 0000000..b561a7f Binary files /dev/null and b/src/assets/images/layouts/themes/theme-minimal.png differ diff --git a/src/assets/images/layouts/themes/theme-modern.png b/src/assets/images/layouts/themes/theme-modern.png new file mode 100644 index 0000000..d002f74 Binary files /dev/null and b/src/assets/images/layouts/themes/theme-modern.png differ diff --git a/src/assets/images/layouts/themes/theme-saas.png b/src/assets/images/layouts/themes/theme-saas.png new file mode 100644 index 0000000..347246e Binary files /dev/null and b/src/assets/images/layouts/themes/theme-saas.png differ diff --git a/src/assets/images/layouts/topbar-dark.svg b/src/assets/images/layouts/topbar-dark.svg new file mode 100644 index 0000000..691acaa --- /dev/null +++ b/src/assets/images/layouts/topbar-dark.svg @@ -0,0 +1,35 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/assets/images/layouts/topbar-gradient.svg b/src/assets/images/layouts/topbar-gradient.svg new file mode 100644 index 0000000..0333ff4 --- /dev/null +++ b/src/assets/images/layouts/topbar-gradient.svg @@ -0,0 +1,39 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/assets/images/layouts/topbar-gray.svg b/src/assets/images/layouts/topbar-gray.svg new file mode 100644 index 0000000..64b1025 --- /dev/null +++ b/src/assets/images/layouts/topbar-gray.svg @@ -0,0 +1,35 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/assets/images/layouts/topbar-light.svg b/src/assets/images/layouts/topbar-light.svg new file mode 100644 index 0000000..17bc27d --- /dev/null +++ b/src/assets/images/layouts/topbar-light.svg @@ -0,0 +1,35 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/assets/images/leaflet/layers.png b/src/assets/images/leaflet/layers.png new file mode 100644 index 0000000..1a72e57 Binary files /dev/null and b/src/assets/images/leaflet/layers.png differ diff --git a/src/assets/images/leaflet/leaf-green.png b/src/assets/images/leaflet/leaf-green.png new file mode 100644 index 0000000..6c24f60 Binary files /dev/null and b/src/assets/images/leaflet/leaf-green.png differ diff --git a/src/assets/images/leaflet/leaf-orange.png b/src/assets/images/leaflet/leaf-orange.png new file mode 100644 index 0000000..a8a8f58 Binary files /dev/null and b/src/assets/images/leaflet/leaf-orange.png differ diff --git a/src/assets/images/leaflet/leaf-red.png b/src/assets/images/leaflet/leaf-red.png new file mode 100644 index 0000000..2763505 Binary files /dev/null and b/src/assets/images/leaflet/leaf-red.png differ diff --git a/src/assets/images/leaflet/leaf-shadow.png b/src/assets/images/leaflet/leaf-shadow.png new file mode 100644 index 0000000..6b979fa Binary files /dev/null and b/src/assets/images/leaflet/leaf-shadow.png differ diff --git a/src/assets/images/leaflet/marker-icon.png b/src/assets/images/leaflet/marker-icon.png new file mode 100644 index 0000000..5c6c4de Binary files /dev/null and b/src/assets/images/leaflet/marker-icon.png differ diff --git a/src/assets/images/leaflet/marker-shadow.png b/src/assets/images/leaflet/marker-shadow.png new file mode 100644 index 0000000..9fd2979 Binary files /dev/null and b/src/assets/images/leaflet/marker-shadow.png differ diff --git a/src/assets/images/location-pin.png b/src/assets/images/location-pin.png new file mode 100644 index 0000000..ee55675 Binary files /dev/null and b/src/assets/images/location-pin.png differ diff --git a/src/assets/images/logo-black.png b/src/assets/images/logo-black.png new file mode 100644 index 0000000..99be9f2 Binary files /dev/null and b/src/assets/images/logo-black.png differ diff --git a/src/assets/images/logo-sm.png b/src/assets/images/logo-sm.png new file mode 100644 index 0000000..7a18efd Binary files /dev/null and b/src/assets/images/logo-sm.png differ diff --git a/src/assets/images/logo.png b/src/assets/images/logo.png new file mode 100644 index 0000000..86c86c4 Binary files /dev/null and b/src/assets/images/logo.png differ diff --git a/src/assets/images/logos/airbnb.svg b/src/assets/images/logos/airbnb.svg new file mode 100644 index 0000000..4dfb99d --- /dev/null +++ b/src/assets/images/logos/airbnb.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/assets/images/logos/amazon.svg b/src/assets/images/logos/amazon.svg new file mode 100644 index 0000000..14a3894 --- /dev/null +++ b/src/assets/images/logos/amazon.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/assets/images/logos/apple.svg b/src/assets/images/logos/apple.svg new file mode 100644 index 0000000..6a76b7b --- /dev/null +++ b/src/assets/images/logos/apple.svg @@ -0,0 +1,2 @@ + + \ No newline at end of file diff --git a/src/assets/images/logos/asana.svg b/src/assets/images/logos/asana.svg new file mode 100644 index 0000000..e34d0ab --- /dev/null +++ b/src/assets/images/logos/asana.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/assets/images/logos/dropbox.svg b/src/assets/images/logos/dropbox.svg new file mode 100644 index 0000000..d02a3fd --- /dev/null +++ b/src/assets/images/logos/dropbox.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/assets/images/logos/figma.svg b/src/assets/images/logos/figma.svg new file mode 100644 index 0000000..f18e70d --- /dev/null +++ b/src/assets/images/logos/figma.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/assets/images/logos/google.svg b/src/assets/images/logos/google.svg new file mode 100644 index 0000000..5c4114f --- /dev/null +++ b/src/assets/images/logos/google.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/assets/images/logos/h&m.svg b/src/assets/images/logos/h&m.svg new file mode 100644 index 0000000..42e4697 --- /dev/null +++ b/src/assets/images/logos/h&m.svg @@ -0,0 +1,37 @@ + + + + + + + + + + + + diff --git a/src/assets/images/logos/meta.svg b/src/assets/images/logos/meta.svg new file mode 100644 index 0000000..0ec35b9 --- /dev/null +++ b/src/assets/images/logos/meta.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/assets/images/logos/microsoft.svg b/src/assets/images/logos/microsoft.svg new file mode 100644 index 0000000..89f6237 --- /dev/null +++ b/src/assets/images/logos/microsoft.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/assets/images/logos/openai.svg b/src/assets/images/logos/openai.svg new file mode 100644 index 0000000..34429ea --- /dev/null +++ b/src/assets/images/logos/openai.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/assets/images/logos/shell.svg b/src/assets/images/logos/shell.svg new file mode 100644 index 0000000..0d3a1e0 --- /dev/null +++ b/src/assets/images/logos/shell.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/assets/images/logos/slack.svg b/src/assets/images/logos/slack.svg new file mode 100644 index 0000000..3b76222 --- /dev/null +++ b/src/assets/images/logos/slack.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/assets/images/logos/spotify.svg b/src/assets/images/logos/spotify.svg new file mode 100644 index 0000000..cfc993b --- /dev/null +++ b/src/assets/images/logos/spotify.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/assets/images/logos/starbucks.svg b/src/assets/images/logos/starbucks.svg new file mode 100644 index 0000000..64e985c --- /dev/null +++ b/src/assets/images/logos/starbucks.svg @@ -0,0 +1,112 @@ + + + + +Starbucks Corporation + Logo + + + + + + + + + + + + + + + + + + + diff --git a/src/assets/images/logos/thenorthface.svg b/src/assets/images/logos/thenorthface.svg new file mode 100644 index 0000000..4b27e84 --- /dev/null +++ b/src/assets/images/logos/thenorthface.svg @@ -0,0 +1,48 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/assets/images/logos/walmart.svg b/src/assets/images/logos/walmart.svg new file mode 100644 index 0000000..5690213 --- /dev/null +++ b/src/assets/images/logos/walmart.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/assets/images/maintenance.svg b/src/assets/images/maintenance.svg new file mode 100644 index 0000000..3f218de --- /dev/null +++ b/src/assets/images/maintenance.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/assets/images/products/1.png b/src/assets/images/products/1.png new file mode 100644 index 0000000..cd3371c Binary files /dev/null and b/src/assets/images/products/1.png differ diff --git a/src/assets/images/products/10.png b/src/assets/images/products/10.png new file mode 100644 index 0000000..1b817d0 Binary files /dev/null and b/src/assets/images/products/10.png differ diff --git a/src/assets/images/products/11.png b/src/assets/images/products/11.png new file mode 100644 index 0000000..fdec85e Binary files /dev/null and b/src/assets/images/products/11.png differ diff --git a/src/assets/images/products/12.png b/src/assets/images/products/12.png new file mode 100644 index 0000000..3a163b8 Binary files /dev/null and b/src/assets/images/products/12.png differ diff --git a/src/assets/images/products/2.png b/src/assets/images/products/2.png new file mode 100644 index 0000000..6d07e2e Binary files /dev/null and b/src/assets/images/products/2.png differ diff --git a/src/assets/images/products/3.png b/src/assets/images/products/3.png new file mode 100644 index 0000000..f37fe05 Binary files /dev/null and b/src/assets/images/products/3.png differ diff --git a/src/assets/images/products/4.png b/src/assets/images/products/4.png new file mode 100644 index 0000000..25812bc Binary files /dev/null and b/src/assets/images/products/4.png differ diff --git a/src/assets/images/products/5.png b/src/assets/images/products/5.png new file mode 100644 index 0000000..85c1707 Binary files /dev/null and b/src/assets/images/products/5.png differ diff --git a/src/assets/images/products/6.png b/src/assets/images/products/6.png new file mode 100644 index 0000000..3eafc2b Binary files /dev/null and b/src/assets/images/products/6.png differ diff --git a/src/assets/images/products/7.png b/src/assets/images/products/7.png new file mode 100644 index 0000000..207c60b Binary files /dev/null and b/src/assets/images/products/7.png differ diff --git a/src/assets/images/products/8.png b/src/assets/images/products/8.png new file mode 100644 index 0000000..dfe0162 Binary files /dev/null and b/src/assets/images/products/8.png differ diff --git a/src/assets/images/products/9.png b/src/assets/images/products/9.png new file mode 100644 index 0000000..809d32c Binary files /dev/null and b/src/assets/images/products/9.png differ diff --git a/src/assets/images/profile-bg.jpg b/src/assets/images/profile-bg.jpg new file mode 100644 index 0000000..7889a84 Binary files /dev/null and b/src/assets/images/profile-bg.jpg differ diff --git a/src/assets/images/qr.png b/src/assets/images/qr.png new file mode 100644 index 0000000..706f81c Binary files /dev/null and b/src/assets/images/qr.png differ diff --git a/src/assets/images/rapport-logo.png b/src/assets/images/rapport-logo.png new file mode 100644 index 0000000..6095fb3 Binary files /dev/null and b/src/assets/images/rapport-logo.png differ diff --git a/src/assets/images/ratings.svg b/src/assets/images/ratings.svg new file mode 100644 index 0000000..e444ac0 --- /dev/null +++ b/src/assets/images/ratings.svg @@ -0,0 +1,4 @@ + + + + diff --git a/src/assets/images/sellers/1.png b/src/assets/images/sellers/1.png new file mode 100644 index 0000000..90bf03e Binary files /dev/null and b/src/assets/images/sellers/1.png differ diff --git a/src/assets/images/sellers/10.png b/src/assets/images/sellers/10.png new file mode 100644 index 0000000..65f2bbe Binary files /dev/null and b/src/assets/images/sellers/10.png differ diff --git a/src/assets/images/sellers/2.png b/src/assets/images/sellers/2.png new file mode 100644 index 0000000..485934e Binary files /dev/null and b/src/assets/images/sellers/2.png differ diff --git a/src/assets/images/sellers/3.png b/src/assets/images/sellers/3.png new file mode 100644 index 0000000..b5bc39b Binary files /dev/null and b/src/assets/images/sellers/3.png differ diff --git a/src/assets/images/sellers/4.png b/src/assets/images/sellers/4.png new file mode 100644 index 0000000..ecb2c4b Binary files /dev/null and b/src/assets/images/sellers/4.png differ diff --git a/src/assets/images/sellers/5.png b/src/assets/images/sellers/5.png new file mode 100644 index 0000000..3e3679b Binary files /dev/null and b/src/assets/images/sellers/5.png differ diff --git a/src/assets/images/sellers/6.png b/src/assets/images/sellers/6.png new file mode 100644 index 0000000..35326cf Binary files /dev/null and b/src/assets/images/sellers/6.png differ diff --git a/src/assets/images/sellers/7.png b/src/assets/images/sellers/7.png new file mode 100644 index 0000000..dfce66d Binary files /dev/null and b/src/assets/images/sellers/7.png differ diff --git a/src/assets/images/sellers/8.png b/src/assets/images/sellers/8.png new file mode 100644 index 0000000..dbdbee7 Binary files /dev/null and b/src/assets/images/sellers/8.png differ diff --git a/src/assets/images/sellers/9.png b/src/assets/images/sellers/9.png new file mode 100644 index 0000000..12c4727 Binary files /dev/null and b/src/assets/images/sellers/9.png differ diff --git a/src/assets/images/sidenav-bg.jpg b/src/assets/images/sidenav-bg.jpg new file mode 100644 index 0000000..d56ffb2 Binary files /dev/null and b/src/assets/images/sidenav-bg.jpg differ diff --git a/src/assets/images/sign.png b/src/assets/images/sign.png new file mode 100644 index 0000000..e81c817 Binary files /dev/null and b/src/assets/images/sign.png differ diff --git a/src/assets/images/stock/gallery-1.jpg b/src/assets/images/stock/gallery-1.jpg new file mode 100644 index 0000000..143101d Binary files /dev/null and b/src/assets/images/stock/gallery-1.jpg differ diff --git a/src/assets/images/stock/gallery-2.jpg b/src/assets/images/stock/gallery-2.jpg new file mode 100644 index 0000000..43abc23 Binary files /dev/null and b/src/assets/images/stock/gallery-2.jpg differ diff --git a/src/assets/images/stock/gallery-3.jpg b/src/assets/images/stock/gallery-3.jpg new file mode 100644 index 0000000..473be29 Binary files /dev/null and b/src/assets/images/stock/gallery-3.jpg differ diff --git a/src/assets/images/stock/small-1.jpg b/src/assets/images/stock/small-1.jpg new file mode 100644 index 0000000..a522290 Binary files /dev/null and b/src/assets/images/stock/small-1.jpg differ diff --git a/src/assets/images/stock/small-10.jpg b/src/assets/images/stock/small-10.jpg new file mode 100644 index 0000000..6232349 Binary files /dev/null and b/src/assets/images/stock/small-10.jpg differ diff --git a/src/assets/images/stock/small-2.jpg b/src/assets/images/stock/small-2.jpg new file mode 100644 index 0000000..e1b7c07 Binary files /dev/null and b/src/assets/images/stock/small-2.jpg differ diff --git a/src/assets/images/stock/small-3.jpg b/src/assets/images/stock/small-3.jpg new file mode 100644 index 0000000..cb3c2e8 Binary files /dev/null and b/src/assets/images/stock/small-3.jpg differ diff --git a/src/assets/images/stock/small-4.jpg b/src/assets/images/stock/small-4.jpg new file mode 100644 index 0000000..2ac86c0 Binary files /dev/null and b/src/assets/images/stock/small-4.jpg differ diff --git a/src/assets/images/stock/small-5.jpg b/src/assets/images/stock/small-5.jpg new file mode 100644 index 0000000..fceb473 Binary files /dev/null and b/src/assets/images/stock/small-5.jpg differ diff --git a/src/assets/images/stock/small-6.jpg b/src/assets/images/stock/small-6.jpg new file mode 100644 index 0000000..cb3ad97 Binary files /dev/null and b/src/assets/images/stock/small-6.jpg differ diff --git a/src/assets/images/stock/small-7.jpg b/src/assets/images/stock/small-7.jpg new file mode 100644 index 0000000..ca44dfc Binary files /dev/null and b/src/assets/images/stock/small-7.jpg differ diff --git a/src/assets/images/stock/small-8.jpg b/src/assets/images/stock/small-8.jpg new file mode 100644 index 0000000..e15b457 Binary files /dev/null and b/src/assets/images/stock/small-8.jpg differ diff --git a/src/assets/images/stock/small-9.jpg b/src/assets/images/stock/small-9.jpg new file mode 100644 index 0000000..9740a0f Binary files /dev/null and b/src/assets/images/stock/small-9.jpg differ diff --git a/src/assets/images/treeview.png b/src/assets/images/treeview.png new file mode 100644 index 0000000..a93282a Binary files /dev/null and b/src/assets/images/treeview.png differ diff --git a/src/assets/images/user-bg-pattern.png b/src/assets/images/user-bg-pattern.png new file mode 100644 index 0000000..d8adf58 Binary files /dev/null and b/src/assets/images/user-bg-pattern.png differ diff --git a/src/assets/images/user-bg-pattern.svg b/src/assets/images/user-bg-pattern.svg new file mode 100644 index 0000000..58227f2 --- /dev/null +++ b/src/assets/images/user-bg-pattern.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/assets/images/user-shield.png b/src/assets/images/user-shield.png new file mode 100644 index 0000000..c507495 Binary files /dev/null and b/src/assets/images/user-shield.png differ diff --git a/src/assets/images/users/user-1.jpg b/src/assets/images/users/user-1.jpg new file mode 100644 index 0000000..ed4d364 Binary files /dev/null and b/src/assets/images/users/user-1.jpg differ diff --git a/src/assets/images/users/user-10.jpg b/src/assets/images/users/user-10.jpg new file mode 100644 index 0000000..a898b7d Binary files /dev/null and b/src/assets/images/users/user-10.jpg differ diff --git a/src/assets/images/users/user-2.jpg b/src/assets/images/users/user-2.jpg new file mode 100644 index 0000000..f40851c Binary files /dev/null and b/src/assets/images/users/user-2.jpg differ diff --git a/src/assets/images/users/user-3.jpg b/src/assets/images/users/user-3.jpg new file mode 100644 index 0000000..82cbfa3 Binary files /dev/null and b/src/assets/images/users/user-3.jpg differ diff --git a/src/assets/images/users/user-4.jpg b/src/assets/images/users/user-4.jpg new file mode 100644 index 0000000..2ef1b54 Binary files /dev/null and b/src/assets/images/users/user-4.jpg differ diff --git a/src/assets/images/users/user-5.jpg b/src/assets/images/users/user-5.jpg new file mode 100644 index 0000000..6ed54af Binary files /dev/null and b/src/assets/images/users/user-5.jpg differ diff --git a/src/assets/images/users/user-6.jpg b/src/assets/images/users/user-6.jpg new file mode 100644 index 0000000..3c73ff7 Binary files /dev/null and b/src/assets/images/users/user-6.jpg differ diff --git a/src/assets/images/users/user-7.jpg b/src/assets/images/users/user-7.jpg new file mode 100644 index 0000000..59857e3 Binary files /dev/null and b/src/assets/images/users/user-7.jpg differ diff --git a/src/assets/images/users/user-8.jpg b/src/assets/images/users/user-8.jpg new file mode 100644 index 0000000..c36bb8c Binary files /dev/null and b/src/assets/images/users/user-8.jpg differ diff --git a/src/assets/images/users/user-9.jpg b/src/assets/images/users/user-9.jpg new file mode 100644 index 0000000..961b95f Binary files /dev/null and b/src/assets/images/users/user-9.jpg differ diff --git a/src/assets/scss/_variables-dark.scss b/src/assets/scss/_variables-dark.scss new file mode 100644 index 0000000..b97abda --- /dev/null +++ b/src/assets/scss/_variables-dark.scss @@ -0,0 +1,128 @@ +// Dark color mode variables +// +// Custom variables for the `[data-bs-theme="dark"]` theme. Use this as a starting point for your own custom color modes by creating a new theme-specific file like `_variables-dark.scss` and adding the variables you need. + +// +// Global colors +// + +// scss-docs-start sass-dark-mode-vars +// scss-docs-start theme-text-dark-variables +$primary-text-emphasis-dark: tint-color($primary, 40%); +$secondary-text-emphasis-dark: tint-color($secondary, 40%); +$success-text-emphasis-dark: tint-color($success, 40%); +$info-text-emphasis-dark: tint-color($info, 40%); +$warning-text-emphasis-dark: tint-color($warning, 40%); +$danger-text-emphasis-dark: tint-color($danger, 40%); +$purple-text-emphasis-dark: tint-color($purple, 40%); +$light-text-emphasis-dark: $gray-100; +$dark-text-emphasis-dark: $gray-300; +// scss-docs-end theme-text-dark-variables + +$theme-colors-text-dark: ( + "primary": $primary-text-emphasis-dark, + "secondary": $secondary-text-emphasis-dark, + "success": $success-text-emphasis-dark, + "info": $info-text-emphasis-dark, + "warning": $warning-text-emphasis-dark, + "danger": $danger-text-emphasis-dark, + "purple": $purple-text-emphasis-dark, + "light": $light-text-emphasis-dark, + "dark": $dark-text-emphasis-dark, +); + +// scss-docs-start theme-bg-subtle-dark-variables +$primary-bg-subtle-dark: rgba($primary, 20%); +$secondary-bg-subtle-dark: rgba($secondary, 20%); +$success-bg-subtle-dark: rgba($success, 20%); +$info-bg-subtle-dark: rgba($info, 20%); +$warning-bg-subtle-dark: rgba($warning, 20%); +$danger-bg-subtle-dark: rgba($danger, 20%); +$purple-bg-subtle-dark: rgba($purple, 20%); +$light-bg-subtle-dark: #22232c; +$dark-bg-subtle-dark: mix($gray-800, $black); +// scss-docs-end theme-bg-subtle-dark-variables + +$theme-colors-bg-subtle-dark: ( + "primary": $primary-bg-subtle-dark, + "secondary": $secondary-bg-subtle-dark, + "success": $success-bg-subtle-dark, + "info": $info-bg-subtle-dark, + "warning": $warning-bg-subtle-dark, + "danger": $danger-bg-subtle-dark, + "purple": $purple-bg-subtle-dark, + "light": $light-bg-subtle-dark, + "dark": $dark-bg-subtle-dark, +); + +// scss-docs-start theme-border-subtle-dark-variables +$primary-border-subtle-dark: shade-color($primary, 40%); +$secondary-border-subtle-dark: shade-color($secondary, 40%); +$success-border-subtle-dark: shade-color($success, 40%); +$info-border-subtle-dark: shade-color($info, 40%); +$warning-border-subtle-dark: shade-color($warning, 40%); +$danger-border-subtle-dark: shade-color($danger, 40%); +$purple-border-subtle-dark: shade-color($purple, 40%); +$light-border-subtle-dark: $gray-700; +$dark-border-subtle-dark: $gray-700; +// scss-docs-end theme-border-subtle-dark-variables + +$theme-colors-border-subtle-dark: ( + "primary": $primary-border-subtle-dark, + "secondary": $secondary-border-subtle-dark, + "success": $success-border-subtle-dark, + "info": $info-border-subtle-dark, + "warning": $warning-border-subtle-dark, + "danger": $danger-border-subtle-dark, + "purple": $purple-border-subtle-dark, + "light": $light-border-subtle-dark, + "dark": $dark-border-subtle-dark, +); + +$body-color-dark: #aab8c5; +$body-bg-dark: #17181e; + +$body-secondary-color-dark: #8391a2; +$body-secondary-bg-dark: #1e1f27; + +$body-tertiary-color-dark: #aab8c5; +$body-tertiary-bg-dark: #272832; + +$body-emphasis-color-dark: #b0bbc5; + +$border-color-dark: #293036; +$border-color-translucent-dark: #8391a2; + +$headings-color-dark: $body-color-dark; +$link-color-dark: tint-color($primary, 40%); +$link-hover-color-dark: shift-color($link-color-dark, -$link-shade-percentage); +$code-color-dark: tint-color($code-color, 40%); + +// +// Forms +// + +$form-select-indicator-color-dark: $body-color-dark; +$form-select-indicator-dark: url("data:image/svg+xml,"); + +$form-switch-color-dark: rgba($white, .25); +$form-switch-bg-image-dark: url("data:image/svg+xml,"); + +// scss-docs-start form-validation-colors-dark +$form-valid-color-dark: $green-300; +$form-valid-border-color-dark: $green-300; +$form-invalid-color-dark: $red-300; +$form-invalid-border-color-dark: $red-300; +// scss-docs-end form-validation-colors-dark + + +// +// Accordion +// + +$accordion-icon-color-dark: $primary-text-emphasis-dark; +$accordion-icon-active-color-dark: $primary-text-emphasis-dark; + +$accordion-button-icon-dark: url("data:image/svg+xml,"); +$accordion-button-active-icon-dark: url("data:image/svg+xml,"); +// scss-docs-end sass-dark-mode-vars \ No newline at end of file diff --git a/src/assets/scss/_variables.scss b/src/assets/scss/_variables.scss new file mode 100644 index 0000000..a04271f --- /dev/null +++ b/src/assets/scss/_variables.scss @@ -0,0 +1,1943 @@ +// +// Variables +// + +// Prefix for :root CSS variables + +$prefix: ins-; + +// Theme mode (If you want to use only one theme, set that theme to true and set all other themes to false.) +$theme-default: true; // Default Theme +$theme-saas: true; +$theme-modern: true; +$theme-minimal: true; +$theme-flat: true; +$theme-material: true; +$theme-galaxy: true; + +// Color system + +// scss-docs-start gray-color-variables +$white: #fff; +$gray-100: #f6f7fb; +$gray-200: #eef2f7; +$gray-300: #e7e9eb; +$gray-400: #ced4da; +$gray-500: #a1a9b1; +$gray-600: #8a969c; +$gray-700: #6c757d; +$gray-800: #343a40; +$gray-900: #313a46; +$black: #000; +// scss-docs-end gray-color-variables + +// fusv-disable +// scss-docs-start gray-colors-map +$grays: ( + "100": $gray-100, + "200": $gray-200, + "300": $gray-300, + "400": $gray-400, + "500": $gray-500, + "600": $gray-600, + "700": $gray-700, + "800": $gray-800, + "900": $gray-900 +); +// scss-docs-end gray-colors-map +// fusv-enable + +// scss-docs-start color-variables +$blue: #4a81d4; +$indigo: #6b5eae; +$purple: #6658dd; +$pink: #f672a7; +$red: #f1556c; +$orange: #fd7e14; +$yellow: #f7b84b; +$green: #0acf97; +$teal: #1abc9c; +$cyan: #43bfe5; +// scss-docs-end color-variables + +// scss-docs-start colors-map +$colors: ( + "blue": $blue, + "indigo": $indigo, + "pink": $pink, + "red": $red, + "orange": $orange, + "yellow": $yellow, + "green": $green, + "teal": $teal, + "cyan": $cyan, + "black": $black, + "white": $white, + "gray": $gray-600, + "gray-dark": $gray-800 +); +// scss-docs-end colors-map + +// The contrast ratio to reach against white, to determine if color changes from "light" to "dark". Acceptable values for WCAG 2.0 are 3, 4.5 and 7. +// See https://www.w3.org/TR/WCAG20/#visual-audio-contrast-contrast +$min-contrast-ratio: 1.55; + +// Customize the light and dark text colors for use in our color contrast function. +$color-contrast-dark: $gray-900; +$color-contrast-light: $white; + +// fusv-disable +$blue-100: tint-color($blue, 80%); +$blue-200: tint-color($blue, 60%); +$blue-300: tint-color($blue, 40%); +$blue-400: tint-color($blue, 20%); +$blue-500: $blue; +$blue-600: shade-color($blue, 20%); +$blue-700: shade-color($blue, 40%); +$blue-800: shade-color($blue, 60%); +$blue-900: shade-color($blue, 80%); + +$indigo-100: tint-color($indigo, 80%); +$indigo-200: tint-color($indigo, 60%); +$indigo-300: tint-color($indigo, 40%); +$indigo-400: tint-color($indigo, 20%); +$indigo-500: $indigo; +$indigo-600: shade-color($indigo, 20%); +$indigo-700: shade-color($indigo, 40%); +$indigo-800: shade-color($indigo, 60%); +$indigo-900: shade-color($indigo, 80%); + +$purple-100: tint-color($purple, 80%); +$purple-200: tint-color($purple, 60%); +$purple-300: tint-color($purple, 40%); +$purple-400: tint-color($purple, 20%); +$purple-500: $purple; +$purple-600: shade-color($purple, 20%); +$purple-700: shade-color($purple, 40%); +$purple-800: shade-color($purple, 60%); +$purple-900: shade-color($purple, 80%); + +$pink-100: tint-color($pink, 80%); +$pink-200: tint-color($pink, 60%); +$pink-300: tint-color($pink, 40%); +$pink-400: tint-color($pink, 20%); +$pink-500: $pink; +$pink-600: shade-color($pink, 20%); +$pink-700: shade-color($pink, 40%); +$pink-800: shade-color($pink, 60%); +$pink-900: shade-color($pink, 80%); + +$red-100: tint-color($red, 80%); +$red-200: tint-color($red, 60%); +$red-300: tint-color($red, 40%); +$red-400: tint-color($red, 20%); +$red-500: $red; +$red-600: shade-color($red, 20%); +$red-700: shade-color($red, 40%); +$red-800: shade-color($red, 60%); +$red-900: shade-color($red, 80%); + +$orange-100: tint-color($orange, 80%); +$orange-200: tint-color($orange, 60%); +$orange-300: tint-color($orange, 40%); +$orange-400: tint-color($orange, 20%); +$orange-500: $orange; +$orange-600: shade-color($orange, 20%); +$orange-700: shade-color($orange, 40%); +$orange-800: shade-color($orange, 60%); +$orange-900: shade-color($orange, 80%); + +$yellow-100: tint-color($yellow, 80%); +$yellow-200: tint-color($yellow, 60%); +$yellow-300: tint-color($yellow, 40%); +$yellow-400: tint-color($yellow, 20%); +$yellow-500: $yellow; +$yellow-600: shade-color($yellow, 20%); +$yellow-700: shade-color($yellow, 40%); +$yellow-800: shade-color($yellow, 60%); +$yellow-900: shade-color($yellow, 80%); + +$green-100: tint-color($green, 80%); +$green-200: tint-color($green, 60%); +$green-300: tint-color($green, 40%); +$green-400: tint-color($green, 20%); +$green-500: $green; +$green-600: shade-color($green, 20%); +$green-700: shade-color($green, 40%); +$green-800: shade-color($green, 60%); +$green-900: shade-color($green, 80%); + +$teal-100: tint-color($teal, 80%); +$teal-200: tint-color($teal, 60%); +$teal-300: tint-color($teal, 40%); +$teal-400: tint-color($teal, 20%); +$teal-500: $teal; +$teal-600: shade-color($teal, 20%); +$teal-700: shade-color($teal, 40%); +$teal-800: shade-color($teal, 60%); +$teal-900: shade-color($teal, 80%); + +$cyan-100: tint-color($cyan, 80%); +$cyan-200: tint-color($cyan, 60%); +$cyan-300: tint-color($cyan, 40%); +$cyan-400: tint-color($cyan, 20%); +$cyan-500: $cyan; +$cyan-600: shade-color($cyan, 20%); +$cyan-700: shade-color($cyan, 40%); +$cyan-800: shade-color($cyan, 60%); +$cyan-900: shade-color($cyan, 80%); + +$blues: ( + "blue-100": $blue-100, + "blue-200": $blue-200, + "blue-300": $blue-300, + "blue-400": $blue-400, + "blue-500": $blue-500, + "blue-600": $blue-600, + "blue-700": $blue-700, + "blue-800": $blue-800, + "blue-900": $blue-900 +); + +$indigos: ( + "indigo-100": $indigo-100, + "indigo-200": $indigo-200, + "indigo-300": $indigo-300, + "indigo-400": $indigo-400, + "indigo-500": $indigo-500, + "indigo-600": $indigo-600, + "indigo-700": $indigo-700, + "indigo-800": $indigo-800, + "indigo-900": $indigo-900 +); + +$purples: ( + "purple-100": $purple-100, + "purple-200": $purple-200, + "purple-300": $purple-300, + "purple-400": $purple-400, + "purple-500": $purple-500, + "purple-600": $purple-600, + "purple-700": $purple-700, + "purple-800": $purple-800, + "purple-900": $purple-900 +); + +$pinks: ( + "pink-100": $pink-100, + "pink-200": $pink-200, + "pink-300": $pink-300, + "pink-400": $pink-400, + "pink-500": $pink-500, + "pink-600": $pink-600, + "pink-700": $pink-700, + "pink-800": $pink-800, + "pink-900": $pink-900 +); + +$reds: ( + "red-100": $red-100, + "red-200": $red-200, + "red-300": $red-300, + "red-400": $red-400, + "red-500": $red-500, + "red-600": $red-600, + "red-700": $red-700, + "red-800": $red-800, + "red-900": $red-900 +); + +$oranges: ( + "orange-100": $orange-100, + "orange-200": $orange-200, + "orange-300": $orange-300, + "orange-400": $orange-400, + "orange-500": $orange-500, + "orange-600": $orange-600, + "orange-700": $orange-700, + "orange-800": $orange-800, + "orange-900": $orange-900 +); + +$yellows: ( + "yellow-100": $yellow-100, + "yellow-200": $yellow-200, + "yellow-300": $yellow-300, + "yellow-400": $yellow-400, + "yellow-500": $yellow-500, + "yellow-600": $yellow-600, + "yellow-700": $yellow-700, + "yellow-800": $yellow-800, + "yellow-900": $yellow-900 +); + +$greens: ( + "green-100": $green-100, + "green-200": $green-200, + "green-300": $green-300, + "green-400": $green-400, + "green-500": $green-500, + "green-600": $green-600, + "green-700": $green-700, + "green-800": $green-800, + "green-900": $green-900 +); + +$teals: ( + "teal-100": $teal-100, + "teal-200": $teal-200, + "teal-300": $teal-300, + "teal-400": $teal-400, + "teal-500": $teal-500, + "teal-600": $teal-600, + "teal-700": $teal-700, + "teal-800": $teal-800, + "teal-900": $teal-900 +); + +$cyans: ( + "cyan-100": $cyan-100, + "cyan-200": $cyan-200, + "cyan-300": $cyan-300, + "cyan-400": $cyan-400, + "cyan-500": $cyan-500, + "cyan-600": $cyan-600, + "cyan-700": $cyan-700, + "cyan-800": $cyan-800, + "cyan-900": $cyan-900 +); +// fusv-enable + +// scss-docs-start theme-color-variables +$primary: $purple; +$secondary: $blue; +$success: $teal; +$info: $cyan; +$warning: $yellow; +$danger: $red; +$light: $gray-200; +$dark: $gray-900; +// scss-docs-end theme-color-variables + +// scss-docs-start theme-colors-map +$theme-colors: ( + "primary": $primary, + "secondary": $secondary, + "success": $success, + "info": $info, + "warning": $warning, + "danger": $danger, + "light": $light, + "dark": $dark, +); + +// scss-docs-end theme-colors-map + +// scss-docs-start theme-text-variables +$primary-text-emphasis: shade-color($primary, 15%); +$secondary-text-emphasis: shade-color($secondary, 15%); +$success-text-emphasis: shade-color($success, 15%); +$info-text-emphasis: shade-color($info, 15%); +$warning-text-emphasis: shade-color($warning, 15%); +$danger-text-emphasis: shade-color($danger, 15%); +$purple-text-emphasis: shade-color($purple, 15%); +$light-text-emphasis: $gray-600; +$dark-text-emphasis: $gray-800; +// scss-docs-end theme-text-variables + +$theme-colors-text: ( + "primary": $primary-text-emphasis, + "secondary": $secondary-text-emphasis, + "success": $success-text-emphasis, + "info": $info-text-emphasis, + "warning": $warning-text-emphasis, + "danger": $danger-text-emphasis, + "purple": $purple-text-emphasis, + "light": $light-text-emphasis, + "dark": $dark-text-emphasis, +); + +// scss-docs-start theme-bg-subtle-variables +$primary-bg-subtle: tint-color($primary, 85%); +$secondary-bg-subtle: tint-color($secondary, 85%); +$success-bg-subtle: tint-color($success, 85%); +$info-bg-subtle: tint-color($info, 85%); +$warning-bg-subtle: tint-color($warning, 85%); +$danger-bg-subtle: tint-color($danger, 85%); +$purple-bg-subtle: tint-color($purple, 85%); +$light-bg-subtle: mix($gray-100, $white); +$dark-bg-subtle: $gray-400; +// scss-docs-end theme-bg-subtle-variables + +$theme-colors-bg-subtle: ( + "primary": $primary-bg-subtle, + "secondary": $secondary-bg-subtle, + "success": $success-bg-subtle, + "info": $info-bg-subtle, + "warning": $warning-bg-subtle, + "danger": $danger-bg-subtle, + "purple": $purple-bg-subtle, + "light": $light-bg-subtle, + "dark": $dark-bg-subtle, +); + +// scss-docs-start theme-border-subtle-variables +$primary-border-subtle: tint-color($primary, 60%); +$secondary-border-subtle: tint-color($secondary, 60%); +$success-border-subtle: tint-color($success, 60%); +$info-border-subtle: tint-color($info, 60%); +$warning-border-subtle: tint-color($warning, 60%); +$danger-border-subtle: tint-color($danger, 60%); +$purple-border-subtle: tint-color($purple, 60%); +$light-border-subtle: $gray-200; +$dark-border-subtle: $gray-500; +// scss-docs-end theme-border-subtle-variables + +$theme-colors-border-subtle: ( + "primary": $primary-border-subtle, + "secondary": $secondary-border-subtle, + "success": $success-border-subtle, + "info": $info-border-subtle, + "warning": $warning-border-subtle, + "danger": $danger-border-subtle, + "purple": $purple-border-subtle, + "light": $light-border-subtle, + "dark": $dark-border-subtle, +); + +$utilities-bg-subtle: ( + "primary-subtle": var(--#{$prefix}primary-bg-subtle), + "secondary-subtle": var(--#{$prefix}secondary-bg-subtle), + "success-subtle": var(--#{$prefix}success-bg-subtle), + "info-subtle": var(--#{$prefix}info-bg-subtle), + "warning-subtle": var(--#{$prefix}warning-bg-subtle), + "danger-subtle": var(--#{$prefix}danger-bg-subtle), + "purple-subtle": var(--#{$prefix}purple-bg-subtle), + "light-subtle": var(--#{$prefix}light-bg-subtle), + "dark-subtle": var(--#{$prefix}dark-bg-subtle) +); + +// Characters which are escaped by the escape-svg function +$escaped-characters: ( + ("<", "%3c"), + (">", "%3e"), + ("#", "%23"), + ("(", "%28"), + (")", "%29"), +); + +// Options +// +// Quickly modify global styling by enabling or disabling optional features. + +$enable-caret: true; +$enable-rounded: true; +$enable-shadows: false; +$enable-gradients: false; +$enable-transitions: true; +$enable-reduced-motion: true; +$enable-smooth-scroll: true; +$enable-grid-classes: true; +$enable-container-classes: true; +$enable-cssgrid: false; +$enable-button-pointers: true; +$enable-rfs: true; +$enable-validation-icons: true; +$enable-negative-margins: true; +$enable-deprecation-messages: true; +$enable-important-utilities: true; + +$enable-dark-mode: true; +$color-mode-type: data; // `data` or `media-query` + +// Gradient +// +// The gradient which is added to components if `$enable-gradients` is `true` +// This gradient is also added to elements with `.bg-gradient` +// scss-docs-start variable-gradient +$gradient: linear-gradient(180deg, rgba($white, .3), rgba($white, 0)); +// scss-docs-end variable-gradient + +// Spacing +// +// Control the default styling of most Bootstrap elements by modifying these +// variables. Mostly focused on spacing. +// You can add more entries to the $spacers map, should you need more variation. + +// scss-docs-start spacer-variables-maps +$spacer: 1.5rem; +$spacers: ( + 0: 0, + 1: $spacer * .25, + 2: $spacer * .5, + 3: $spacer, + 4: $spacer * 1.5, + 5: $spacer * 3, +); +// scss-docs-end spacer-variables-maps + +// Position +// +// Define the edge positioning anchors of the position utilities. + +// scss-docs-start position-map +$position-values: ( + 0: 0, + 50: 50%, + 100: 100% +); +// scss-docs-end position-map + +// Body +// +// Settings for the `` element. + +$body-text-align: null; +$body-color: #4c4c5c; +$body-bg: #f5f6f8; + +$body-secondary-color: #9ba6b7; //#8e92ad +$body-secondary-bg: $white; + +$body-tertiary-color: rgba($body-color, .5); +$body-tertiary-bg: $gray-100; +$body-emphasis-color: rgba($body-color, .75); + +// Links +// +// Style anchor elements. + +$link-color: $primary; +$link-decoration: none; +$link-shade-percentage: 15%; +$link-hover-color: shift-color($link-color, $link-shade-percentage); +$link-hover-decoration: null; + +$stretched-link-pseudo-element: after; +$stretched-link-z-index: 1; + +// Icon links +// scss-docs-start icon-link-variables +$icon-link-gap: .375rem; +$icon-link-underline-offset: .25em; +$icon-link-icon-size: 1em; +$icon-link-icon-transition: .2s ease-in-out transform; +$icon-link-icon-transform: translate3d(.25em, 0, 0); +// scss-docs-end icon-link-variables + +// Paragraphs +// +// Style p element. + +$paragraph-margin-bottom: 1rem; + + +// Grid breakpoints +// +// Define the minimum dimensions at which your layout will change, +// adapting to different screen sizes, for use in media queries. + +// scss-docs-start grid-breakpoints +$grid-breakpoints: ( + xs: 0, + sm: 576px, + md: 768px, + lg: 992px, + xl: 1200px, + xxl: 1400px +); +// scss-docs-end grid-breakpoints + +@include _assert-ascending($grid-breakpoints, "$grid-breakpoints"); +@include _assert-starts-at-zero($grid-breakpoints, "$grid-breakpoints"); + + +// Grid containers +// +// Define the maximum width of `.container` for different screen sizes. + +// scss-docs-start container-max-widths +$container-max-widths: ( + sm: 540px, + md: 720px, + lg: 960px, + xl: 1140px, + xxl: 1320px +); +// scss-docs-end container-max-widths + +@include _assert-ascending($container-max-widths, "$container-max-widths"); + + +// Grid columns +// +// Set the number of columns and specify the width of the gutters. + +$grid-columns: 12; +$grid-gutter-width: 1.5rem; +$grid-row-columns: 6; + +// Container padding + +$container-padding-x: $grid-gutter-width * 1; + + +// Components +// +// Define common padding and border radius sizes and more. + +// scss-docs-start border-variables +$border-width: 1px; +$border-widths: ( + 1: 1px, + 2: 2px, + 3: 3px, + 4: 4px, + 5: 5px +); +$border-style: solid; +$border-color: $gray-300; +$border-color-translucent: $gray-200; +// scss-docs-end border-variables + +// scss-docs-start border-radius-variables +$border-radius: .3rem; +$border-radius-sm: .25rem; +$border-radius-lg: .4rem; +$border-radius-xl: 1rem; +$border-radius-xxl: 2rem; +$border-radius-pill: 50rem; +// scss-docs-end border-radius-variables +// fusv-disable +$border-radius-2xl: $border-radius-xxl; // Deprecated in v5.3.0 +// fusv-enable + +// scss-docs-start box-shadow-variables +$box-shadow: 0px 1px 4px 0px rgba(130, 143, 163, 0.15); +$box-shadow-sm: 0 0.75rem 6rem rgba(56, 65, 74, 0.03); +$box-shadow-lg: 0 0.25rem 1rem rgba(var(--#{$prefix}body-color-rgb), .2); +$box-shadow-inset: inset 0 1px 2px rgba(var(--#{$prefix}body-color-rgb), .075); +// scss-docs-end box-shadow-variables + +$component-active-color: $white; +$component-active-bg: var(--#{$prefix}primary); + +// scss-docs-start focus-ring-variables +$focus-ring-width: 0; +$focus-ring-opacity: .25; +$focus-ring-color: rgba($primary, $focus-ring-opacity); +$focus-ring-blur: 0; +$focus-ring-box-shadow: 0 0 $focus-ring-blur $focus-ring-width $focus-ring-color; +// scss-docs-end focus-ring-variables + +// scss-docs-start caret-variables +$caret-width: .3em; +$caret-vertical-align: $caret-width * .5; +$caret-spacing: $caret-width * .85; +// scss-docs-end caret-variables + +$transition-base: all .25s ease-in-out; +$transition-fade: opacity .15s linear; +// scss-docs-start collapse-transition +$transition-collapse: height .35s ease; +$transition-collapse-width: width .35s ease; +// scss-docs-end collapse-transition + +// stylelint-disable function-disallowed-list +// scss-docs-start aspect-ratios +$aspect-ratios: ( + "1x1": 100%, + "4x3": calc(3 / 4 * 100%), + "16x9": calc(9 / 16 * 100%), + "21x9": calc(9 / 21 * 100%) +); +// scss-docs-end aspect-ratios +// stylelint-enable function-disallowed-list + +// Typography +// +// Font, line-height, and color for body text, headings, and more. + +// scss-docs-start font-variables +// stylelint-disable value-keyword-case +$font-family-sans-serif: "Nunito", sans-serif; +$font-family-monospace: SFMono-Regular, Menlo, Monaco, Consolas, "Liberation Mono", "Courier New", monospace; +// stylelint-enable value-keyword-case +$font-family-base: var(--#{$prefix}font-sans-serif); +$font-family-code: var(--#{$prefix}font-monospace); + +// $font-size-root affects the value of `rem`, which is used for as well font sizes, paddings, and margins +// $font-size-base affects the font size of the body text +$font-size-root: null; +$font-size-base: 0.875rem; // Assumes the browser default, typically `16px` +$font-size-sm: $font-size-base - .1; +$font-size-lg: $font-size-base * 1.25; + +$font-weight-lighter: lighter; +$font-weight-light: 300; +$font-weight-normal: 400; +$font-weight-medium: var(--#{$prefix}font-weight-medium); +$font-weight-semibold: var(--#{$prefix}font-weight-semibold); +$font-weight-bold: var(--#{$prefix}font-weight-bold); +$font-weight-bolder: bolder; + +$font-weight-base: $font-weight-normal; + +$line-height-base: 1.5; +$line-height-sm: 1.25; +$line-height-lg: 2; + +$h1-font-size: calc(var(--#{$prefix}font-size-base) * 2.5); +$h2-font-size: calc(var(--#{$prefix}font-size-base) * 2); +$h3-font-size: calc(var(--#{$prefix}font-size-base) * 1.75); +$h4-font-size: calc(var(--#{$prefix}font-size-base) * 1.25); +$h5-font-size: calc(var(--#{$prefix}font-size-base) * 1); +$h6-font-size: calc(var(--#{$prefix}font-size-base) * .85); +// scss-docs-end font-variables + +// scss-docs-start font-sizes +$font-sizes: ( + 1: $h1-font-size, + 2: $h2-font-size, + 3: $h3-font-size, + 4: $h4-font-size, + 5: $h5-font-size, + 6: $h6-font-size +); +// scss-docs-end font-sizes + +// scss-docs-start headings-variables +$headings-margin-bottom: 0.5rem; +$headings-font-family: null; +$headings-font-style: null; +$headings-font-weight: var(--#{$prefix}font-weight-semibold); +$headings-line-height: $line-height-base; +$headings-color: inherit; +// scss-docs-end headings-variables + +// scss-docs-start display-headings +$display-font-sizes: ( + 1: 5rem, + 2: 4.5rem, + 3: 4rem, + 4: 3.5rem, + 5: 3rem, + 6: 2.5rem +); + +$display-font-family: null; +$display-font-style: null; +$display-font-weight: 300; +$display-line-height: $headings-line-height; +// scss-docs-end display-headings + +//Font size custom +$font-size-custom: ( + xxs: var(--#{$prefix}font-size-xxs), + xs: var(--#{$prefix}font-size-xs), + base: var(--#{$prefix}font-size-base), + sm: var(--#{$prefix}font-size-sm), + md: var(--#{$prefix}font-size-md), + lg: var(--#{$prefix}font-size-lg), + xl: var(--#{$prefix}font-size-xl), + xxl: var(--#{$prefix}font-size-xxl), + + 10: 10px, + 11: 11px, + 12: 12px, + 13: 13px, + 14: 14px, + 15: 15px, + 16: 16px, + 17: 17px, + 18: 18px, + 19: 19px, + 20: 20px, + 21: 21px, + 22: 22px, + 23: 23px, + 24: 24px, + 28: 28px, + 32: 32px, + 36: 36px, + 42: 42px, + 48: 48px, + 60: 60px, + 72: 72px, + 80: 80px, + 120: 120px +); + + +//Font size custom +$opacity-custom: ( + 10: 0.10, + 20: 0.20, + 25: 0.25, + 30: 0.30, + 40: 0.40, + 50: 0.50, + 60: 0.60, + 70: 0.70, + 75: 0.75, + 80: 0.80, + 90: 0.90, +); + +$width-values: ( + 0: 0, + 25: 25%, + 50: 50%, + 75: 75%, + 100: 100% +); + + +$utilities: ( + "font-size-custom": ( + property: font-size, + // responsive: true, + class: fs, + values: $font-size-custom + ), + + "width": ( + property: width, + responsive: true, + class: w, + values: $width-values + ), + + "position": ( + property: position, + responsive: true, + values: static relative absolute fixed sticky + ), + + "bg-opacity": ( + css-var: true, + // property: opacity, + class: bg-opacity, + values: $opacity-custom, + ), +); + +// scss-docs-start type-variables +$lead-font-size: calc(var(--#{$prefix}font-size-base) * 1.25); +$lead-font-weight: 300; + +$small-font-size: 0.85em; + +$sub-sup-font-size: .75em; + +// fusv-disable +$text-muted: var(--#{$prefix}secondary-color); // Deprecated in 5.3.0 +// fusv-enable + +$initialism-font-size: $small-font-size; + +$blockquote-margin-y: $spacer; +$blockquote-font-size: calc(var(--#{$prefix}font-size-base) * 1.25); +$blockquote-footer-color: var(--#{$prefix}secondary-color); +$blockquote-footer-font-size: var(--#{$prefix}font-size-base); + +$hr-margin-y: $spacer * 0.667; +$hr-color: inherit; + +// fusv-disable +$hr-bg-color: null; // Deprecated in v5.2.0 +$hr-height: null; // Deprecated in v5.2.0 +// fusv-enable + +$hr-border-color: var(--#{$prefix}border-color); // Allows for inherited colors +$hr-border-width: var(--#{$prefix}border-width); +$hr-opacity: 1; + +// scss-docs-start vr-variables +$vr-border-width: var(--#{$prefix}border-width); +// scss-docs-end vr-variables +$legend-margin-bottom: .5rem; +$legend-font-size: 1.5rem; +$legend-font-weight: null; + +$dt-font-weight: $font-weight-semibold; + +$list-inline-padding: .5rem; + +$mark-padding: .1875em; +$mark-color: $body-color; +$mark-bg: $yellow-100; +// scss-docs-end type-variables + + +// Tables +// +// Customizes the `.table` component with basic values, each used across all table variations. + +// scss-docs-start table-variables +$table-cell-padding-y: .75rem; +$table-cell-padding-x: .6rem; +$table-cell-padding-y-sm: .5rem; +$table-cell-padding-x-sm: .5rem; + +$table-cell-vertical-align: middle; + +$table-color: var(--#{$prefix}body-color); +$table-bg: transparent; +$table-accent-bg: transparent; + +$table-th-font-weight: 700; + +$table-striped-color: $table-color; +$table-striped-bg-factor: 0.45; +$table-striped-bg: rgba(var(--#{$prefix}light-rgb), $table-striped-bg-factor); + +$table-active-color: $table-color; +$table-active-bg-factor: 0.45; +$table-active-bg: rgba(var(--#{$prefix}light-rgb), $table-active-bg-factor); + +$table-hover-color: $table-color; +$table-hover-bg-factor: 0.45; +$table-hover-bg: rgba(var(--#{$prefix}light-rgb), $table-hover-bg-factor); + +$table-border-factor: .1; +$table-border-width: var(--#{$prefix}border-width); +$table-border-color: var(--#{$prefix}light); + +$table-striped-order: odd; +$table-striped-columns-order: even; + +$table-group-separator-color: currentcolor; + +$table-caption-color: var(--#{$prefix}secondary-color); + +$table-bg-scale: -80%; +// scss-docs-end table-variables + +// scss-docs-start table-loop +$table-variants: ( + "primary": shift-color($primary, $table-bg-scale), + "secondary": shift-color($secondary, $table-bg-scale), + "success": shift-color($success, $table-bg-scale), + "info": shift-color($info, $table-bg-scale), + "warning": shift-color($warning, $table-bg-scale), + "danger": shift-color($danger, $table-bg-scale), + // "light": shift-color($light, $table-bg-scale), + // "dark": shift-color($dark, $table-bg-scale), + "light": $light, + "dark": $dark, +); +// scss-docs-end table-loop + + +// Buttons + Forms +// +// Shared variables that are reassigned to `$input-` and `$btn-` specific variables. + +// scss-docs-start input-btn-variables +$input-btn-padding-y: 0.4532rem; +$input-btn-padding-x: 1.1rem; +$input-btn-font-family: null; +$input-btn-font-size: var(--#{$prefix}font-size-base); +$input-btn-line-height: $line-height-base; + +$input-btn-focus-width: $focus-ring-width; +$input-btn-focus-color-opacity: $focus-ring-opacity; +$input-btn-focus-color: $focus-ring-color; +$input-btn-focus-blur: $focus-ring-blur; +$input-btn-focus-box-shadow: $focus-ring-box-shadow; + +$input-btn-padding-y-sm: 0.3125rem; +$input-btn-padding-x-sm: .7rem; +$input-btn-font-size-sm: $font-size-sm; + +$input-btn-padding-y-lg: 0.5512rem; +$input-btn-padding-x-lg: 1.5rem; +$input-btn-font-size-lg: $font-size-lg; + +$input-btn-border-width: var(--#{$prefix}border-width); +// scss-docs-end input-btn-variables + + +// Buttons +// +// For each of Bootstrap's buttons, define text, background, and border color. + +// scss-docs-start btn-variables +$btn-color: var(--#{$prefix}body-color); +$btn-padding-y: $input-btn-padding-y; +$btn-padding-x: $input-btn-padding-x; +$btn-font-family: $input-btn-font-family; +$btn-font-size: $input-btn-font-size; +$btn-line-height: $input-btn-line-height; +$btn-white-space: null; // Set to `nowrap` to prevent text wrapping + +$btn-padding-y-sm: $input-btn-padding-y-sm; +$btn-padding-x-sm: $input-btn-padding-x-sm; +$btn-font-size-sm: $input-btn-font-size-sm; + +$btn-padding-y-lg: $input-btn-padding-y-lg; +$btn-padding-x-lg: $input-btn-padding-x-lg; +$btn-font-size-lg: $input-btn-font-size-lg; + +$btn-border-width: $input-btn-border-width; + +$btn-font-weight: $font-weight-medium; +$btn-box-shadow: 0px 2px 6px 0px; +$btn-focus-width: $input-btn-focus-width; +$btn-focus-box-shadow: $input-btn-focus-box-shadow; +$btn-disabled-opacity: .65; +$btn-active-box-shadow: inset 0 3px 5px rgba($black, .125); + +$btn-link-color: var(--#{$prefix}link-color); +$btn-link-hover-color: var(--#{$prefix}link-hover-color); +$btn-link-disabled-color: $gray-600; +$btn-link-focus-shadow-rgb: to-rgb(mix(color-contrast($link-color), $link-color, 15%)); + +// Allows for customizing button radius independently from global border radius +$btn-border-radius: var(--#{$prefix}border-radius); +$btn-border-radius-sm: var(--#{$prefix}border-radius-sm); +$btn-border-radius-lg: var(--#{$prefix}border-radius-lg); + +$btn-transition: color .15s ease-in-out, background-color .15s ease-in-out, border-color .15s ease-in-out, box-shadow .15s ease-in-out; + +$btn-hover-bg-shade-amount: 9.5%; +$btn-hover-bg-tint-amount: 15%; +$btn-hover-border-shade-amount: 7.5%; +$btn-hover-border-tint-amount: 7.5%; +$btn-active-bg-shade-amount: 7.5%; +$btn-active-bg-tint-amount: 15%; +$btn-active-border-shade-amount: 7.5%; +$btn-active-border-tint-amount: 10%; +// scss-docs-end btn-variables + + +// Forms + +// scss-docs-start form-text-variables +$form-text-margin-top: .25rem; +$form-text-font-size: $small-font-size; +$form-text-font-style: null; +$form-text-font-weight: null; +$form-text-color: var(--#{$prefix}secondary-color); +// scss-docs-end form-text-variables + +// scss-docs-start form-label-variables +$form-label-margin-bottom: .5rem; +$form-label-font-size: null; +$form-label-font-style: null; +$form-label-font-weight: $font-weight-semibold; +$form-label-color: null; +// scss-docs-end form-label-variables + +// scss-docs-start form-input-variables +$input-padding-y: $input-btn-padding-y; +$input-padding-x: $input-btn-padding-x * 0.7; +$input-font-family: $input-btn-font-family; +$input-font-size: $input-btn-font-size; +$input-font-weight: $font-weight-base; +$input-line-height: $input-btn-line-height; + +$input-padding-y-sm: $input-btn-padding-y-sm; +$input-padding-x-sm: $input-btn-padding-x-sm; +$input-font-size-sm: $input-btn-font-size-sm; + +$input-padding-y-lg: $input-btn-padding-y-lg; +$input-padding-x-lg: $input-btn-padding-x-lg; +$input-font-size-lg: $input-btn-font-size-lg; + +$input-bg: var(--#{$prefix}secondary-bg); +$input-disabled-color: null; +$input-disabled-bg: var(--#{$prefix}tertiary-bg); +$input-disabled-border-color: null; + +$input-color: var(--#{$prefix}body-color); +$input-border-color: var(--#{$prefix}border-color); +$input-border-width: $input-btn-border-width; +$input-box-shadow: none; + +$input-border-radius: var(--#{$prefix}border-radius); +$input-border-radius-sm: var(--#{$prefix}border-radius-sm); +$input-border-radius-lg: var(--#{$prefix}border-radius-lg); + +$input-focus-bg: $input-bg; +$input-focus-border-color: var(--#{$prefix}dark-border-subtle); +$input-focus-color: $input-color; +$input-focus-width: $input-btn-focus-width; +$input-focus-box-shadow: none; + +$input-placeholder-color: var(--#{$prefix}secondary-color); +$input-plaintext-color: var(--#{$prefix}body-color); + +$input-height-border: calc($input-border-width * 2); // stylelint-disable-line function-disallowed-list + +$input-height-inner: add($input-line-height * 1em, $input-padding-y * 2); +$input-height-inner-half: add($input-line-height * .5em, $input-padding-y); +$input-height-inner-quarter: add($input-line-height * .25em, $input-padding-y * .5); + +$input-height: add($input-line-height * 1em, add($input-padding-y * 2, $input-height-border, false)); +$input-height-sm: add($input-line-height * 1em, add($input-padding-y-sm * 2, $input-height-border, false)); +$input-height-lg: add($input-line-height * 1em, add($input-padding-y-lg * 2, $input-height-border, false)); + +$input-transition: none; + +$form-color-width: 3rem; +// scss-docs-end form-input-variables + +// scss-docs-start form-check-variables +$form-check-input-width: 1.25em; +$form-check-min-height: calc(var(--#{$prefix}font-size-base) * $line-height-base); +$form-check-padding-start: $form-check-input-width + .5em; +$form-check-margin-bottom: 0; +$form-check-label-color: null; +$form-check-label-cursor: null; +$form-check-transition: null; + +$form-check-input-active-filter: brightness(90%); + +$form-check-input-bg: $input-bg; +$form-check-input-border: var(--#{$prefix}border-width) solid var(--#{$prefix}border-color); +$form-check-input-border-radius: .25em; +$form-check-radio-border-radius: 50%; +$form-check-input-focus-border: $input-focus-border-color; +$form-check-input-focus-box-shadow: $input-btn-focus-box-shadow; + +$form-check-input-checked-color: $component-active-color; +$form-check-input-checked-bg-color: $component-active-bg; +$form-check-input-checked-border-color: $form-check-input-checked-bg-color; +$form-check-input-checked-bg-image: url("data:image/svg+xml,"); +$form-check-radio-checked-bg-image: url("data:image/svg+xml,"); + +$form-check-input-indeterminate-color: $component-active-color; +$form-check-input-indeterminate-bg-color: $component-active-bg; +$form-check-input-indeterminate-border-color: $form-check-input-indeterminate-bg-color; +$form-check-input-indeterminate-bg-image: url("data:image/svg+xml,"); + +$form-check-input-disabled-opacity: .5; +$form-check-label-disabled-opacity: $form-check-input-disabled-opacity; +$form-check-btn-check-disabled-opacity: $btn-disabled-opacity; + +$form-check-inline-margin-end: 1rem; +// scss-docs-end form-check-variables + +// scss-docs-start form-switch-variables +$form-switch-color: rgba($black, .25); +$form-switch-width: 2em; +$form-switch-padding-start: $form-switch-width + .5em; +$form-switch-bg-image: url("data:image/svg+xml,"); +$form-switch-border-radius: $form-switch-width; +$form-switch-transition: background-position .15s ease-in-out; + +$form-switch-focus-color: $input-focus-border-color; +$form-switch-focus-bg-image: url("data:image/svg+xml,"); + +$form-switch-checked-color: $component-active-color; +$form-switch-checked-bg-image: url("data:image/svg+xml,"); +$form-switch-checked-bg-position: right center; +// scss-docs-end form-switch-variables + +// scss-docs-start input-group-variables +$input-group-addon-padding-y: $input-padding-y; +$input-group-addon-padding-x: $input-padding-x; +$input-group-addon-font-weight: $input-font-weight; +$input-group-addon-color: $input-color; +$input-group-addon-bg: var(--#{$prefix}tertiary-bg); +$input-group-addon-border-color: $input-border-color; +// scss-docs-end input-group-variables + +// scss-docs-start form-select-variables +$form-select-padding-y: $input-padding-y; +$form-select-padding-x: $input-padding-x; +$form-select-font-family: $input-font-family; +$form-select-font-size: $input-font-size; +$form-select-indicator-padding: $form-select-padding-x * 3; // Extra padding for background-image +$form-select-font-weight: $input-font-weight; +$form-select-line-height: $input-line-height; +$form-select-color: $input-color; +$form-select-bg: $input-bg; +$form-select-disabled-color: null; +$form-select-disabled-bg: $input-disabled-bg; +$form-select-disabled-border-color: $input-disabled-border-color; +$form-select-bg-position: right $form-select-padding-x center; +$form-select-bg-size: 14px 10px; // In pixels because image dimensions +$form-select-indicator-color: $gray-800; +$form-select-indicator: url("data:image/svg+xml,"); + +$form-select-feedback-icon-padding-end: $form-select-padding-x * 2.5 + $form-select-indicator-padding; +$form-select-feedback-icon-position: center right $form-select-indicator-padding; +$form-select-feedback-icon-size: $input-height-inner-half $input-height-inner-half; + +$form-select-border-width: $input-border-width; +$form-select-border-color: $input-border-color; +$form-select-border-radius: $input-border-radius; +$form-select-box-shadow: var(--#{$prefix}box-shadow-inset); + +$form-select-focus-border-color: $input-focus-border-color; +$form-select-focus-width: 0; +$form-select-focus-box-shadow: 0 0 0 $form-select-focus-width $input-btn-focus-color; + +$form-select-padding-y-sm: $input-padding-y-sm; +$form-select-padding-x-sm: $input-padding-x-sm; +$form-select-font-size-sm: $input-font-size-sm; +$form-select-border-radius-sm: $input-border-radius-sm; + +$form-select-padding-y-lg: $input-padding-y-lg; +$form-select-padding-x-lg: $input-padding-x-lg; +$form-select-font-size-lg: $input-font-size-lg; +$form-select-border-radius-lg: $input-border-radius-lg; + +$form-select-transition: $input-transition; +// scss-docs-end form-select-variables + +// scss-docs-start form-range-variables +$form-range-track-width: 100%; +$form-range-track-height: .5rem; +$form-range-track-cursor: pointer; +$form-range-track-bg: var(--#{$prefix}tertiary-bg); +$form-range-track-border-radius: 1rem; +$form-range-track-box-shadow: var(--#{$prefix}box-shadow-inset); + +$form-range-thumb-width: 1rem; +$form-range-thumb-height: $form-range-thumb-width; +$form-range-thumb-bg: $component-active-bg; +$form-range-thumb-border: 0; +$form-range-thumb-border-radius: 1rem; +$form-range-thumb-box-shadow: 0 .1rem .25rem rgba($black, .1); +$form-range-thumb-focus-box-shadow: 0 0 0 1px $body-bg, $input-focus-box-shadow; +$form-range-thumb-focus-box-shadow-width: $input-focus-width; // For focus box shadow issue in Edge +$form-range-thumb-active-bg: $component-active-bg; +$form-range-thumb-disabled-bg: var(--#{$prefix}secondary-color); +$form-range-thumb-transition: background-color .15s ease-in-out, border-color .15s ease-in-out, box-shadow .15s ease-in-out; +// scss-docs-end form-range-variables + +// scss-docs-start form-file-variables +$form-file-button-color: $input-color; +$form-file-button-bg: var(--#{$prefix}tertiary-bg); +$form-file-button-hover-bg: var(--#{$prefix}secondary-bg); +// scss-docs-end form-file-variables + +// scss-docs-start form-floating-variables +$form-floating-height: add(3.5rem, $input-height-border); +$form-floating-line-height: 1.25; +$form-floating-padding-x: $input-padding-x; +$form-floating-padding-y: 1rem; +$form-floating-input-padding-t: 1.625rem; +$form-floating-input-padding-b: .625rem; +$form-floating-label-height: 1.875em; +$form-floating-label-opacity: .65; +$form-floating-label-transform: scale(.85) translateY(-.5rem) translateX(.15rem); +$form-floating-label-disabled-color: $gray-600; +$form-floating-transition: opacity .1s ease-in-out, transform .1s ease-in-out; +// scss-docs-end form-floating-variables + +// Form validation + +// scss-docs-start form-feedback-variables +$form-feedback-margin-top: $form-text-margin-top; +$form-feedback-font-size: $form-text-font-size; +$form-feedback-font-style: $form-text-font-style; +$form-feedback-valid-color: $success; +$form-feedback-invalid-color: $danger; + +$form-feedback-icon-valid-color: $form-feedback-valid-color; +$form-feedback-icon-valid: url("data:image/svg+xml,"); +$form-feedback-icon-invalid-color: $form-feedback-invalid-color; +$form-feedback-icon-invalid: url("data:image/svg+xml,"); +// scss-docs-end form-feedback-variables + +// scss-docs-start form-validation-colors +$form-valid-color: $form-feedback-valid-color; +$form-valid-border-color: $form-feedback-valid-color; +$form-invalid-color: $form-feedback-invalid-color; +$form-invalid-border-color: $form-feedback-invalid-color; +// scss-docs-end form-validation-colors + +// scss-docs-start form-validation-states +$form-validation-states: ( + "valid": ( + "color": var(--#{$prefix}form-valid-color), + "icon": $form-feedback-icon-valid, + "tooltip-color": #fff, + "tooltip-bg-color": var(--#{$prefix}success), + "focus-box-shadow": 0 0 $input-btn-focus-blur $input-focus-width rgba(var(--#{$prefix}success-rgb), $input-btn-focus-color-opacity), + "border-color": var(--#{$prefix}form-valid-border-color), + ), + "invalid": ( + "color": var(--#{$prefix}form-invalid-color), + "icon": $form-feedback-icon-invalid, + "tooltip-color": #fff, + "tooltip-bg-color": var(--#{$prefix}danger), + "focus-box-shadow": 0 0 $input-btn-focus-blur $input-focus-width rgba(var(--#{$prefix}danger-rgb), $input-btn-focus-color-opacity), + "border-color": var(--#{$prefix}form-invalid-border-color), + ) +); +// scss-docs-end form-validation-states + +// Z-index master list +// +// Warning: Avoid customizing these values. They're used for a bird's eye view +// of components dependent on the z-axis and are designed to all work together. + +// scss-docs-start zindex-stack +$zindex-dropdown: 1000; +$zindex-sticky: 1020; +$zindex-fixed: 1030; +$zindex-offcanvas-backdrop: 1040; +$zindex-offcanvas: 1045; +$zindex-modal-backdrop: 1050; +$zindex-modal: 1055; +$zindex-popover: 1070; +$zindex-tooltip: 1080; +$zindex-toast: 1090; +// scss-docs-end zindex-stack + +// scss-docs-start zindex-levels-map +$zindex-levels: ( + n1: -1, + 0: 0, + 1: 1, + 2: 2, + 3: 3 +); +// scss-docs-end zindex-levels-map + + +// Navs + +// scss-docs-start nav-variables +$nav-link-padding-y: .5rem; +$nav-link-padding-x: 1rem; +$nav-link-font-size: null; +$nav-link-font-weight: null; +$nav-link-color: var(--#{$prefix}body-color); +$nav-link-hover-color: var(--#{$prefix}link-hover-color); +$nav-link-transition: none;//color .15s ease-in-out, background-color .15s ease-in-out, border-color .15s ease-in-out +$nav-link-disabled-color: var(--#{$prefix}secondary-color); +$nav-link-focus-box-shadow: $focus-ring-box-shadow; + +$nav-tabs-border-color: var(--#{$prefix}border-color); +$nav-tabs-border-width: var(--#{$prefix}border-width); +$nav-tabs-border-radius: var(--#{$prefix}border-radius); +$nav-tabs-link-hover-border-color: var(--#{$prefix}secondary-bg) var(--#{$prefix}secondary-bg) $nav-tabs-border-color; +$nav-tabs-link-active-color: var(--#{$prefix}link-color); +$nav-tabs-link-active-bg: var(--#{$prefix}secondary-bg); +$nav-tabs-link-active-border-color: var(--#{$prefix}border-color) var(--#{$prefix}border-color) $nav-tabs-link-active-bg; + +$nav-pills-border-radius: var(--#{$prefix}border-radius); +$nav-pills-link-active-color: $component-active-color; +$nav-pills-link-active-bg: $component-active-bg; + +$nav-underline-gap: 1rem; +$nav-underline-border-width: .125rem; +$nav-underline-link-active-color: var(--#{$prefix}emphasis-color); +// scss-docs-end nav-variables + + +// Navbar + +// scss-docs-start navbar-variables +$navbar-padding-y: $spacer * .5; +$navbar-padding-x: null; + +$navbar-nav-link-padding-x: .5rem; + +$navbar-brand-font-size: $font-size-lg; +// Compute the navbar-brand padding-y so the navbar-brand will have the same height as navbar-text and nav-link +$nav-link-height: $font-size-base * $line-height-base + $nav-link-padding-y * 2; +$navbar-brand-height: $navbar-brand-font-size * $line-height-base; +$navbar-brand-padding-y: ($nav-link-height - $navbar-brand-height) * .5; +$navbar-brand-margin-end: 1rem; + +$navbar-toggler-padding-y: .25rem; +$navbar-toggler-padding-x: .75rem; +$navbar-toggler-font-size: $font-size-lg; +$navbar-toggler-border-radius: $btn-border-radius; +$navbar-toggler-focus-width: $btn-focus-width; +$navbar-toggler-transition: box-shadow .15s ease-in-out; + +$navbar-light-color: rgba(var(--#{$prefix}emphasis-color-rgb), .65); +$navbar-light-hover-color: rgba(var(--#{$prefix}emphasis-color-rgb), .8); +$navbar-light-active-color: rgba(var(--#{$prefix}emphasis-color-rgb), 1); +$navbar-light-disabled-color: rgba(var(--#{$prefix}emphasis-color-rgb), .3); +$navbar-light-icon-color: rgba($body-color, .75); +$navbar-light-toggler-icon-bg: url("data:image/svg+xml,"); +$navbar-light-toggler-border-color: rgba(var(--#{$prefix}emphasis-color-rgb), .15); +$navbar-light-brand-color: $navbar-light-active-color; +$navbar-light-brand-hover-color: $navbar-light-active-color; +// scss-docs-end navbar-variables + +// scss-docs-start navbar-dark-variables +$navbar-dark-color: rgba($white, .55); +$navbar-dark-hover-color: rgba($white, .75); +$navbar-dark-active-color: $white; +$navbar-dark-disabled-color: rgba($white, .25); +$navbar-dark-icon-color: $navbar-dark-color; +$navbar-dark-toggler-icon-bg: url("data:image/svg+xml,"); +$navbar-dark-toggler-border-color: rgba($white, .1); +$navbar-dark-brand-color: $navbar-dark-active-color; +$navbar-dark-brand-hover-color: $navbar-dark-active-color; +// scss-docs-end navbar-dark-variables + + +// Dropdowns +// +// Dropdown menu container and contents. + +// scss-docs-start dropdown-variables +$dropdown-min-width: 11rem; +$dropdown-padding-x: .25rem; +$dropdown-padding-y: .25rem; +$dropdown-spacer: .125rem; +$dropdown-font-size: var(--#{$prefix}font-size-base); +$dropdown-color: var(--#{$prefix}body-color); +$dropdown-bg: var(--#{$prefix}secondary-bg); +$dropdown-border-color: var(--#{$prefix}border-color); +$dropdown-border-radius: $border-radius; +$dropdown-border-width: var(--#{$prefix}border-width); +$dropdown-inner-border-radius: calc($dropdown-border-radius - $dropdown-border-width); // stylelint-disable-line function-disallowed-list +$dropdown-divider-bg: $dropdown-border-color; +$dropdown-divider-margin-y: $spacer * .5; +$dropdown-box-shadow: var(--#{$prefix}box-shadow); + +$dropdown-link-color: var(--#{$prefix}body-color); +$dropdown-link-hover-color: var(--#{$prefix}body-color); +$dropdown-link-hover-bg: var(--#{$prefix}tertiary-bg); + +$dropdown-link-active-color: var(--#{$prefix}body-color); +$dropdown-link-active-bg: var(--#{$prefix}tertiary-bg); + +$dropdown-link-disabled-color: var(--#{$prefix}secondary-color); + +$dropdown-item-padding-y: .4rem; +$dropdown-item-padding-x: $spacer * .75; + +$dropdown-header-color: inherit; +$dropdown-header-padding-x: $dropdown-item-padding-x * .75; +$dropdown-header-padding-y: $dropdown-padding-y * 2; +// fusv-disable +$dropdown-header-padding: $dropdown-header-padding-y $dropdown-header-padding-x; // Deprecated in v5.2.0 +// fusv-enable +// scss-docs-end dropdown-variables + +// scss-docs-start dropdown-dark-variables +$dropdown-dark-color: $gray-300; +$dropdown-dark-bg: $gray-800; +$dropdown-dark-border-color: $dropdown-border-color; +$dropdown-dark-divider-bg: $dropdown-divider-bg; +$dropdown-dark-box-shadow: null; +$dropdown-dark-link-color: $dropdown-dark-color; +$dropdown-dark-link-hover-color: $white; +$dropdown-dark-link-hover-bg: rgba($white, .15); +$dropdown-dark-link-active-color: $dropdown-link-active-color; +$dropdown-dark-link-active-bg: $dropdown-link-active-bg; +$dropdown-dark-link-disabled-color: $gray-500; +$dropdown-dark-header-color: $gray-500; +// scss-docs-end dropdown-dark-variables + + +// Pagination + +// scss-docs-start pagination-variables +$pagination-padding-y: .375rem; +$pagination-padding-x: .75rem; +$pagination-padding-y-sm: .25rem; +$pagination-padding-x-sm: .5rem; +$pagination-padding-y-lg: .75rem; +$pagination-padding-x-lg: 1.5rem; + +$pagination-font-size: var(--#{$prefix}font-size-base); + +$pagination-color: var(--#{$prefix}body-color); +$pagination-bg: var(--#{$prefix}secondary-bg); +$pagination-border-radius: var(--#{$prefix}border-radius); +$pagination-border-width: var(--#{$prefix}border-width); +$pagination-margin-start: calc(-1 * #{$pagination-border-width}); // stylelint-disable-line function-disallowed-list +$pagination-border-color: var(--#{$prefix}border-color); + +$pagination-focus-color: var(--#{$prefix}link-hover-color); +$pagination-focus-bg: var(--#{$prefix}secondary-bg); +$pagination-focus-box-shadow: none; +$pagination-focus-outline: 0; + +$pagination-hover-color: var(--#{$prefix}link-hover-color); +$pagination-hover-bg: var(--#{$prefix}tertiary-bg); +$pagination-hover-border-color: var(--#{$prefix}border-color); // Todo in v6: remove this? + +$pagination-active-color: $component-active-color; +$pagination-active-bg: $component-active-bg; +$pagination-active-border-color: $component-active-bg; + +$pagination-disabled-color: var(--#{$prefix}secondary-color); +$pagination-disabled-bg: var(--#{$prefix}secondary-bg); +$pagination-disabled-border-color: var(--#{$prefix}border-color); + +$pagination-transition: color .15s ease-in-out, background-color .15s ease-in-out, border-color .15s ease-in-out, box-shadow .15s ease-in-out; + +$pagination-border-radius-sm: var(--#{$prefix}border-radius-sm); +$pagination-border-radius-lg: var(--#{$prefix}border-radius-lg); +// scss-docs-end pagination-variables + + +// Placeholders + +// scss-docs-start placeholders +$placeholder-opacity-max: .5; +$placeholder-opacity-min: .2; +// scss-docs-end placeholders + +// Cards + +// scss-docs-start card-variables +$card-spacer-y: $spacer; +$card-spacer-x: $spacer; +$card-title-spacer-y: 0; +$card-title-color: null; +$card-subtitle-color: null; +$card-border-width: var(--#{$prefix}theme-card-border-width); +$card-border-color: var(--#{$prefix}theme-card-border-color); +$card-border-radius: var(--#{$prefix}border-radius); +$card-box-shadow: var(--#{$prefix}theme-card-box-shadow); +$card-inner-border-radius: subtract($card-border-radius, $card-border-width); +$card-cap-padding-y: $card-spacer-y * .75; +$card-cap-padding-x: $card-spacer-x; +$card-cap-bg: transparent; +$card-cap-color: null; +$card-height: null; +$card-color: null; +$card-bg: var(--#{$prefix}secondary-bg); +$card-img-overlay-padding: $spacer; +$card-group-margin: $grid-gutter-width * .5; +// scss-docs-end card-variables + +// Accordion + +// scss-docs-start accordion-variables +$accordion-padding-y: 1rem; +$accordion-padding-x: 1.25rem; +$accordion-color: var(--#{$prefix}body-color); // Sass variable because of $accordion-button-icon +$accordion-bg: var(--#{$prefix}secondary-bg); +$accordion-border-width: var(--#{$prefix}border-width); +$accordion-border-color: var(--#{$prefix}border-color); +$accordion-border-radius: var(--#{$prefix}border-radius); +$accordion-inner-border-radius: subtract($accordion-border-radius, $accordion-border-width); + +$accordion-body-padding-y: $accordion-padding-y; +$accordion-body-padding-x: $accordion-padding-x; + +$accordion-button-padding-y: $accordion-padding-y; +$accordion-button-padding-x: $accordion-padding-x; +$accordion-button-color: var(--#{$prefix}body-color); +$accordion-button-bg: var(--#{$prefix}accordion-bg); +$accordion-transition: $btn-transition, border-radius .15s ease; +$accordion-button-active-bg: var(--#{$prefix}tertiary-bg); +$accordion-button-active-color: var(--#{$prefix}body-color); + +$accordion-button-focus-border-color: $input-focus-border-color; +$accordion-button-focus-box-shadow: none; + +$accordion-icon-width: 0.75rem; +$accordion-icon-color: $body-color; +$accordion-icon-active-color: $body-color; +$accordion-icon-transition: transform .2s ease-in-out; +$accordion-icon-transform: rotate(-180deg); + +$accordion-button-icon: url("data:image/svg+xml,"); +$accordion-button-active-icon: url("data:image/svg+xml,"); +// scss-docs-end accordion-variables + +// Tooltips + +// scss-docs-start tooltip-variables +$tooltip-font-size: $font-size-sm; +$tooltip-max-width: 200px; +$tooltip-color: var(--#{$prefix}body-bg); +$tooltip-bg: var(--#{$prefix}body-color); +$tooltip-border-radius: var(--#{$prefix}border-radius); +$tooltip-opacity: 1; +$tooltip-padding-y: $spacer * .25; +$tooltip-padding-x: $spacer * .5; +$tooltip-margin: null; // TODO: remove this in v6 + +$tooltip-arrow-width: .8rem; +$tooltip-arrow-height: .4rem; +// fusv-disable +$tooltip-arrow-color: null; // Deprecated in Bootstrap 5.2.0 for CSS variables +// fusv-enable +// scss-docs-end tooltip-variables + +// Form tooltips must come after regular tooltips +// scss-docs-start tooltip-feedback-variables +$form-feedback-tooltip-padding-y: $tooltip-padding-y; +$form-feedback-tooltip-padding-x: $tooltip-padding-x; +$form-feedback-tooltip-font-size: $tooltip-font-size; +$form-feedback-tooltip-line-height: null; +$form-feedback-tooltip-opacity: $tooltip-opacity; +$form-feedback-tooltip-border-radius: $tooltip-border-radius; +// scss-docs-end tooltip-feedback-variables + + +// Popovers + +// scss-docs-start popover-variables +$popover-font-size: $font-size-sm; +$popover-bg: var(--#{$prefix}secondary-bg); +$popover-max-width: 276px; +$popover-border-width: var(--#{$prefix}border-width); +$popover-border-color: var(--#{$prefix}border-color); +$popover-border-radius: var(--#{$prefix}border-radius-lg); +$popover-inner-border-radius: calc(#{$popover-border-radius} - #{$popover-border-width}); // stylelint-disable-line function-disallowed-list +$popover-box-shadow: var(--#{$prefix}box-shadow); + +$popover-header-font-size: var(--#{$prefix}font-size-base); +$popover-header-bg: var(--#{$prefix}tertiary-bg); +$popover-header-color: $headings-color; +$popover-header-padding-y: .7rem; +$popover-header-padding-x: .8rem; + +$popover-body-color: var(--#{$prefix}body-color); +$popover-body-padding-y: $spacer; +$popover-body-padding-x: $spacer; + +$popover-arrow-width: 1rem; +$popover-arrow-height: .5rem; +// scss-docs-end popover-variables + +// fusv-disable +// Deprecated in Bootstrap 5.2.0 for CSS variables +$popover-arrow-color: $popover-bg; +$popover-arrow-outer-color: var(--#{$prefix}border-color-translucent); +// fusv-enable + + +// Toasts + +// scss-docs-start toast-variables +$toast-max-width: 350px; +$toast-padding-x: .75rem; +$toast-padding-y: .5rem; +$toast-font-size: .875rem; +$toast-color: null; +$toast-background-color: rgba(var(--#{$prefix}body-bg-rgb), .85); +$toast-border-width: var(--#{$prefix}border-width); +$toast-border-color: var(--#{$prefix}border-color); +$toast-border-radius: var(--#{$prefix}border-radius); +$toast-box-shadow: var(--#{$prefix}box-shadow); +$toast-spacing: $container-padding-x; + +$toast-header-color: var(--#{$prefix}secondary-color); +$toast-header-background-color: rgba(var(--#{$prefix}body-bg-rgb), .85); +$toast-header-border-color: $toast-border-color; +// scss-docs-end toast-variables + + +// Badges + +// scss-docs-start badge-variables +$badge-font-size: .75em; +$badge-font-weight: $font-weight-bold; +$badge-color: $white; +$badge-padding-y: .25em; +$badge-padding-x: .4em; +$badge-border-radius: var(--#{$prefix}border-radius); +// scss-docs-end badge-variables + + +// Modals + +// scss-docs-start modal-variables +$modal-inner-padding: $spacer; + +$modal-footer-margin-between: .5rem; + +$modal-dialog-margin: .5rem; +$modal-dialog-margin-y-sm-up: 1.75rem; + +$modal-title-line-height: $line-height-base; + +$modal-content-color: null; +$modal-content-bg: var(--#{$prefix}secondary-bg); +$modal-content-border-color: transparent; +$modal-content-border-width: var(--#{$prefix}border-width); +$modal-content-border-radius: var(--#{$prefix}border-radius-lg); +$modal-content-inner-border-radius: subtract($modal-content-border-radius, $modal-content-border-width); +$modal-content-box-shadow-xs: var(--#{$prefix}box-shadow-sm); +$modal-content-box-shadow-sm-up: var(--#{$prefix}box-shadow); + +$modal-backdrop-bg: var(--#{$prefix}emphasis-color); +$modal-backdrop-opacity: .7; + +$modal-header-border-color: var(--#{$prefix}border-color); +$modal-header-border-width: $modal-content-border-width; +$modal-header-padding-y: $modal-inner-padding; +$modal-header-padding-x: $modal-inner-padding; +$modal-header-padding: $modal-header-padding-y $modal-header-padding-x; // Keep this for backwards compatibility + +$modal-footer-bg: null; +$modal-footer-border-color: $modal-header-border-color; +$modal-footer-border-width: $modal-header-border-width; + +$modal-sm: 300px; +$modal-md: 500px; +$modal-lg: 800px; +$modal-xl: 1140px; + +$modal-fade-transform: translate(0, -50px); +$modal-show-transform: none; +$modal-transition: transform .3s ease-out; +$modal-scale-transform: scale(1.02); +// scss-docs-end modal-variables + + +// Alerts +// +// Define alert colors, border radius, and padding. + +// scss-docs-start alert-variables +$alert-padding-y: .8rem; +$alert-padding-x: 1rem; +$alert-margin-bottom: 1rem; +$alert-border-radius: $border-radius; +$alert-link-font-weight: $font-weight-bold; +$alert-border-width: 0; +$alert-dismissible-padding-r: $alert-padding-x * 3; // 3x covers width of x plus default padding on either side +// scss-docs-end alert-variables + +// fusv-disable +$alert-bg-scale: -80%; // Deprecated in v5.2.0, to be removed in v6 +$alert-border-scale: -70%; // Deprecated in v5.2.0, to be removed in v6 +$alert-color-scale: 40%; // Deprecated in v5.2.0, to be removed in v6 +// fusv-enable + +// Progress bars + +// scss-docs-start progress-variables +$progress-height: 1rem; +$progress-font-size: calc(var(--#{$prefix}font-size-base) * 0.75); +$progress-bg: var(--#{$prefix}tertiary-bg); +$progress-border-radius: var(--#{$prefix}border-radius); +$progress-box-shadow: var(--#{$prefix}box-shadow-inset); +$progress-bar-color: $white; +$progress-bar-bg: var(--#{$prefix}primary); +$progress-bar-animation-timing: 1s linear infinite; +$progress-bar-transition: width .6s ease; +// scss-docs-end progress-variables + + +// List group + +// scss-docs-start list-group-variables +$list-group-color: var(--#{$prefix}body-color); +$list-group-bg: var(--#{$prefix}secondary-bg); +$list-group-border-color: var(--#{$prefix}border-color); +$list-group-border-width: var(--#{$prefix}border-width); +$list-group-border-radius: var(--#{$prefix}border-radius); + +$list-group-item-padding-y: $spacer * .5; +$list-group-item-padding-x: $spacer * .8; +// fusv-disable +$list-group-item-bg-scale: -70%; // Deprecated in v5.3.0 +$list-group-item-color-scale: 40%; // Deprecated in v5.3.0 +// fusv-enable + +$list-group-hover-bg: var(--#{$prefix}tertiary-bg); +$list-group-active-color: var(--#{$prefix}body-color); +$list-group-active-bg: var(--#{$prefix}tertiary-bg); +$list-group-active-border-color: var(--#{$prefix}border-color); + +$list-group-disabled-color: var(--#{$prefix}secondary-color); +$list-group-disabled-bg: var(--#{$prefix}tertiary-bg); + +$list-group-action-color: var(--#{$prefix}body-color); +$list-group-action-hover-color: var(--#{$prefix}body-color); + +$list-group-action-active-color: var(--#{$prefix}body-color); +$list-group-action-active-bg: var(--#{$prefix}secondary-bg); +// scss-docs-end list-group-variables + + +// Image thumbnails + +// scss-docs-start thumbnail-variables +$thumbnail-padding: .25rem; +$thumbnail-bg: var(--#{$prefix}body-bg); +$thumbnail-border-width: var(--#{$prefix}border-width); +$thumbnail-border-color: var(--#{$prefix}border-color); +$thumbnail-border-radius: var(--#{$prefix}border-radius); +$thumbnail-box-shadow: var(--#{$prefix}box-shadow-sm); +// scss-docs-end thumbnail-variables + + +// Figures + +// scss-docs-start figure-variables +$figure-caption-font-size: $small-font-size; +$figure-caption-color: var(--#{$prefix}secondary-color); +// scss-docs-end figure-variables + + +// Breadcrumbs + +// scss-docs-start breadcrumb-variables +$breadcrumb-font-size: null; +$breadcrumb-padding-y: $spacer * 1; +$breadcrumb-padding-x: 0; +$breadcrumb-item-padding-x: .25rem; +$breadcrumb-margin-bottom: 1rem; +$breadcrumb-bg: null; +$breadcrumb-divider-color: var(--#{$prefix}secondary-color); +$breadcrumb-active-color: var(--#{$prefix}secondary-color); +$breadcrumb-divider: quote("\ea61"); +$breadcrumb-divider-flipped: $breadcrumb-divider; +$breadcrumb-border-radius: null; +// scss-docs-end breadcrumb-variables + +// Carousel + +// scss-docs-start carousel-variables +$carousel-control-color: $white; +$carousel-control-width: 15%; +$carousel-control-opacity: .5; +$carousel-control-hover-opacity: .9; +$carousel-control-transition: opacity .15s ease; + +$carousel-indicator-width: 30px; +$carousel-indicator-height: 3px; +$carousel-indicator-hit-area-height: 10px; +$carousel-indicator-spacer: 3px; +$carousel-indicator-opacity: .5; +$carousel-indicator-active-bg: $white; +$carousel-indicator-active-opacity: 1; +$carousel-indicator-transition: opacity .6s ease; + +$carousel-caption-width: 70%; +$carousel-caption-color: $white; +$carousel-caption-padding-y: 1.25rem; +$carousel-caption-spacer: 1.25rem; + +$carousel-control-icon-width: 2rem; + +$carousel-control-prev-icon-bg: url("data:image/svg+xml,"); +$carousel-control-next-icon-bg: url("data:image/svg+xml,"); + +$carousel-transition-duration: .6s; +$carousel-transition: transform $carousel-transition-duration ease-in-out; // Define transform transition first if using multiple transitions (e.g., `transform 2s ease, opacity .5s ease-out`) +// scss-docs-end carousel-variables + +// scss-docs-start carousel-dark-variables +$carousel-dark-indicator-active-bg: $black; +$carousel-dark-caption-color: $black; +$carousel-dark-control-icon-filter: invert(1) grayscale(100); +// scss-docs-end carousel-dark-variables + + +// Spinners + +// scss-docs-start spinner-variables +$spinner-width: 2rem; +$spinner-height: $spinner-width; +$spinner-vertical-align: -.25em; +$spinner-border-width: .25em; +$spinner-animation-speed: .75s; + +$spinner-width-sm: 1rem; +$spinner-height-sm: $spinner-width-sm; +$spinner-border-width-sm: .2em; +// scss-docs-end spinner-variables + + +// Close + +// scss-docs-start close-variables +$btn-close-width: 1em; +$btn-close-height: $btn-close-width; +$btn-close-padding-x: .25em; +$btn-close-padding-y: $btn-close-padding-x; +$btn-close-color: var(--#{$prefix}secondary-color); +$btn-close-bg: url("data:image/svg+xml,"); +$btn-close-focus-shadow: none; +$btn-close-opacity: 0.5; +$btn-close-hover-opacity: .8; +$btn-close-focus-opacity: 1; +$btn-close-disabled-opacity: .25; +$btn-close-white-filter: invert(1) grayscale(100%) brightness(200%); +// scss-docs-end close-variables + + +// Offcanvas + +// scss-docs-start offcanvas-variables +$offcanvas-padding-y: $modal-inner-padding; +$offcanvas-padding-x: $modal-inner-padding; +$offcanvas-horizontal-width: 400px; +$offcanvas-vertical-height: 30vh; +$offcanvas-transition-duration: .3s; +$offcanvas-border-color: $modal-content-border-color; +$offcanvas-border-width: $modal-content-border-width; +$offcanvas-title-line-height: $modal-title-line-height; +$offcanvas-bg-color: var(--#{$prefix}secondary-bg); +$offcanvas-color: var(--#{$prefix}body-color); +$offcanvas-box-shadow: $modal-content-box-shadow-xs; +$offcanvas-backdrop-bg: $modal-backdrop-bg; +$offcanvas-backdrop-opacity: $modal-backdrop-opacity; +// scss-docs-end offcanvas-variables + +// Code + +$code-font-size: var(--#{$prefix}font-size-base); +$code-color: $pink; + +$kbd-padding-y: .1875rem; +$kbd-padding-x: .375rem; +$kbd-font-size: $code-font-size; +$kbd-color: var(--#{$prefix}body-bg); +$kbd-bg: var(--#{$prefix}body-color); +$nested-kbd-font-weight: null; // Deprecated in v5.2.0, removing in v6 + +$pre-color: null; + +// +// custom-variables.scss +// + + +$font-family-secondary: var(--#{$prefix}font-family-secondary); + +// Logo +$logo-lg-height: var(--#{$prefix}logo-lg-height); +$logo-sm-height: var(--#{$prefix}logo-sm-height); + +// Left Sidebar +$sidenav-width: var(--#{$prefix}sidenav-width); +$sidenav-width-md: var(--#{$prefix}sidenav-width-md); +$sidenav-width-sm: var(--#{$prefix}sidenav-width-sm); + +$sidenav-bg: var(--#{$prefix}sidenav-bg); +$sidenav-border-color: var(--#{$prefix}sidenav-border-color); +$sidenav-item-color: var(--#{$prefix}sidenav-item-color); +$sidenav-item-hover-color: var(--#{$prefix}sidenav-item-hover-color); +$sidenav-item-hover-bg: var(--#{$prefix}sidenav-item-hover-bg); +$sidenav-item-active-color: var(--#{$prefix}sidenav-item-active-color); +$sidenav-item-active-bg: var(--#{$prefix}sidenav-item-active-bg); + +// Menu Items +$sidenav-item-gap: var(--#{$prefix}sidenav-item-gap); +$sidenav-item-icon-size: var(--#{$prefix}sidenav-item-icon-size); +$sidenav-item-font-size: var(--#{$prefix}sidenav-item-font-size); +$sidenav-item-font-weight: var(--#{$prefix}sidenav-item-font-weight); +$sidenav-item-padding-x: var(--#{$prefix}sidenav-item-padding-x); +$sidenav-item-padding-y: var(--#{$prefix}sidenav-item-padding-y); + +// Sub Menu Items +$sidenav-sub-item-gap: var(--#{$prefix}sidenav-sub-item-gap); +$sidenav-sub-item-font-size: var(--#{$prefix}sidenav-sub-item-font-size); +$sidenav-sub-item-font-weight: var(--#{$prefix}sidenav-sub-item-font-weight); +$sidenav-sub-item-padding-x: var(--#{$prefix}sidenav-sub-item-padding-x); +$sidenav-sub-item-padding-y: var(--#{$prefix}sidenav-sub-item-padding-y); + +// Topbar +$topbar-height: var(--#{$prefix}topbar-height); +$topbar-bg: var(--#{$prefix}topbar-bg); +$topbar-item-color: var(--#{$prefix}topbar-item-color); +$topbar-item-hover-color: var(--#{$prefix}topbar-item-hover-color); +$topbar-search-bg: var(--#{$prefix}topbar-search-bg); +$topbar-search-border: var(--#{$prefix}topbar-search-border); \ No newline at end of file diff --git a/src/assets/scss/app.scss b/src/assets/scss/app.scss new file mode 100644 index 0000000..bf297f2 --- /dev/null +++ b/src/assets/scss/app.scss @@ -0,0 +1,97 @@ +/** + * Template Name: UBold - Admin & Dashboard Template + * By (Author): Coderthemes + * Module/App (File Name): App CSS File +*/ + + +// Core files +@import "bootstrap/scss/functions"; +@import "bootstrap/scss/variables"; + +@import "variables"; +@import "variables-dark"; + +@import "bootstrap/scss/bootstrap"; + +@import "config/root"; +@import "config/theme-default"; // Default Theme +@import "config/theme-saas"; +@import "config/theme-modern"; +@import "config/theme-material"; +@import "config/theme-minimal"; +@import "config/theme-flat"; + +// Structure +@import "structure/topbar"; +@import "structure/sidenav"; +@import "structure/horizontal"; +@import "structure/layout"; +@import "structure/footer"; + +// Components +@import "components/background"; +@import "components/accordions"; +@import "components/alert"; +@import "components/avatar"; +@import "components/breadcrumb"; +@import "components/buttons"; +@import "components/badge"; +@import "components/card"; +@import "components/dropdown"; +@import "components/forms"; +@import "components/modal"; +@import "components/nav"; +@import "components/pagination"; +@import "components/popover"; +@import "components/print"; +@import "components/progress"; +@import "components/reboot"; +@import "components/tables"; +@import "components/tooltip"; +@import "components/preloader"; +@import "components/widgets"; +@import "components/list-group"; + + +// Pages +@import "pages/authentication"; +@import "pages/chat"; +@import "pages/email"; +@import "pages/error"; +@import "pages/kanban-board"; +@import "pages/landing"; +@import "pages/outlook"; +@import "pages/sitemap"; +@import "pages/timeline"; + + +// Plugins +@import "plugins/apexcharts"; +@import "plugins/calendar"; +@import "plugins/choice"; +@import "plugins/colorpicker"; +@import "plugins/datatables"; +@import "plugins/daterangepicker"; +@import "plugins/dropzone"; +@import "plugins/filepond"; +@import "plugins/flatpickr"; +@import "plugins/jvectormap"; +@import "plugins/noui-rangeslider"; +@import "plugins/pass-bar"; +@import "plugins/prismjs"; +@import "plugins/quill-editor"; +@import "plugins/select2"; +@import "plugins/simplebar"; +@import "plugins/sortablejs"; +@import "plugins/summernote"; +@import "plugins/sweetalert2"; +@import "plugins/touchpin"; +@import "plugins/tour"; +@import "plugins/treeview"; +@import "plugins/typehead"; +@import "plugins/wizard"; +@import "plugins/react-select"; +@import "plugins/react-slider"; +@import "plugins/multiselect"; +@import "pages/dashboard"; \ No newline at end of file diff --git a/src/assets/scss/components/_accordions.scss b/src/assets/scss/components/_accordions.scss new file mode 100644 index 0000000..b7b77bd --- /dev/null +++ b/src/assets/scss/components/_accordions.scss @@ -0,0 +1,59 @@ +// +// _accordions.scss +// + +.accordion-button { + font-weight: $font-weight-semibold; +} + +// Bordered Accordions Style +.accordion-bordered { + .accordion-item { + border-top: $accordion-border-width solid $accordion-border-color; + border-radius: $accordion-border-radius; + + &:not(:first-of-type) { + margin-top: 0.5rem; + } + + .accordion-button { + border-radius: $accordion-border-radius; + + &:not(.collapsed) { + border-bottom-left-radius: 0; + border-bottom-right-radius: 0; + } + } + } +} + +// Without Arrow Accordions Style +.accordion-arrow-none { + .accordion-button { + &::after { + background-image: none; + } + } +} + +// Custom Icons Support Accordions Style +.accordion-custom-icon { + .accordion-icon { + position: absolute; + right: $accordion-padding-x; + font-size: 18px; + } + + .accordion-icon-off { + display: none; + } + + [aria-expanded="true"] { + .accordion-icon-off { + display: block; + } + .accordion-icon-on { + display: none; + } + } +} \ No newline at end of file diff --git a/src/assets/scss/components/_alert.scss b/src/assets/scss/components/_alert.scss new file mode 100644 index 0000000..b60e0a2 --- /dev/null +++ b/src/assets/scss/components/_alert.scss @@ -0,0 +1,13 @@ +// +// _alert.scss +// + +// Bordered Alerts Style +.alert-bordered { + &.border-start { + border-left-width: 3px !important; + } + &.border-bottom { + border-bottom-width: 2px !important; + } +} \ No newline at end of file diff --git a/src/assets/scss/components/_avatar.scss b/src/assets/scss/components/_avatar.scss new file mode 100644 index 0000000..5347cc9 --- /dev/null +++ b/src/assets/scss/components/_avatar.scss @@ -0,0 +1,93 @@ +// +// _avatar.scss (avatar thumbnail sizes) +// + +// Avatar Sizes +.avatar-xxs { + height: 1rem; + width: 1rem; +} + +.avatar-xs { + height: 1.5rem; + width: 1.5rem; +} + +.avatar-sm { + height: 2rem; + width: 2rem; +} + +.avatar-md { + height: 2.25rem; + width: 2.25rem; +} + +.avatar-lg { + height: 2.75rem; + width: 2.75rem; +} + +.avatar-xl { + height: 3rem; + width: 3rem; +} + +.avatar-xxl { + height: 5rem; + width: 5rem; +} + +// Avatar Title +.avatar-title { + align-items: center; + display: flex; + height: 100%; + justify-content: center; + width: 100%; +} + +// avatar group +.avatar-group { + padding-left: 0.75rem; + @extend .d-flex; + @extend .flex-wrap; + @extend .align-items-center; + line-height: 1; + + .avatar { + margin-left: -0.75rem; + transition: all 0.2s; + line-height: 1; + + &:hover { + position: relative; + transform: translateY(-2px); + z-index: 1; + } + } + + &.avatar-group-sm { + padding-left: 0.5rem; + + .avatar { + margin-left: -0.5rem; + } + } + + &.avatar-group-xs { + padding-left: 0.35rem; + + .avatar { + margin-left: -0.35rem; + } + } +} + +// +// Font Based Image Size +// +.avatar-img-size { + height: 1em; + width: 1em; +} \ No newline at end of file diff --git a/src/assets/scss/components/_background.scss b/src/assets/scss/components/_background.scss new file mode 100644 index 0000000..cdc8ce4 --- /dev/null +++ b/src/assets/scss/components/_background.scss @@ -0,0 +1,12 @@ +// +// _background.scss +// + + +// Fill color +@each $color, +$value in $theme-colors { + .fill-#{$color} { + fill: rgba(var(--#{$prefix}#{$color}-rgb), 0.15); + } +} \ No newline at end of file diff --git a/src/assets/scss/components/_badge.scss b/src/assets/scss/components/_badge.scss new file mode 100644 index 0000000..ba3fd18 --- /dev/null +++ b/src/assets/scss/components/_badge.scss @@ -0,0 +1,78 @@ +// +// _badges.scss +// + +.badge { + vertical-align: middle; +} + +// Soft Badges +@each $state in map-keys($theme-colors) { + .badge-soft-#{$state} { + --#{$prefix}badge-color: var(--#{$prefix}#{$state}); + background-color: var(--#{$prefix}#{$state}-bg-subtle); + + &[href] { + color: var(--#{$prefix}#{$state}); + text-decoration: none; + background-color: var(--#{$prefix}#{$state}-bg-subtle); + + &:is(:hover, :focus) { + color: var(--#{$prefix}#{$state}); + text-decoration: none; + background-color: var(--#{$prefix}#{$state}-bg-subtle); + } + } + } +} + +// Outline badges +@each $state in map-keys($theme-colors) { + .badge-outline-#{$state} { + --#{$prefix}badge-color: var(--#{$prefix}#{$state}); + border: 1px solid var(--#{$prefix}#{$state}); + background-color: transparent; + + &[href] { + color: var(--#{$prefix}#{$state}); + text-decoration: none; + background-color: var(--#{$prefix}#{$state}-bg-subtle); + + &:is(:hover, :focus) { + color: var(--#{$prefix}#{$state}); + text-decoration: none; + background-color: var(--#{$prefix}#{$state}-bg-subtle); + } + } + } +} + +.badge-default { + --#{$prefix}badge-color: var(--#{$prefix}body-color); + border: 1px solid rgba(var(--#{$prefix}dark-rgb), 0.2); +} + +// Label based Badges +.badge-label { + border-radius: 0; + padding: calc(var(--#{$prefix}badge-padding-y) * 1.5) calc(var(--#{$prefix}badge-padding-x) * 2); +} + +//Square & Circle badge +.badge-square, +.badge-circle { + display: inline-flex; + align-items: center; + justify-content: center; + height: 1rem; + min-width: 1rem; + padding: 0 .1rem; + line-height: 0; +} + +.badge.badge-circle { + border-radius: 50%; + padding: 0; + min-width: unset; + width: 1rem; +} \ No newline at end of file diff --git a/src/assets/scss/components/_breadcrumb.scss b/src/assets/scss/components/_breadcrumb.scss new file mode 100644 index 0000000..c7821b1 --- /dev/null +++ b/src/assets/scss/components/_breadcrumb.scss @@ -0,0 +1,19 @@ +// +// _breadcrumb.scss +// + +// Breadcrumb item arrow +.breadcrumb-item { + a { + color: var(--#{$prefix}body-color); + + &:hover { + color: var(--#{$prefix}primary); + } + } + +.breadcrumb-item { + &::before { + font-family: "tabler-icons"; + } + } +} \ No newline at end of file diff --git a/src/assets/scss/components/_buttons.scss b/src/assets/scss/components/_buttons.scss new file mode 100644 index 0000000..e52c792 --- /dev/null +++ b/src/assets/scss/components/_buttons.scss @@ -0,0 +1,216 @@ +// +// _buttons.scss +// + +.btn { + display: inline-flex; + align-items: center; + justify-content: center; + + &-icon { + position: relative; + display: inline-flex; + justify-content: center; + align-items: center; + height: calc(#{$btn-padding-y * 2} + #{$btn-line-height}em + #{$border-width * 2}); + width: calc(#{$btn-padding-y * 2} + #{$btn-line-height}em + #{$border-width * 2}); + padding: 0; + + :is(i, svg, img) { + vertical-align: middle; + } + + &.btn-sm { + height: calc(#{$btn-padding-y-sm * 2} + #{$btn-line-height}em + #{$border-width * 2}); + width: calc(#{$btn-padding-y-sm * 2} + #{$btn-line-height}em + #{$border-width * 2}); + } + + &.btn-lg { + height: calc(#{$btn-padding-y-lg * 2} + #{$btn-line-height}em + #{$border-width * 2}); + width: calc(#{$btn-padding-y-lg * 2} + #{$btn-line-height}em + #{$border-width * 2}); + } + } +} + +@each $state in map-keys($theme-colors) { + + .btn-#{$state} { + --#{$prefix}btn-bg: var(--#{$prefix}#{$state}); + --#{$prefix}btn-border-color: var(--#{$prefix}#{$state}); + --#{$prefix}btn-hover-bg: var(--#{$prefix}#{$state}-text-emphasis); + --#{$prefix}btn-hover-border-color: var(--#{$prefix}#{$state}-text-emphasis); + --#{$prefix}btn-focus-shadow-rgb: var(--#{$prefix}#{$state}-rgb); + --#{$prefix}btn-active-bg: var(--#{$prefix}#{$state}-text-emphasis); + --#{$prefix}btn-active-border-color: var(--#{$prefix}#{$state}-text-emphasis); + --#{$prefix}btn-disabled-bg: var(--#{$prefix}#{$state}); + --#{$prefix}btn-disabled-border-color: var(--#{$prefix}#{$state}); + } + + .btn-outline-#{$state} { + --#{$prefix}btn-color: var(--#{$prefix}#{$state}); + --#{$prefix}btn-bg: transparent; + --#{$prefix}btn-border-color: var(--#{$prefix}#{$state}); + --#{$prefix}btn-hover-bg: var(--#{$prefix}#{$state}); + --#{$prefix}btn-hover-border-color: var(--#{$prefix}#{$state}); + --#{$prefix}btn-focus-shadow-rgb: var(--#{$prefix}#{$state}-rgb); + --#{$prefix}btn-active-bg: var(--#{$prefix}#{$state}); + --#{$prefix}btn-active-border-color: var(--#{$prefix}#{$state}); + } + + .btn-soft-#{$state} { + --#{$prefix}btn-color: var(--#{$prefix}#{$state}); + --#{$prefix}btn-bg: var(--#{$prefix}#{$state}-bg-subtle); + --#{$prefix}btn-border-color: #{transparent}; + --#{$prefix}btn-hover-color: #{$white}; + --#{$prefix}btn-hover-bg: var(--#{$prefix}#{$state}); + --#{$prefix}btn-hover-border-color: var(--#{$prefix}#{$state}); + --#{$prefix}btn-active-color: #{$white}; + --#{$prefix}btn-active-bg: var(--#{$prefix}#{$state}); + --#{$prefix}btn-active-border-color: var(--#{$prefix}#{$state}); + --#{$prefix}btn-disabled-color: #{$white}; + --#{$prefix}btn-disabled-bg: var(--#{$prefix}#{$state}); + --#{$prefix}btn-disabled-border-color: var(--#{$prefix}#{$state}); + --#{$prefix}btn-focus-shadow-rgb: 0 0 0 #{$btn-focus-width} rgba(var(--#{$prefix}#{$state})-rgb, 0.5); + } + + .btn-ghost-#{$state} { + --#{$prefix}btn-color: var(--#{$prefix}#{$state}); + --#{$prefix}btn-bg: transparent; + --#{$prefix}btn-border-color: #{transparent}; + --#{$prefix}btn-hover-color: #{$white}; + --#{$prefix}btn-hover-bg: var(--#{$prefix}#{$state}); + --#{$prefix}btn-hover-border-color: var(--#{$prefix}#{$state}); + --#{$prefix}btn-active-color: var(--#{$prefix}#{$state}); + --#{$prefix}btn-active-bg: var(--#{$prefix}#{$state}-bg-subtle); + --#{$prefix}btn-active-border-color: var(--#{$prefix}#{$state}-bg-subtle); + --#{$prefix}btn-disabled-color: var(--#{$prefix}#{$state}-bg-subtle); + --#{$prefix}btn-disabled-bg: var(--#{$prefix}#{$state}-bg-subtle); + --#{$prefix}btn-disabled-border-color: var(--#{$prefix}#{$state}-bg-subtle); + --#{$prefix}btn-focus-shadow-rgb: 0 0 0 #{$btn-focus-width} rgba(var(--#{$prefix}#{$state})-rgb, 0.5); + } +} + +.btn-default { + --#{$prefix}btn-color: var(--#{$prefix}dark); + --#{$prefix}btn-bg: #{transparent}; + --#{$prefix}btn-border-color: rgba(var(--#{$prefix}dark-rgb), 0.1); + --#{$prefix}btn-hover-color: var(--#{$prefix}dark); + --#{$prefix}btn-hover-bg: rgba(var(--#{$prefix}dark-rgb), 0.02); + --#{$prefix}btn-hover-border-color: rgba(var(--#{$prefix}dark-rgb), 0.3); + --#{$prefix}btn-active-bg: var(--#{$prefix}tertiary-bg); + --#{$prefix}btn-active-color: var(--#{$prefix}dark); + --#{$prefix}btn-active-border-color: rgba(var(--#{$prefix}dark-rgb), 0.15); + --#{$prefix}btn-focus-shadow-rgb: 0 0 0 #{$btn-focus-width} rgba(var(--#{$prefix}light-rgb), 0.5); +} + +.btn-light { + --#{$prefix}btn-color: var(--#{$prefix}dark); + --#{$prefix}btn-bg: var(--#{$prefix}light); + --#{$prefix}btn-border-color: #{transparent}; + --#{$prefix}btn-hover-color: var(--#{$prefix}primary); + --#{$prefix}btn-hover-bg: var(--#{$prefix}light); + --#{$prefix}btn-hover-border-color: #{transparent}; + --#{$prefix}btn-active-bg: var(--#{$prefix}tertiary-bg); + --#{$prefix}btn-active-color: var(--#{$prefix}tertiary-color); + --#{$prefix}btn-active-border-color: var(--#{$prefix}tertiary-bg); + --#{$prefix}btn-focus-shadow-rgb: 0 0 0 #{$btn-focus-width} rgba(var(--#{$prefix}light-rgb), 0.5); +} + +.btn-outline-light { + --#{$prefix}btn-color: var(--#{$prefix}dark); + --#{$prefix}btn-bg: #{transparent}; + --#{$prefix}btn-border-color: var(--#{$prefix}light); + --#{$prefix}btn-hover-color: var(--#{$prefix}dark); + --#{$prefix}btn-hover-bg: var(--#{$prefix}tertiary-bg); + --#{$prefix}btn-hover-border-color: var(--#{$prefix}light); + --#{$prefix}btn-active-bg: var(--#{$prefix}tertiary-bg); + --#{$prefix}btn-active-color: var(--#{$prefix}dark); + --#{$prefix}btn-active-border-color: var(--#{$prefix}light); + --#{$prefix}btn-focus-shadow-rgb: 0 0 0 #{$btn-focus-width} rgba(var(--#{$prefix}light-rgb), 0.5); +} + +.btn-outline-dark { + --#{$prefix}btn-color: var(--#{$prefix}dark); + --#{$prefix}btn-bg: #{transparent}; + --#{$prefix}btn-border-color: var(--#{$prefix}dark); + --#{$prefix}btn-hover-color: var(--#{$prefix}light); + --#{$prefix}btn-hover-bg: var(--#{$prefix}dark); + --#{$prefix}btn-hover-border-color: var(--#{$prefix}dark); + --#{$prefix}btn-active-bg: var(--#{$prefix}dark); + --#{$prefix}btn-active-color: var(--#{$prefix}light); + --#{$prefix}btn-active-border-color: var(--#{$prefix}dark); + --#{$prefix}btn-focus-shadow-rgb: 0 0 0 #{$btn-focus-width} rgba(var(--#{$prefix}dark-rgb), 0.5); +} + +.btn-soft-dark { + --#{$prefix}btn-hover-color: var(--#{$prefix}light); + --#{$prefix}btn-active-color: var(--#{$prefix}light); +} + +html[data-bs-theme="dark"] { + .btn-default { + --#{$prefix}btn-color: var(--#{$prefix}body-color); + --#{$prefix}btn-bg: #{transparent}; + --#{$prefix}btn-border-color: rgba(var(--#{$prefix}dark-rgb), 1); + --#{$prefix}btn-hover-color: var(--#{$prefix}primary); + --#{$prefix}btn-hover-bg: rgba(var(--#{$prefix}dark-rgb), 0.02); + --#{$prefix}btn-hover-border-color: rgba(var(--#{$prefix}primary-rgb), 0.75); + --#{$prefix}btn-active-bg: var(--#{$prefix}tertiary-bg); + --#{$prefix}btn-active-color: var(--#{$prefix}dark); + --#{$prefix}btn-active-border-color: rgba(var(--#{$prefix}primary-rgb), 0.75); + --#{$prefix}btn-focus-shadow-rgb: 0 0 0 #{$btn-focus-width} rgba(var(--#{$prefix}light-rgb), 0.5); + } + + .btn-light { + --#{$prefix}btn-bg: rgba(var(--#{$prefix}white-rgb), 0.1); + --#{$prefix}btn-color: var(--#{$prefix}body-color); + --#{$prefix}btn-hover-bg: rgba(var(--#{$prefix}white-rgb), 0.1); + --#{$prefix}btn-hover-border-color: #{transparent}; + --#{$prefix}btn-active-bg: rgba(var(--#{$prefix}white-rgb), 0.1); + --#{$prefix}btn-active-border-color: #{transparent}; + } + + .btn-dark { + --#{$prefix}btn-bg: var(--#{$prefix}border-color); + --#{$prefix}btn-border-color: var(--#{$prefix}border-color); + --#{$prefix}btn-color: var(--#{$prefix}body-color); + --#{$prefix}btn-hover-color: var(--#{$prefix}white); + --#{$prefix}btn-hover-bg: rgba(var(--#{$prefix}white-rgb), 0.1); + --#{$prefix}btn-hover-border-color: #{transparent}; + --#{$prefix}btn-active-color: var(--#{$prefix}white); + --#{$prefix}btn-active-bg: rgba(var(--#{$prefix}white-rgb), 0.1); + --#{$prefix}btn-active-border-color: #{transparent}; + } + + .btn-outline-light { + --#{$prefix}btn-color: var(--#{$prefix}white); + --#{$prefix}btn-bg: #{transparent}; + --#{$prefix}btn-border-color: rgba(var(--#{$prefix}white-rgb), 0.1); + --#{$prefix}btn-hover-bg: rgba(var(--#{$prefix}white-rgb), 0.1); + --#{$prefix}btn-hover-border-color: rgba(var(--#{$prefix}white-rgb), 0.1); + --#{$prefix}btn-active-bg: rgba(var(--#{$prefix}white-rgb), 0.1); + --#{$prefix}btn-active-border-color: #{transparent}; + } + + .btn-outline-dark { + --#{$prefix}btn-color: var(--#{$prefix}white); + --#{$prefix}btn-bg: #{transparent}; + --#{$prefix}btn-border-color: var(--#{$prefix}border-color); + --#{$prefix}btn-hover-color: var(--#{$prefix}white); + --#{$prefix}btn-hover-bg: rgba(var(--#{$prefix}white-rgb), 0.1); + --#{$prefix}btn-hover-border-color: #{transparent}; + --#{$prefix}btn-active-color: var(--#{$prefix}white); + --#{$prefix}btn-active-bg: rgba(var(--#{$prefix}white-rgb), 0.1); + --#{$prefix}btn-active-border-color: #{transparent}; + } + + .btn-soft-dark, + .btn-ghost-dark { + --#{$prefix}btn-hover-color: var(--#{$prefix}white); + --#{$prefix}btn-hover-bg: rgba(var(--#{$prefix}white-rgb), 0.1); + --#{$prefix}btn-hover-border-color: #{transparent}; + --#{$prefix}btn-active-color: var(--#{$prefix}white); + --#{$prefix}btn-active-bg: rgba(var(--#{$prefix}white-rgb), 0.1); + --#{$prefix}btn-active-border-color: #{transparent}; + } +} \ No newline at end of file diff --git a/src/assets/scss/components/_card.scss b/src/assets/scss/components/_card.scss new file mode 100644 index 0000000..5900673 --- /dev/null +++ b/src/assets/scss/components/_card.scss @@ -0,0 +1,155 @@ +// +// _card.scss +// + +.card { + box-shadow: $card-box-shadow; + margin-bottom: $spacer; + + &.card-collapse { + .card-header { + border-bottom: 0; + } + + .card-body { + padding-top: 0; + padding-bottom: 0; + } + } + + &[class*="text"] { + .card-action-item { + background-color: rgba(var(--#{$prefix}white-rgb), 0.2) !important; + color: $white !important; + } + } + + .card-title { + font-size: 15px; + text-transform: none; + } + + &.card-bordered { + border: none; + border-left: 3px solid; + } +} + +// Custom class for Card backgrouns color +.card-bg { + background-color: $card-bg; +} + +// Card Header +.card-header { + display: flex; + align-items: center; + border-bottom: 1px dashed var(--#{$prefix}border-color); + @extend .gap-3; + @extend .flex-wrap; + + &.border-dashed { + border-bottom-style: dashed !important; + } +} + +// Custom Card Style +.card-out-of-container { + margin-left: calc(calc($spacer + $card-border-width) * -1); + margin-right: calc(calc($spacer + $card-border-width) * -1); + border-radius: 0; + border-top: 0; + + html[data-layout="topnav"] & { + margin-left: 0; + margin-top: $spacer; + margin-right: 0; + border-radius: $card-border-radius; + } +} + +// Card Action +.card-action { + display: flex; + gap: 0.25rem; + margin-left: auto; + + .card-action-item { + display: inline-block; + font-size: 16px; + height: 24px; + width: 24px; + line-height: 22px; + text-align: center; + border-radius: 50%; + background-color: rgba(var(--#{$prefix}light-rgb), 0.75); + color: $gray-700; + transition: all 0.3s ease-out; + + i { + vertical-align: middle; + } + + &:hover { + background-color: rgba(var(--#{$prefix}primary-rgb), 0.2); + color: var(--#{$prefix}primary); + } + } +} + + +// Card Overlay +.card-overlay { + position: absolute; + top: 0; + left: 0; + width: 100%; + height: 100%; + background-color: rgba(var(--#{$prefix}primary-rgb), 0.15); + backdrop-filter: blur(2px); + display: none; + justify-content: center; + align-items: center; + z-index: 10; + border-radius: 0.3rem; +} + +// Custom card height +.card-h-100 { + height: calc(100% - #{$spacer}); +} + +// Code Body (Custom Component) +.code-body { + display: none; + + pre { + max-height: 300px; + scrollbar-width: thin; + @extend .bg-light-subtle; + } +} + +// Card Stick Style +.card-top-sticky { + @extend .position-sticky; + top: calc(var(--#{$prefix}topbar-height) + $spacer); +} + +// Custom Card Tabs Support +.card-tabs { + border-bottom: 1px solid var(--#{$prefix}border-color) !important; + + .card-header-tabs { + margin-top: calc(var(--#{$prefix}card-cap-padding-y) * -1); + border-bottom: 0 !important; + } + + .nav-link { + --#{$prefix}nav-link-padding-y: calc(var(--#{$prefix}card-cap-padding-y) + 2px); + } +} + +.cursor-pointer { + cursor: pointer; +} \ No newline at end of file diff --git a/src/assets/scss/components/_dropdown.scss b/src/assets/scss/components/_dropdown.scss new file mode 100644 index 0000000..2aff204 --- /dev/null +++ b/src/assets/scss/components/_dropdown.scss @@ -0,0 +1,120 @@ +// +// _dropdown.scss +// + +.dropdown-menu { + box-shadow: var(--#{$prefix}dropdown-box-shadow); + animation-name: DropDownSlideUp; + animation-duration: 0.3s; + animation-fill-mode: both; + will-change: transform; + position: absolute; + z-index: 1000; + + &[data-popper-placement="top-start"], + &[data-popper-placement="top"] { + animation-name: DropDownSlideDown; + } +} + +// Dropdwon Animation +@keyframes DropDownSlideUp { + 100% { + margin-top: 0px; + } + + 0% { + margin-top: 3px; + } +} + +@keyframes DropDownSlideDown { + 100% { + margin-bottom: 0; + } + + 0% { + margin-bottom: 2px; + } +} + + +//Custom Dropdown Sizes +$dropdown-menu-xxl-width: 740px; +$dropdown-menu-xl-width: 600px; +$dropdown-menu-lg-width: 320px; +$dropdown-menu-md-width: 250px; + +@include media-breakpoint-up(md) { + .dropdown-menu-xxl { + width: $dropdown-menu-xxl-width; + } + + .dropdown-menu-xl { + width: $dropdown-menu-xl-width; + } +} + +@include media-breakpoint-up(sm) { + .dropdown-menu-lg { + width: $dropdown-menu-lg-width; + } + + .dropdown-menu-md { + width: $dropdown-menu-md-width; + } + + .dropdown-menu-full { + // width: 100vw; + width: auto; + position: fixed !important; + left: 10px !important; + right: 10px !important; + } +} + +// Dropdown arrow hide +.drop-arrow-none { + &:after { + display: none !important; + } +} + +// Dropdown Split Style +.dropdown-toggle-split { + &:before { + content: ""; + position: absolute; + background-color: rgba($white, 0.12); + top: calc(#{$btn-border-width} * -1); + bottom: calc(#{$btn-border-width} * -1); + right: calc(#{$btn-border-width} * -1); + left: 0; + border-radius: 0 $btn-border-radius $btn-border-radius 0; + } +} + +.dropstart { + .dropdown-toggle-split { + &::before { + inset: auto; + border-radius: 0; + position: relative; + z-index: 1; + } + + &::after { + content: ""; + display: inline-block; + position: absolute; + background-color: rgba($dark, 0.1); + top: 0; + bottom: 0; + right: 0; + left: 0; + border-radius: $btn-border-radius 0 0 $btn-border-radius; + border: none; + margin-left: 0; + } + } +} \ No newline at end of file diff --git a/src/assets/scss/components/_forms.scss b/src/assets/scss/components/_forms.scss new file mode 100644 index 0000000..dbdd8ea --- /dev/null +++ b/src/assets/scss/components/_forms.scss @@ -0,0 +1,88 @@ +// +// _forms.scss +// + +// Form Control +.form-control, +.form-select { + &:hover { + border-color: $input-focus-border-color; + } +} + +// Form Control Small +.form-control-sm { + line-height: normal; +} + + +// Form elements (Color and Range) +input.form-control[type="color"], +input.form-control[type="range"] { + min-height: $input-height; +} + +input::-webkit-outer-spin-button, +input::-webkit-inner-spin-button { + -webkit-appearance: none; + margin: 0; +} + +@each $state in map-keys($theme-colors) { + .form-check-#{$state} { + .form-check-input { + &:checked { + background-color: var(--#{$prefix}#{$state}); + border-color: var(--#{$prefix}#{$state}); + } + } + } +} + + +// card radio +.card-radio { + padding: 0; + + .form-check-label { + background-color: $card-bg; + border: 1px solid var(--#{$prefix}border-color); + border-radius: $border-radius; + padding: 1rem; + overflow: hidden; + text-overflow: ellipsis; + white-space: nowrap; + display: block; + position: relative; + padding-right: 32px; + + &:hover { + cursor: pointer; + } + } + + .form-check-input { + display: none; + + &:checked+.form-check-label { + &:before { + content: ""; + background-image: url("data:image/svg+xml,%3Csvg%20xmlns=%22http://www.w3.org/2000/svg%22%20width=%2224%22%20height=%2224%22%20viewBox=%220%200%2024%2024%22%20fill=%22%23f5315d%22%20class=%22icon%20icon-tabler%20icons-tabler-filled%20icon-tabler-rosette-discount-check%22%3E%3Cpath%20stroke=%22none%22%20d=%22M0%200h24v24H0z%22%20fill=%22none%22/%3E%3Cpath%20d=%22M12.01%202.011a3.2%203.2%200%200%201%202.113%20.797l.154%20.145l.698%20.698a1.2%201.2%200%200%200%20.71%20.341l.135%20.008h1a3.2%203.2%200%200%201%203.195%203.018l.005%20.182v1c0%20.27%20.092%20.533%20.258%20.743l.09%20.1l.697%20.698a3.2%203.2%200%200%201%20.147%204.382l-.145%20.154l-.698%20.698a1.2%201.2%200%200%200%20-.341%20.71l-.008%20.135v1a3.2%203.2%200%200%201%20-3.018%203.195l-.182%20.005h-1a1.2%201.2%200%200%200%20-.743%20.258l-.1%20.09l-.698%20.697a3.2%203.2%200%200%201%20-4.382%20.147l-.154%20-.145l-.698%20-.698a1.2%201.2%200%200%200%20-.71%20-.341l-.135%20-.008h-1a3.2%203.2%200%200%201%20-3.195%20-3.018l-.005%20-.182v-1a1.2%201.2%200%200%200%20-.258%20-.743l-.09%20-.1l-.697%20-.698a3.2%203.2%200%200%201%20-.147%20-4.382l.145%20-.154l.698%20-.698a1.2%201.2%200%200%200%20.341%20-.71l.008%20-.135v-1l.005%20-.182a3.2%203.2%200%200%201%203.013%20-3.013l.182%20-.005h1a1.2%201.2%200%200%200%20.743%20-.258l.1%20-.09l.698%20-.697a3.2%203.2%200%200%201%202.269%20-.944zm3.697%207.282a1%201%200%200%200%20-1.414%200l-3.293%203.292l-1.293%20-1.292l-.094%20-.083a1%201%200%200%200%20-1.32%201.497l2%202l.094%20.083a1%201%200%200%200%201.32%20-.083l4%20-4l.083%20-.094a1%201%200%200%200%20-.083%20-1.32z%22/%3E%3C/svg%3E "); + position: absolute; + bottom: 6px; + right: 6px; + background-size: 28px; + height: 28px; + width: 28px; + color: var(--#{$prefix}danger); + } + } + } +} + +// Custom Form Check (Gray Styled) +.form-check-input-light { + background-color: rgba(var(--#{$prefix}light-rgb), 0.9); + border-color: rgba(var(--#{$prefix}light-rgb), 0.9); + box-shadow: inset 0 1px 2px rgba(var(--#{$prefix}dark-rgb), 0.05); +} \ No newline at end of file diff --git a/src/assets/scss/components/_list-group.scss b/src/assets/scss/components/_list-group.scss new file mode 100644 index 0000000..a877ef6 --- /dev/null +++ b/src/assets/scss/components/_list-group.scss @@ -0,0 +1,25 @@ +// +// _list-group.scss +// + +// Custom List Group +.list-custom { + .list-group-item { + border: 0; + border-radius: $border-radius; + font-weight: $font-weight-medium; + padding: calc(var(--#{$prefix}list-group-item-padding-y) * 0.75) calc(var(--#{$prefix}list-group-item-padding-x) * 0.75); + } +} + +// Border Styles +.list-group { + &.border-0 { + --ins-list-group-border-width: 0; + } + &.border-dashed { + .list-group-item { + border-style: dashed; + } + } +} \ No newline at end of file diff --git a/src/assets/scss/components/_modal.scss b/src/assets/scss/components/_modal.scss new file mode 100644 index 0000000..287e888 --- /dev/null +++ b/src/assets/scss/components/_modal.scss @@ -0,0 +1,62 @@ +// +// _modal.scss +// + +// Title text within header +.modal-title { + color: inherit; +} + +// Modal full width +.modal-full-width { + width: 95%; + max-width: none; +} + +// Modal Positions +.modal-top { + margin: 0 auto; +} + +.modal-bottom { + display: flex; + flex-flow: column nowrap; + -ms-flex-pack: end; + justify-content: flex-end; + height: 100%; + margin: 0 auto; + align-content: center; +} + +// Modal Backdrop +.modal-backdrop { + backdrop-filter: blur(6px); +} + + +// Modal Animation +.modal { + .modal-dialog { + transition: none; + transform: scale(0.85); + opacity: 0; + } + + &.show { + .modal-dialog { + animation: zoomInModal 0.1s ease-out forwards; + } + } +} + +@keyframes zoomInModal { + from { + transform: scale(0.85); + opacity: 0; + } + + to { + transform: scale(1); + opacity: 1; + } +} \ No newline at end of file diff --git a/src/assets/scss/components/_nav.scss b/src/assets/scss/components/_nav.scss new file mode 100644 index 0000000..b95de87 --- /dev/null +++ b/src/assets/scss/components/_nav.scss @@ -0,0 +1,61 @@ +// +// _nav.scss +// + +.nav-tabs, +.nav-pills { + >li { + >a { + font-weight: $font-weight-semibold; + } + } +} + +// nav-pills Colors +@each $color, +$value in $theme-colors { + .nav-pills-#{$color} { + --#{$prefix}nav-pills-link-active-bg: #{$value}; + --#{$prefix}nav-link-hover-color: #{$value}; + } +} + +// nav-bordered +.nav-tabs { + &.nav-bordered { + border-bottom: 1px solid var(--#{$prefix}border-color); + + .nav-item { + + .nav-link { + border: 0; + + &.active { + border-bottom: 1px solid var(--#{$prefix}primary); + } + } + } + } +} + +@each $color, +$value in $theme-colors { + .nav-tabs { + &.nav-bordered-#{$color} { + .nav-item { + .nav-link { + + &:hover, + &:focus { + color: #{$value}; + } + + &.active { + border-bottom: 1px solid $value; + color: #{$value}; + } + } + } + } + } +} \ No newline at end of file diff --git a/src/assets/scss/components/_pagination.scss b/src/assets/scss/components/_pagination.scss new file mode 100644 index 0000000..e69dd6a --- /dev/null +++ b/src/assets/scss/components/_pagination.scss @@ -0,0 +1,69 @@ +// +// _pagination.scss +// + + +// Pagination Page Link SVG +.pagination { + .page-link { + svg { + height: 14px; + } + } +} + +// Pagination Boxed (Custom) (Also used in Datatables) +.pagination-boxed, +.dt-paging .pagination { + .page-link { + display: inline-flex; + justify-content: center; + align-items: center; + margin-left: 0.35rem !important; + border-radius: var(--#{$prefix}border-radius) !important; + height: calc(#{$pagination-padding-y * 2} + #{$btn-line-height}em + #{$border-width * 2}); + min-width: calc(#{$pagination-padding-y * 2} + #{$btn-line-height}em + #{$border-width * 2}); + padding: 0.1rem; + } + + &.pagination-sm { + .page-link { + height: calc(#{$pagination-padding-y-sm * 2} + #{$btn-line-height}em + #{$border-width * 2}); + min-width: calc(#{$pagination-padding-y-sm * 2} + #{$btn-line-height}em + #{$border-width * 2}); + } + } + + &.pagination-lg { + .page-link { + height: calc(#{$pagination-padding-y-lg * 2} + #{$btn-line-height}em + #{$border-width * 2}); + min-width: calc(#{$pagination-padding-y-lg * 2} + #{$btn-line-height}em + #{$border-width * 2}); + } + } +} + +// Pagination rounded (Custom) +.pagination-rounded { + .page-link { + border-radius: 50% !important; + } +} + +// Pagination Colors +@each $color, +$value in $theme-colors { + .pagination-#{$color} { + --#{$prefix}pagination-hover-color: var(--#{$prefix}#{$color}); + --#{$prefix}pagination-active-bg: var(--#{$prefix}#{$color}); + --#{$prefix}pagination-active-border-color: var(--#{$prefix}#{$color}); + } +} + +// Pagination Soft Colors +@each $state in map-keys($theme-colors) { + .pagination-soft-#{$state} { + --#{$prefix}pagination-hover-color: var(--#{$prefix}#{$state}); + --#{$prefix}pagination-active-color: var(--#{$prefix}#{$state}); + --#{$prefix}pagination-active-bg: var(--#{$prefix}#{$state}-bg-subtle); + --#{$prefix}pagination-active-border-color: #{transparent}; + } +} \ No newline at end of file diff --git a/src/assets/scss/components/_popover.scss b/src/assets/scss/components/_popover.scss new file mode 100644 index 0000000..ce5f6cf --- /dev/null +++ b/src/assets/scss/components/_popover.scss @@ -0,0 +1,18 @@ +// +// _popover.scss +// + +// Theme Colors +@each $color, +$value in $theme-colors { + .popover-#{$color} { + --#{$prefix}popover-max-width: 200px !important; + --#{$prefix}popover-border-color: #{transparent}; + --#{$prefix}popover-header-bg: rgba(255,255,255, .1) !important; + --#{$prefix}popover-header-color: var(--#{$prefix}white) !important; + --#{$prefix}popover-bg: var(--#{$prefix}#{$color}); + --#{$prefix}popover-body-color: var(--#{$prefix}white) !important; + --#{$prefix}popover-body-padding-x: 1rem !important; + --#{$prefix}popover-body-padding-y: .5rem !important; + } +} \ No newline at end of file diff --git a/src/assets/scss/components/_preloader.scss b/src/assets/scss/components/_preloader.scss new file mode 100644 index 0000000..3a7e03c --- /dev/null +++ b/src/assets/scss/components/_preloader.scss @@ -0,0 +1,16 @@ +// +// _preloader.scss +// + +#preloader { + position: fixed; + top: 0; + left: 0; + width: 100%; + height: 100%; + background: var(--#{$prefix}body-bg); /* Slight transparency */ + display: flex; + justify-content: center; + align-items: center; + z-index: 9999; +} \ No newline at end of file diff --git a/src/assets/scss/components/_print.scss b/src/assets/scss/components/_print.scss new file mode 100644 index 0000000..1bddc2b --- /dev/null +++ b/src/assets/scss/components/_print.scss @@ -0,0 +1,26 @@ +// +// _print.scss +// + +// Used invoice page +@media print { + .sidenav-menu, + .page-title-head, + .app-topbar, + .footer { + display: none !important; + } + + .card-body, + .content-page, + body { + padding: 0 !important; + margin: 0; + } + + .card { + box-shadow: none; + border: none; + padding: 0; + } +} diff --git a/src/assets/scss/components/_progress.scss b/src/assets/scss/components/_progress.scss new file mode 100644 index 0000000..702d004 --- /dev/null +++ b/src/assets/scss/components/_progress.scss @@ -0,0 +1,20 @@ +// +// _progress.scss +// + +// Custom height +.progress-sm { + height: 5px; +} + +.progress-md { + height: 8px; +} + +.progress-lg { + height: 12px; +} + +.progress-xl { + height: 15px; +} \ No newline at end of file diff --git a/src/assets/scss/components/_reboot.scss b/src/assets/scss/components/_reboot.scss new file mode 100644 index 0000000..dadf236 --- /dev/null +++ b/src/assets/scss/components/_reboot.scss @@ -0,0 +1,74 @@ +// +// _reboot.scss +// + +html { + position: relative; + min-height: 100%; + // direction: ltr; +} + +body { + overflow-x: hidden; +} + +button, +a { + outline: none !important; +} + +// Forms +b, +strong { + font-weight: $font-weight-semibold; +} + +// Border styles +.border-dashed { + --#{$prefix}border-style: dashed; +} + +.border-transparent { + --#{$prefix}border-color: transparent; +} + +// Custom Link +.link-reset { + color: inherit; + transition: $transition-base; + + &:hover { + color: var(--#{$prefix}primary); + } +} + +// Lucide SVG Icons +svg.lucide { + width: 1em; + height: 1em; +} + +// Custom Inner Shadow +.shadow-inner { + box-shadow: inset 0 2px 8px rgba(0, 0, 0, 0.1); +} + +// Custom hrline +hr.border-dashed { + border-top-style: dashed; +} + +// Overwrite for Dark Mode +html[data-bs-theme="dark"] { + .text-bg-light { + color: var(--#{$prefix}body-color) !important; + } +} + +.icon-spin { + animation: 2s linear infinite spinner-border; +} + +h1,h2,h3,h4,h5,h6 { + font-family: $font-family-secondary; +} \ No newline at end of file diff --git a/src/assets/scss/components/_tables.scss b/src/assets/scss/components/_tables.scss new file mode 100644 index 0000000..00e5a32 --- /dev/null +++ b/src/assets/scss/components/_tables.scss @@ -0,0 +1,47 @@ +// +// tables.scss +// + +// Custom table Small head +.thead-sm { + > * > * { + padding: $table-cell-padding-y-sm $table-cell-padding-x-sm !important; + } +} + +// Custom Table +.table-custom { + tfoot > tr > th:first-child, + thead > tr > th:first-child, + tr th:first-child, + tr td:first-child { + padding-left: calc($table-cell-padding-y * 1.5) !important; + } + + tfoot > tr > th:last-child, + thead > tr > th:last-child, + tr th:last-child, + tr td:last-child { + padding-right: calc($table-cell-padding-y * 1.5) !important; + } +} + +// Tables fluid +.table-nowrap { + th, + td { + white-space: nowrap; + } +} + +// Table select +.table-select:has(.form-check-input:checked) { + tr:has(.form-check-input:checked) { + background-color: rgba(var(--#{$prefix}warning-rgb), 0.1); + } +} + +// Table with Dropdown +.table tr>td .dropdown { + position: static; +} \ No newline at end of file diff --git a/src/assets/scss/components/_tooltip.scss b/src/assets/scss/components/_tooltip.scss new file mode 100644 index 0000000..a22baee --- /dev/null +++ b/src/assets/scss/components/_tooltip.scss @@ -0,0 +1,11 @@ +// +// _tooltip.scss +// + +// Tooltips Colors +@each $color, +$value in $theme-colors { + .tooltip-#{$color} { + --#{$prefix}tooltip-bg: var(--#{$prefix}#{$color}); + } +} \ No newline at end of file diff --git a/src/assets/scss/components/_widgets.scss b/src/assets/scss/components/_widgets.scss new file mode 100644 index 0000000..7fdbaaf --- /dev/null +++ b/src/assets/scss/components/_widgets.scss @@ -0,0 +1,73 @@ +// +// widgets.scss +// + +// App Search +.app-search { + position: relative; + + .form-control { + padding-left: 40px; + } + + .app-search-icon { + width: 40px; + @extend .translate-middle-y; + @extend .d-flex; + @extend .position-absolute; + @extend .top-50; + @extend .justify-content-center; + z-index: 5; + } + + svg { + height: 18px; + } + + &.app-search-sm { + .form-control { + padding-left: 30px; + } + + .app-search-icon { + width: 30px; + } + + svg { + height: 16px; + } + } + + &.app-search-lg { + .form-control { + padding-left: 50px; + } + + .app-search-icon { + width: 50px; + } + + svg { + height: 24px; + } + } + + &.app-search-pill { + .form-control { + border-top-left-radius: 50rem; + border-bottom-left-radius: 50rem; + } + + .btn { + border-top-right-radius: 50rem; + border-bottom-right-radius: 50rem; + } + } +} + +// Horizontal Bar Custom +.prob-bar { + width: 4px; + height: 20px; + border-radius: 2px; +} \ No newline at end of file diff --git a/src/assets/scss/config/_root.scss b/src/assets/scss/config/_root.scss new file mode 100644 index 0000000..1d99177 --- /dev/null +++ b/src/assets/scss/config/_root.scss @@ -0,0 +1,73 @@ +// +// _root.scss +// + +// Google fonts +@import url('https://fonts.googleapis.com/css2?family=Nunito:ital,wght@0,200..1000;1,200..1000&family=Public+Sans:ital,wght@0,100..900;1,100..900&display=swap'); + +:root { + + // Font Family Secondary + + --#{$prefix}font-family-secondary: "Public Sans", sans-serif; + // Logo + --#{$prefix}logo-lg-height: 28px; + --#{$prefix}logo-sm-height: 22px; + + // Sidebar + --#{$prefix}sidenav-width: 240px; + --#{$prefix}sidenav-width-md: 150px; + --#{$prefix}sidenav-width-sm: 75px; + + // Topbar + --#{$prefix}topbar-height: 70px; + + // Menu items + --#{$prefix}sidenav-item-icon-size: 1rem; + --#{$prefix}sidenav-item-gap: 12px; + --#{$prefix}sidenav-item-padding-x: 12px; + --#{$prefix}sidenav-item-padding-y: 8px; + --#{$prefix}sidenav-item-font-size: 0.875rem; + --#{$prefix}sidenav-item-font-weight: 400; + + // Sub Menu Items + --#{$prefix}sidenav-sub-item-font-size: 0.875rem; + --#{$prefix}sidenav-sub-item-font-weight: 400; + --#{$prefix}sidenav-sub-item-gap: 4px; + --#{$prefix}sidenav-sub-item-padding-x: 10px; + --#{$prefix}sidenav-sub-item-padding-y: 7px; + + --#{$prefix}theme-card-border-width: 0; + --#{$prefix}theme-card-box-shadow: var(--#{$prefix}box-shadow-sm); + --#{$prefix}theme-card-border-color: var(--#{$prefix}border-color); + + --#{$prefix}font-weight-medium: 500; + --#{$prefix}font-weight-semibold: 600; + --#{$prefix}font-weight-bold: 700; + + --#{$prefix}font-size-xxs: 11px; + --#{$prefix}font-size-xs: 12px; + --#{$prefix}font-size-base: 14px; + --#{$prefix}font-size-sm: 14px; + --#{$prefix}font-size-md: 15px; + --#{$prefix}font-size-lg: 16px; + --#{$prefix}font-size-xl: 18px; + --#{$prefix}font-size-xxl: 20px; + + --#{$prefix}chart-primary: #6658dd; + --#{$prefix}chart-primary-rgb: #{to-rgb(#6658dd)}; + --#{$prefix}chart-secondary: #4a81d4; + --#{$prefix}chart-secondary-rgb: #{to-rgb(#4a81d4)}; + --#{$prefix}chart-gray: #edeff3; + --#{$prefix}chart-gray-rgb: #{to-rgb(#edeff3)}; + --#{$prefix}chart-dark: #1abc9c; + --#{$prefix}chart-dark-rgb: #{to-rgb(#1abc9c)}; + --#{$prefix}chart-border-color: #ecf4fc; + --#{$prefix}chart-title-color: #bbcae1; +} + +[data-bs-theme="dark"]{ + --#{$prefix}chart-border-color: #242c31; + --#{$prefix}chart-gray: #40424f; + --#{$prefix}chart-gray-rgb: #{to-rgb(#40424f)}; +} \ No newline at end of file diff --git a/src/assets/scss/config/_theme-default.scss b/src/assets/scss/config/_theme-default.scss new file mode 100644 index 0000000..3d92407 --- /dev/null +++ b/src/assets/scss/config/_theme-default.scss @@ -0,0 +1,133 @@ +// +// Default Theme Mode +// + + +@if $theme-default ==true { + + // Background Light left-sidebar + html[data-menu-color="light"] { + --#{$prefix}sidenav-bg: #{$white}; + --#{$prefix}sidenav-border-color: #{$gray-300}; + --#{$prefix}sidenav-item-color: #{$gray-700}; + --#{$prefix}sidenav-item-hover-color: #{$primary}; + --#{$prefix}sidenav-item-hover-bg: null; + --#{$prefix}sidenav-item-active-color: #{$primary}; + --#{$prefix}sidenav-item-active-bg: null; + } + + // Dark Left Sidebar + html[data-menu-color="dark"] { + --#{$prefix}sidenav-bg: #23303c; + --#{$prefix}sidenav-border-color: #23303c; + --#{$prefix}sidenav-item-color: #8495ab; + --#{$prefix}sidenav-item-hover-color: #bccee4; + --#{$prefix}sidenav-item-hover-bg: #2f3742; + --#{$prefix}sidenav-item-active-color: #ced6df; + --#{$prefix}sidenav-item-active-bg: #1c262f; + } + + // Background Gray left-sidebar + html[data-menu-color="gray"] { + --#{$prefix}sidenav-bg: #e9ebef; + --#{$prefix}sidenav-border-color: #e7e9eb; + --#{$prefix}sidenav-item-color: #{$gray-700}; + --#{$prefix}sidenav-item-hover-color: #{$primary}; + --#{$prefix}sidenav-item-hover-bg: #dbdfe7; + --#{$prefix}sidenav-item-active-color: #212b29; + --#{$prefix}sidenav-item-active-bg: #dbdfe7; + } + + // Gradient Menu + html[data-menu-color="gradient"] { + --#{$prefix}sidenav-bg: #{linear-gradient(135deg, #1e4258, #313144)}; + --#{$prefix}sidenav-border-color: null; + --#{$prefix}sidenav-item-color: #799cb7; + --#{$prefix}sidenav-item-hover-color: #bccee4; + --#{$prefix}sidenav-item-hover-bg: #2f3742; + --#{$prefix}sidenav-item-active-color: #cfdff1; + --#{$prefix}sidenav-item-active-bg: #2f4358; + } + + // Image Menu + html[data-menu-color="image"] { + --#{$prefix}sidenav-bg: #{linear-gradient(to bottom right, rgba(16,16,30,0.85), #2f434e), url('../../images/sidenav-bg.jpg') center/cover no-repeat}; + --#{$prefix}sidenav-border-color: null; + --#{$prefix}sidenav-item-color: #799cb7; + --#{$prefix}sidenav-item-hover-color: #bccee4; + --#{$prefix}sidenav-item-hover-bg: #253542; + --#{$prefix}sidenav-item-active-color: #cfdff1; + --#{$prefix}sidenav-item-active-bg: #253542; + } + + // Dark Mode + html[data-bs-theme="dark"][data-menu-color="dark"], + html[data-bs-theme="dark"][data-menu-color="gray"], + html[data-bs-theme="dark"][data-menu-color="light"] { + --#{$prefix}sidenav-bg: #1e1f27; + --#{$prefix}sidenav-border-color: #2c2d38; + --#{$prefix}sidenav-item-color: #8495ab; + --#{$prefix}sidenav-item-hover-color: #bccee4; + --#{$prefix}sidenav-item-hover-bg: #2f3742; + --#{$prefix}sidenav-item-active-color: #ced6df; + --#{$prefix}sidenav-item-active-bg: #22232c; + } + + // Light Topbar + html[data-topbar-color="light"] { + --#{$prefix}topbar-bg: #ffffff; + --#{$prefix}topbar-item-color: #{$gray-700}; + --#{$prefix}topbar-item-hover-color: #{$primary}; + --#{$prefix}topbar-search-bg: transparent; + --#{$prefix}topbar-search-border: #e7e9eb; + } + + // Gray Topbar + html[data-topbar-color="gray"] { + --#{$prefix}topbar-bg: #e9ebef; + --#{$prefix}topbar-item-color: #{$gray-700}; + --#{$prefix}topbar-item-hover-color: #{$primary}; + --#{$prefix}topbar-search-bg: #e0e1e9; + --#{$prefix}topbar-search-border: #e0e1e9; + } + + // Dark Topbar + html[data-topbar-color="dark"] { + --#{$prefix}topbar-bg: #38414a; + --#{$prefix}topbar-item-color: #adb5bf; + --#{$prefix}topbar-item-hover-color: #e0eeff; + --#{$prefix}topbar-search-bg: #3f4952; + --#{$prefix}topbar-search-border: #3f4952; + } + + // Gradient Topbar + html[data-topbar-color="gradient"] { + --#{$prefix}topbar-bg: #{linear-gradient(to bottom, #1e4258, #313144)}; + --#{$prefix}topbar-item-color: rgba(255, 255, 255, 0.7); + --#{$prefix}topbar-item-hover-color: #ffffff; + --#{$prefix}topbar-search-bg: rgba(255, 255, 255, 0.1); + --#{$prefix}topbar-search-border: rgba(255, 255, 255, 0.1); + } + + // Topbar (Dark Mode) + html[data-bs-theme="dark"][data-topbar-color="light"], + html[data-bs-theme="dark"][data-topbar-color="dark"], + html[data-bs-theme="dark"][data-topbar-color="gray"] { + --#{$prefix}topbar-bg: #252630; + --#{$prefix}topbar-item-color: #adb5bf; + --#{$prefix}topbar-item-hover-color: #e0eeff; + --#{$prefix}topbar-search-bg: #2d2e3c; + --#{$prefix}topbar-search-border: #2d2e3c; + } +} + +/* Dark Mode */ +@if $enable-dark-mode { + @include color-mode(dark, true) { + --#{$prefix}light: #252630; + --#{$prefix}light-rgb: #{to-rgb(#252630)}; + --#{$prefix}dark: #4b4d5c; + --#{$prefix}dark-rgb: #{to-rgb(#4b4d5c)}; + --#{$prefix}box-shadow: #{0px 0px 30px rgba(0, 0, 0, 0.3)}; + } +} \ No newline at end of file diff --git a/src/assets/scss/config/_theme-flat.scss b/src/assets/scss/config/_theme-flat.scss new file mode 100644 index 0000000..ae90f7f --- /dev/null +++ b/src/assets/scss/config/_theme-flat.scss @@ -0,0 +1,225 @@ +// +// Flat Theme Mode +// + +$theme-flat-colors: ( + "primary": #4f46e5, // Deep indigo + "secondary": #06b6d4, // Fresh cyan + "success": #22c55e, // Vibrant green + "info": #0ea5e9, // Bright blue + "warning": #f59e0b, // Warm amber + "danger": #ef4444, // Modern red + "purple": #a855f7, // Playful violet +); + +@if $theme-flat ==true { + + @import url('https://fonts.googleapis.com/css2?family=Nunito:ital,wght@0,200..1000;1,200..1000&display=swap'); + + html[data-skin="flat"] { + + --#{$prefix}font-sans-serif: "Nunito", sans-serif; + --#{$prefix}font-family-secondary: "Nunito", sans-serif; + + --#{$prefix}body-font-size: 0.875rem; + --#{$prefix}body-bg: #ffffff; + --#{$prefix}secondary-bg: #fbfbfd; + + --#{$prefix}theme-card-border-width: 1px; + --#{$prefix}border-color: #edf2f9; + + --#{$prefix}font-weight-medium: 500; + --#{$prefix}font-weight-semibold: 700; + --#{$prefix}font-weight-bold: 700; + + --#{$prefix}font-size-xxs: 12px; + --#{$prefix}font-size-xs: 13px; + --#{$prefix}font-size-base: 0.875rem; + --#{$prefix}font-size-md: 15px; + --#{$prefix}font-size-lg: 16px; + --#{$prefix}font-size-xl: 18px; + --#{$prefix}font-size-xxl: 20px; + + // Menu items + --#{$prefix}sidenav-item-icon-size: 1.125rem; + --#{$prefix}sidenav-item-gap: 12px; + --#{$prefix}sidenav-item-padding-x: 10px; + --#{$prefix}sidenav-item-padding-y: 10px; + --#{$prefix}sidenav-item-font-size: 0.875rem; + --#{$prefix}sidenav-item-font-weight: 500; + + // Sub Menu Items + --#{$prefix}sidenav-sub-item-font-size: 0.875rem; + --#{$prefix}sidenav-sub-item-font-weight: 500; + --#{$prefix}sidenav-sub-item-gap: 4px; + --#{$prefix}sidenav-sub-item-padding-x: 10px; + --#{$prefix}sidenav-sub-item-padding-y: 7px; + + // Chart Colors + --#{$prefix}chart-primary: #4f46e5; + --#{$prefix}chart-primary-rgb: #{to-rgb(#4f46e5)}; + --#{$prefix}chart-secondary: #818cf8; + --#{$prefix}chart-secondary-rgb: #{to-rgb(#818cf8)}; + --#{$prefix}chart-gray: #c7d2fe; + --#{$prefix}chart-gray-rgb: #{to-rgb(#c7d2fe)}; + --#{$prefix}chart-dark: #4338ca; + --#{$prefix}chart-dark-rgb: #{to-rgb(#4338ca)}; + --#{$prefix}chart-border-color: #ecf4fc; + --#{$prefix}chart-title-color: #bbcae1; + + // Background Light left-sidebar + &[data-menu-color="light"] { + --#{$prefix}sidenav-bg: #{$white}; + --#{$prefix}sidenav-border-color: #edf2f9; + --#{$prefix}sidenav-item-color: #{$gray-700}; + --#{$prefix}sidenav-item-hover-color: #1ab394; + --#{$prefix}sidenav-item-hover-bg: #f7f7fb; + --#{$prefix}sidenav-item-active-color: #1ab394; + --#{$prefix}sidenav-item-active-bg: #f7f7fb; + } + + // Background Gray left-sidebar + &[data-menu-color="gray"] { + --#{$prefix}sidenav-bg: #f1f2f7; + --#{$prefix}sidenav-border-color: #e7e9eb; + --#{$prefix}sidenav-item-color: #{$gray-700}; + --#{$prefix}sidenav-item-hover-color: #1ab394; + --#{$prefix}sidenav-item-hover-bg: #f4f0ff; + --#{$prefix}sidenav-item-active-color: #212b29; + --#{$prefix}sidenav-item-active-bg: #e8e8ed; + } + + // Dark Left Sidebar + &[data-menu-color="dark"] { + --#{$prefix}sidenav-bg: #1b2e4a; + --#{$prefix}sidenav-border-color: #1b2e4a; + --#{$prefix}sidenav-item-color: #8495ab; + --#{$prefix}sidenav-item-hover-color: #bccee4; + --#{$prefix}sidenav-item-hover-bg: #2f3742; + --#{$prefix}sidenav-item-active-color: #ced6df; + --#{$prefix}sidenav-item-active-bg: #243754; + } + + // Gradient Menu + &[data-menu-color="gradient"] { + --#{$prefix}sidenav-bg: #{linear-gradient(135deg, #1e4258, #313144)}; + --#{$prefix}sidenav-border-color: null; + --#{$prefix}sidenav-item-color: #799cb7; + --#{$prefix}sidenav-item-hover-color: #bccee4; + --#{$prefix}sidenav-item-hover-bg: #2f3742; + --#{$prefix}sidenav-item-active-color: #cfdff1; + --#{$prefix}sidenav-item-active-bg: #2f4358; + } + + // Image Menu + &[data-menu-color="image"] { + --#{$prefix}sidenav-bg: #{linear-gradient(to bottom right, rgba(16,16,30,0.85), #2f434e), url('../../images/sidenav-bg.jpg') center/cover no-repeat}; + --#{$prefix}sidenav-border-color: null; + --#{$prefix}sidenav-item-color: #799cb7; + --#{$prefix}sidenav-item-hover-color: #bccee4; + --#{$prefix}sidenav-item-hover-bg: #253542; + --#{$prefix}sidenav-item-active-color: #cfdff1; + --#{$prefix}sidenav-item-active-bg: #253542; + } + + // Dark Mode + &[data-bs-theme="dark"][data-menu-color="dark"], + &[data-bs-theme="dark"][data-menu-color="light"], + &[data-bs-theme="dark"][data-menu-color="light"] { + --#{$prefix}sidenav-bg: #1e1f27; + --#{$prefix}sidenav-border-color: #2c2d38; + --#{$prefix}sidenav-item-color: #8495ab; + --#{$prefix}sidenav-item-hover-color: #bccee4; + --#{$prefix}sidenav-item-hover-bg: #2f3742; + --#{$prefix}sidenav-item-active-color: #ced6df; + --#{$prefix}sidenav-item-active-bg: #22232c; + } + + // Light Topbar + &[data-topbar-color="light"] { + --#{$prefix}topbar-bg: #ffffff; + --#{$prefix}topbar-item-color: #{$gray-700}; + --#{$prefix}topbar-item-hover-color: #1ab394; + --#{$prefix}topbar-search-bg: transparent; + --#{$prefix}topbar-search-border: #e7e9eb; + } + + // Gray Topbar + &[data-topbar-color="gray"] { + --#{$prefix}topbar-bg: #f1f2f7; + --#{$prefix}topbar-item-color: #{$gray-700}; + --#{$prefix}topbar-item-hover-color: #1ab394; + --#{$prefix}topbar-search-bg: #e8e9ef; + --#{$prefix}topbar-search-border: #e8e9ef; + } + + // Dark Topbar + &[data-topbar-color="dark"] { + --#{$prefix}topbar-bg: #1b2e4a; + --#{$prefix}topbar-item-color: #adb5bf; + --#{$prefix}topbar-item-hover-color: #e0eeff; + --#{$prefix}topbar-search-bg: #32435c; + --#{$prefix}topbar-search-border: #32435c; + } + + // Gradient Topbar + &[data-topbar-color="gradient"] { + --#{$prefix}topbar-bg: #{linear-gradient(to bottom, #1e4258, #313144)}; + --#{$prefix}topbar-item-color: rgba(255, 255, 255, 0.7); + --#{$prefix}topbar-item-hover-color: #ffffff; + --#{$prefix}topbar-search-bg: rgba(255, 255, 255, 0.1); + --#{$prefix}topbar-search-border: rgba(255, 255, 255, 0.1); + } + + // Topbar (Dark Mode) + &[data-bs-theme="dark"][data-topbar-color="dark"], + &[data-bs-theme="dark"][data-topbar-color="light"], + &[data-bs-theme="dark"][data-topbar-color="gray"] { + --#{$prefix}topbar-bg: #252630; + --#{$prefix}topbar-item-color: #adb5bf; + --#{$prefix}topbar-item-hover-color: #e0eeff; + --#{$prefix}topbar-search-bg: #2d2e3c; + --#{$prefix}topbar-search-border: #2d2e3c; + } + + @each $name, $value in $theme-flat-colors { + --#{$prefix}#{$name}: #{$value}; + } + + @each $name, $value in $theme-flat-colors { + --#{$prefix}#{$name}-rgb: #{to-rgb($value)}; + } + + @each $name, $value in $theme-flat-colors { + --#{$prefix}#{$name}-bg-subtle: #{rgba($value, 0.15)}; + } + + @each $name, $value in $theme-flat-colors { + --#{$prefix}#{$name}-border-subtle: #{rgba($value, 0.3)}; + } + + @each $name, $value in $theme-flat-colors { + --#{$prefix}#{$name}-text-emphasis: #{shade-color($value, 25%)}; + } + } + + @if $enable-dark-mode { + @include color-mode(dark, true) { + &[data-skin="flat"] { + --#{$prefix}body-bg: #{#17181e}; + --#{$prefix}body-bg-rgb: #{to-rgb(#17181e)}; + + --#{$prefix}secondary-bg: #{#1b1c22}; + --#{$prefix}secondary-bg-rgb: #{to-rgb(#1b1c22)}; + + --#{$prefix}box-shadow: #{0px 0px 30px rgba(0, 0, 0, 0.3)}; + + --#{$prefix}border-color: #293036; + + --#{$prefix}chart-border-color: #242c31; + --#{$prefix}chart-gray: #40424f; + --#{$prefix}chart-gray-rgb: #{to-rgb(#40424f)}; + } + } + } +} \ No newline at end of file diff --git a/src/assets/scss/config/_theme-material.scss b/src/assets/scss/config/_theme-material.scss new file mode 100644 index 0000000..df2b3f7 --- /dev/null +++ b/src/assets/scss/config/_theme-material.scss @@ -0,0 +1,227 @@ +// +// Material Theme Mode +// + +$theme-material-colors: ( + "primary": #3475db, // slightly deeper blue + "secondary": #6c63ff, // toned-down purple + "success": #15b092, // richer green-teal + "info": #20bfc0, // softer aqua + "warning": #f7a34b, // warmer orange + "danger": #d25555, // more vivid red + "purple": #7e5fc7, // richer purple +); + +@if $theme-material ==true { + + @import url('https://fonts.googleapis.com/css2?family=Roboto:ital,wght@0,100..900;1,100..900&display=swap'); + + html[data-skin="material"] { + + --#{$prefix}font-sans-serif: "Roboto", sans-serif; + --#{$prefix}font-family-secondary: "Roboto", sans-serif; + + --#{$prefix}body-font-size: 14px; + --#{$prefix}body-bg: #f5f6f8; + --#{$prefix}secondary-bg: #fff; + + --#{$prefix}theme-card-border-width: 1px; + --#{$prefix}theme-card-border-color: transparent; + --#{$prefix}theme-card-box-shadow: 1px 0.15rem 0.5rem 0 rgba(48, 45, 59, 0.07); + --#{$prefix}box-shadow: 1px 0.1rem 0.5rem 0 rgba(48, 45, 59, 0.15); + --#{$prefix}border-radius: 3px; + + --#{$prefix}font-weight-medium: 400; + --#{$prefix}font-weight-semibold: 500; + --#{$prefix}font-weight-bold: 600; + + --#{$prefix}font-size-xxs: 11px; + --#{$prefix}font-size-xs: 12px; + --#{$prefix}font-size-base: 13px; + --#{$prefix}font-size-md: 14px; + --#{$prefix}font-size-lg: 16px; + --#{$prefix}font-size-xl: 18px; + --#{$prefix}font-size-xxl: 20px; + + // Menu items + --#{$prefix}sidenav-item-icon-size: 1.125rem; + --#{$prefix}sidenav-item-gap: 12px; + --#{$prefix}sidenav-item-padding-x: 10px; + --#{$prefix}sidenav-item-padding-y: 10px; + --#{$prefix}sidenav-item-font-size: 0.875rem; + --#{$prefix}sidenav-item-font-weight: 400; + + // Sub Menu Items + --#{$prefix}sidenav-sub-item-font-size: 0.85rem; + --#{$prefix}sidenav-sub-item-font-weight: 400; + --#{$prefix}sidenav-sub-item-gap: 4px; + --#{$prefix}sidenav-sub-item-padding-x: 10px; + --#{$prefix}sidenav-sub-item-padding-y: 7px; + + --#{$prefix}chart-primary: #3475db; + --#{$prefix}chart-primary-rgb: #{to-rgb(#3475db)}; + --#{$prefix}chart-secondary: #6c63ff; + --#{$prefix}chart-secondary-rgb: #{to-rgb(#6c63ff)}; + --#{$prefix}chart-gray: #edeff3; + --#{$prefix}chart-gray-rgb: #{to-rgb(#edeff3)}; + --#{$prefix}chart-dark: #18bb9b; + --#{$prefix}chart-dark-rgb: #{to-rgb(#18bb9b)}; + --#{$prefix}chart-border-color: #ecf4fc; + --#{$prefix}chart-title-color: #bbcae1; + + // Background Light left-sidebar + &[data-menu-color="light"] { + --#{$prefix}sidenav-bg: #{$white}; + --#{$prefix}sidenav-border-color: #{$white}; + --#{$prefix}sidenav-item-color: #{$gray-700}; + --#{$prefix}sidenav-item-hover-color: #3475db; + --#{$prefix}sidenav-item-hover-bg: #eaf2ff; + --#{$prefix}sidenav-item-active-color: #3475db; + --#{$prefix}sidenav-item-active-bg: #eaf2ff; + } + + // Background Gray left-sidebar + &[data-menu-color="gray"] { + --#{$prefix}sidenav-bg: #e9ebef; + --#{$prefix}sidenav-border-color: #e7e9eb; + --#{$prefix}sidenav-item-color: #{$gray-700}; + --#{$prefix}sidenav-item-hover-color: #3475db; + --#{$prefix}sidenav-item-hover-bg: #e8f7f4; + --#{$prefix}sidenav-item-active-color: #212b29; + --#{$prefix}sidenav-item-active-bg: #e8e8ed; + } + + // Dark Left Sidebar + &[data-menu-color="dark"] { + --#{$prefix}sidenav-bg: #28293c; + --#{$prefix}sidenav-border-color: #28293c; + --#{$prefix}sidenav-item-color: #8495ab; + --#{$prefix}sidenav-item-hover-color: #bccee4; + --#{$prefix}sidenav-item-hover-bg: #2f3742; + --#{$prefix}sidenav-item-active-color: #ced6df; + --#{$prefix}sidenav-item-active-bg: #242534; + } + + // Gradient Menu + &[data-menu-color="gradient"] { + --#{$prefix}sidenav-bg: #{linear-gradient(135deg, #1e4258, #313144)}; + --#{$prefix}sidenav-border-color: null; + --#{$prefix}sidenav-item-color: #799cb7; + --#{$prefix}sidenav-item-hover-color: #bccee4; + --#{$prefix}sidenav-item-hover-bg: #2f3742; + --#{$prefix}sidenav-item-active-color: #cfdff1; + --#{$prefix}sidenav-item-active-bg: #2f4358; + } + + // Image Menu + &[data-menu-color="image"] { + --#{$prefix}sidenav-bg: #{linear-gradient(to bottom right, rgba(16,16,30,0.85), #2f434e), url('../../images/sidenav-bg.jpg') center/cover no-repeat}; + --#{$prefix}sidenav-border-color: null; + --#{$prefix}sidenav-item-color: #799cb7; + --#{$prefix}sidenav-item-hover-color: #bccee4; + --#{$prefix}sidenav-item-hover-bg: #2f3742; + --#{$prefix}sidenav-item-active-color: #cfdff1; + --#{$prefix}sidenav-item-active-bg: #1e3447; + } + + // Dark Mode + &[data-bs-theme="dark"][data-menu-color="dark"], + &[data-bs-theme="dark"][data-menu-color="gray"], + &[data-bs-theme="dark"][data-menu-color="light"] { + --#{$prefix}sidenav-bg: #1e1f27; + --#{$prefix}sidenav-border-color: #2c2d38; + --#{$prefix}sidenav-item-color: #8495ab; + --#{$prefix}sidenav-item-hover-color: #bccee4; + --#{$prefix}sidenav-item-hover-bg: #2f3742; + --#{$prefix}sidenav-item-active-color: #ced6df; + --#{$prefix}sidenav-item-active-bg: #22232c; + } + + // Light Topbar + &[data-topbar-color="light"] { + --#{$prefix}topbar-bg: #ffffff; + --#{$prefix}topbar-item-color: #{$gray-700}; + --#{$prefix}topbar-item-hover-color: #3475db; + --#{$prefix}topbar-search-bg: transparent; + --#{$prefix}topbar-search-border: #e7e9eb; + } + + // Gray Topbar + &[data-topbar-color="gray"] { + --#{$prefix}topbar-bg: #e9ebef; + --#{$prefix}topbar-item-color: #{$gray-700}; + --#{$prefix}topbar-item-hover-color: #3475db; + --#{$prefix}topbar-search-bg: #e8e9ef; + --#{$prefix}topbar-search-border: #e8e9ef; + } + + // Dark Topbar + &[data-topbar-color="dark"] { + --#{$prefix}topbar-bg: #3c4752; + --#{$prefix}topbar-item-color: #e9ecf1; + --#{$prefix}topbar-item-hover-color: #e0eeff; + --#{$prefix}topbar-search-bg: #475460; + --#{$prefix}topbar-search-border: #475460; + } + + // Gradient Topbar + &[data-topbar-color="gradient"] { + --#{$prefix}topbar-bg: #{linear-gradient(to bottom, #1e4258, #313144)}; + --#{$prefix}topbar-item-color: rgba(255, 255, 255, 0.7); + --#{$prefix}topbar-item-hover-color: #ffffff; + --#{$prefix}topbar-search-bg: rgba(255, 255, 255, 0.1); + --#{$prefix}topbar-search-border: rgba(255, 255, 255, 0.1); + } + + // Topbar (Dark Mode) + &[data-bs-theme="dark"][data-topbar-color="dark"], + &[data-bs-theme="dark"][data-topbar-color="light"], + &[data-bs-theme="dark"][data-topbar-color="gray"] { + --#{$prefix}topbar-bg: #252630; + --#{$prefix}topbar-item-color: #adb5bf; + --#{$prefix}topbar-item-hover-color: #e0eeff; + --#{$prefix}topbar-search-bg: #2d2e3c; + --#{$prefix}topbar-search-border: #2d2e3c; + } + + @each $name, $value in $theme-material-colors { + --#{$prefix}#{$name}: #{$value}; + } + + @each $name, $value in $theme-material-colors { + --#{$prefix}#{$name}-rgb: #{to-rgb($value)}; + } + + @each $name, $value in $theme-material-colors { + --#{$prefix}#{$name}-bg-subtle: #{rgba($value, 0.15)}; + } + + @each $name, $value in $theme-material-colors { + --#{$prefix}#{$name}-border-subtle: #{rgba($value, 0.3)}; + } + + @each $name, $value in $theme-material-colors { + --#{$prefix}#{$name}-text-emphasis: #{shade-color($value, 25%)}; + } + } + + @if $enable-dark-mode { + @include color-mode(dark, true) { + &[data-skin="material"] { + --#{$prefix}body-bg: #{#17181e}; + --#{$prefix}body-bg-rgb: #{to-rgb(#17181e)}; + + --#{$prefix}secondary-bg: #{#1b1c22}; + --#{$prefix}secondary-bg-rgb: #{to-rgb(#1b1c22)}; + + --#{$prefix}box-shadow: #{0px 0px 30px rgba(0, 0, 0, 0.3)}; + + --#{$prefix}theme-card-border-color: #293036; + + --#{$prefix}chart-border-color: #242c31; + --#{$prefix}chart-gray: #40424f; + --#{$prefix}chart-gray-rgb: #{to-rgb(#40424f)}; + } + } + } +} \ No newline at end of file diff --git a/src/assets/scss/config/_theme-minimal.scss b/src/assets/scss/config/_theme-minimal.scss new file mode 100644 index 0000000..1c92539 --- /dev/null +++ b/src/assets/scss/config/_theme-minimal.scss @@ -0,0 +1,230 @@ +// +// Minimal Theme Mode +// + +$theme-minimal-colors: ( + "primary": #5a9eea, // lighter shade of blue + "secondary": #b38bfa, // softer neutral gray + "success": #63e6c9, // softer mint + "info": #8adce5, // lighter aqua + "warning": #f6b23d, // softer amber + "danger": #e03a46, // lighter muted red + "purple": #9d3cfe, // softer violet +); + +@if $theme-minimal ==true { + + @import url('https://fonts.googleapis.com/css2?family=IBM+Plex+Sans:ital,wght@0,100..700;1,100..700&display=swap'); + + html[data-skin="minimal"] { + + --#{$prefix}font-sans-serif: "IBM Plex Sans", sans-serif; + --#{$prefix}font-family-secondary: "IBM Plex Sans", sans-serif; + + --#{$prefix}body-font-size: 0.875rem; + --#{$prefix}body-bg: #ffffff; + --#{$prefix}secondary-bg: #ffffff; + + --#{$prefix}theme-card-border-width: 1px; + --#{$prefix}border-color: #edf2f9; + + --#{$prefix}font-weight-medium: 500; + --#{$prefix}font-weight-semibold: 500; + --#{$prefix}font-weight-bold: 700; + + --#{$prefix}font-size-xxs: 12px; + --#{$prefix}font-size-xs: 13px; + --#{$prefix}font-size-base: 0.875rem; + --#{$prefix}font-size-md: 15px; + --#{$prefix}font-size-lg: 16px; + --#{$prefix}font-size-xl: 18px; + --#{$prefix}font-size-xxl: 20px; + + // Menu items + --#{$prefix}sidenav-item-icon-size: 1.125rem; + --#{$prefix}sidenav-item-gap: 12px; + --#{$prefix}sidenav-item-padding-x: 10px; + --#{$prefix}sidenav-item-padding-y: 10px; + --#{$prefix}sidenav-item-font-size: 0.875rem; + --#{$prefix}sidenav-item-font-weight: 400; + + // Sub Menu Items + --#{$prefix}sidenav-sub-item-font-size: 0.875rem; + --#{$prefix}sidenav-sub-item-font-weight: 400; + --#{$prefix}sidenav-sub-item-gap: 4px; + --#{$prefix}sidenav-sub-item-padding-x: 10px; + --#{$prefix}sidenav-sub-item-padding-y: 7px; + + // Chart Colors + --#{$prefix}chart-primary: #4a90e2; + --#{$prefix}chart-primary-rgb: #{to-rgb(#4a90e2)}; + --#{$prefix}chart-secondary: #b38bfa; + --#{$prefix}chart-secondary-rgb: #{to-rgb(#b38bfa)}; + --#{$prefix}chart-gray: #c7d2fe; + --#{$prefix}chart-gray-rgb: #{to-rgb(#c7d2fe)}; + --#{$prefix}chart-dark: #7ed6df; + --#{$prefix}chart-dark-rgb: #{to-rgb(#7ed6df)}; + --#{$prefix}chart-border-color: #ecf4fc; + --#{$prefix}chart-title-color: #bbcae1; + + // Background Light left-sidebar + &[data-menu-color="light"] { + --#{$prefix}sidenav-bg: #{$white}; + --#{$prefix}sidenav-border-color: #edf2f9; + --#{$prefix}sidenav-item-color: #{$gray-700}; + --#{$prefix}sidenav-item-hover-color: #5a9eea; + --#{$prefix}sidenav-item-hover-bg: #f7f7fb; + --#{$prefix}sidenav-item-active-color: #5a9eea; + --#{$prefix}sidenav-item-active-bg: #f7f7fb; + } + + // Background Gray left-sidebar + &[data-menu-color="gray"] { + --#{$prefix}sidenav-bg: #f6f8fb; + --#{$prefix}sidenav-border-color: #e7e9eb; + --#{$prefix}sidenav-item-color: #{$gray-700}; + --#{$prefix}sidenav-item-hover-color: #5a9eea; + --#{$prefix}sidenav-item-hover-bg: #f1f0f5; + --#{$prefix}sidenav-item-active-color: #212b29; + --#{$prefix}sidenav-item-active-bg: #f1f0f5; + } + + // Dark Left Sidebar + &[data-menu-color="dark"] { + --#{$prefix}sidenav-bg: #1b2e4a; + --#{$prefix}sidenav-border-color: #1b2e4a; + --#{$prefix}sidenav-item-color: #8495ab; + --#{$prefix}sidenav-item-hover-color: #bccee4; + --#{$prefix}sidenav-item-hover-bg: #2f3742; + --#{$prefix}sidenav-item-active-color: #ced6df; + --#{$prefix}sidenav-item-active-bg: #243754; + } + + // Gradient Menu + &[data-menu-color="gradient"] { + --#{$prefix}sidenav-bg: #{linear-gradient(135deg, #1a455f, #262549)}; + --#{$prefix}sidenav-border-color: null; + --#{$prefix}sidenav-item-color: #799cb7; + --#{$prefix}sidenav-item-hover-color: #bccee4; + --#{$prefix}sidenav-item-hover-bg: #2f3742; + --#{$prefix}sidenav-item-active-color: #cfdff1; + --#{$prefix}sidenav-item-active-bg: #294461; + } + + // Image Menu + &[data-menu-color="image"] { + --#{$prefix}sidenav-bg: #{linear-gradient(to bottom right, rgba(16,16,30,0.85), #183c52), url('../../images/sidenav-bg.jpg') center/cover no-repeat}; + --#{$prefix}sidenav-border-color: null; + --#{$prefix}sidenav-item-color: #799cb7; + --#{$prefix}sidenav-item-hover-color: #bccee4; + --#{$prefix}sidenav-item-hover-bg: #2f3742; + --#{$prefix}sidenav-item-active-color: #cfdff1; + --#{$prefix}sidenav-item-active-bg: #1e3447; + } + + // Dark Left Sidebar + &[data-bs-theme="dark"][data-menu-color="dark"], + &[data-bs-theme="dark"][data-menu-color="gray"], + &[data-bs-theme="dark"][data-menu-color="light"] { + --#{$prefix}sidenav-bg: #1e1f27; + --#{$prefix}sidenav-border-color: #2c2d38; + --#{$prefix}sidenav-item-color: #8495ab; + --#{$prefix}sidenav-item-hover-color: #bccee4; + --#{$prefix}sidenav-item-hover-bg: #2f3742; + --#{$prefix}sidenav-item-active-color: #ced6df; + --#{$prefix}sidenav-item-active-bg: #22232c; + } + + // Light Topbar + &[data-topbar-color="light"] { + --#{$prefix}topbar-bg: #ffffff; + --#{$prefix}topbar-item-color: #{$gray-700}; + --#{$prefix}topbar-item-hover-color: #5a9eea; + --#{$prefix}topbar-search-bg: transparent; + --#{$prefix}topbar-search-border: #e7e9eb; + } + + // Gray Topbar + &[data-topbar-color="gray"] { + --#{$prefix}topbar-bg: #f1f2f7; + --#{$prefix}topbar-item-color: #{$gray-700}; + --#{$prefix}topbar-item-hover-color: #5a9eea; + --#{$prefix}topbar-search-bg: #e8e9ef; + --#{$prefix}topbar-search-border: #e8e9ef; + } + + // Dark Topbar + &[data-topbar-color="dark"] { + --#{$prefix}topbar-bg: #1b2e4a; + --#{$prefix}topbar-item-color: #adb5bf; + --#{$prefix}topbar-item-hover-color: #e0eeff; + --#{$prefix}topbar-search-bg: #32435c; + --#{$prefix}topbar-search-border: #32435c; + } + + // Gradient Topbar + &[data-topbar-color="gradient"] { + --#{$prefix}topbar-bg: #{linear-gradient(to bottom, #1a455f, #262549)}; + --#{$prefix}topbar-item-color: rgba(255, 255, 255, 0.7); + --#{$prefix}topbar-item-hover-color: #ffffff; + --#{$prefix}topbar-search-bg: rgba(255, 255, 255, 0.1); + --#{$prefix}topbar-search-border: rgba(255, 255, 255, 0.1); + } + + // Topbar (Dark Mode) + &[data-bs-theme="dark"][data-topbar-color="dark"], + &[data-bs-theme="dark"][data-topbar-color="light"], + &[data-bs-theme="dark"][data-topbar-color="gray"] { + --#{$prefix}topbar-bg: #252630; + --#{$prefix}topbar-item-color: #adb5bf; + --#{$prefix}topbar-item-hover-color: #e0eeff; + --#{$prefix}topbar-search-bg: #2d2e3c; + --#{$prefix}topbar-search-border: #2d2e3c; + } + + @each $name, $value in $theme-minimal-colors { + --#{$prefix}#{$name}: #{$value}; + } + + @each $name, $value in $theme-minimal-colors { + --#{$prefix}#{$name}-rgb: #{to-rgb($value)}; + } + + @each $name, $value in $theme-minimal-colors { + --#{$prefix}#{$name}-bg-subtle: #{rgba($value, 0.15)}; + } + + @each $name, $value in $theme-minimal-colors { + --#{$prefix}#{$name}-border-subtle: #{rgba($value, 0.3)}; + } + + @each $name, $value in $theme-minimal-colors { + --#{$prefix}#{$name}-text-emphasis: #{shade-color($value, 25%)}; + } + + //Custom CSS + .sidenav-menu { + box-shadow: none; + } + } + + @if $enable-dark-mode { + @include color-mode(dark, true) { + &[data-skin="minimal"] { + --#{$prefix}body-bg: #{#17181e}; + --#{$prefix}body-bg-rgb: #{to-rgb(#17181e)}; + + --#{$prefix}secondary-bg: #{#1b1c22}; + --#{$prefix}secondary-bg-rgb: #{to-rgb(#1b1c22)}; + + --#{$prefix}box-shadow: #{0px 0px 30px rgba(0, 0, 0, 0.3)}; + + --#{$prefix}border-color: #293036; + + --#{$prefix}chart-border-color: #242c31; + --#{$prefix}chart-gray: #40424f; + --#{$prefix}chart-gray-rgb: #{to-rgb(#40424f)}; + } + } + } +} \ No newline at end of file diff --git a/src/assets/scss/config/_theme-modern.scss b/src/assets/scss/config/_theme-modern.scss new file mode 100644 index 0000000..4902bd0 --- /dev/null +++ b/src/assets/scss/config/_theme-modern.scss @@ -0,0 +1,228 @@ +// +// Modern Theme Mode +// + +$theme-modern-colors: ( + "primary": #4f46e5, // Indigo — modern brand tone + "secondary": #06b6d4, // Cyan — fresh accent + "success": #16a34a, // Vibrant green + "info": #0ea5e9, // Bright blue + "warning": #f59e0b, // Warm amber + "danger": #ef4444, // Strong red + "purple": #8b5cf6, // Soft modern violet +); + + +@if $theme-modern ==true { + + @import url('https://fonts.googleapis.com/css2?family=Poppins:ital,wght@0,100;0,200;0,300;0,400;0,500;0,600;0,700;0,800;0,900;1,100;1,200;1,300;1,400;1,500;1,600;1,700;1,800;1,900&display=swap'); + + html[data-skin="modern"] { + + --#{$prefix}font-sans-serif: "Poppins", sans-serif; + --#{$prefix}font-family-secondary: "Poppins", sans-serif; + + --#{$prefix}body-font-size: 13px; + --#{$prefix}body-bg: #f7f6f7; + --#{$prefix}secondary-bg: #fff; + + --#{$prefix}theme-card-border-width: 1px; + --#{$prefix}theme-card-border-color: transparent; + --#{$prefix}theme-card-box-shadow: 0 1px 2px rgba(57, 62, 80, 0.15); + --#{$prefix}box-shadow: 0 2px 4px rgba(56, 65, 74, 0.2); + --#{$prefix}border-radius: 4px; + + --#{$prefix}font-weight-medium: 500; + --#{$prefix}font-weight-semibold: 500; + --#{$prefix}font-weight-bold: 600; + + --#{$prefix}font-size-xxs: 11px; + --#{$prefix}font-size-xs: 12px; + --#{$prefix}font-size-base: 13px; + --#{$prefix}font-size-md: 14px; + --#{$prefix}font-size-lg: 15px; + --#{$prefix}font-size-xl: 16px; + --#{$prefix}font-size-xxl: 20px; + + // Menu items + --#{$prefix}sidenav-item-icon-size: 1.125rem; + --#{$prefix}sidenav-item-gap: 12px; + --#{$prefix}sidenav-item-padding-x: 10px; + --#{$prefix}sidenav-item-padding-y: 10px; + --#{$prefix}sidenav-item-font-size: 0.8125rem; + --#{$prefix}sidenav-item-font-weight: 500; + + // Sub Menu Items + --#{$prefix}sidenav-sub-item-font-size: 0.8125rem; + --#{$prefix}sidenav-sub-item-font-weight: 500; + --#{$prefix}sidenav-sub-item-gap: 4px; + --#{$prefix}sidenav-sub-item-padding-x: 10px; + --#{$prefix}sidenav-sub-item-padding-y: 7px; + + --#{$prefix}chart-primary: #4f46e5; + --#{$prefix}chart-primary-rgb: #{to-rgb(#4f46e5)}; + --#{$prefix}chart-secondary: #06b6d4; + --#{$prefix}chart-secondary-rgb: #{to-rgb(#06b6d4)}; + --#{$prefix}chart-gray: #edeff3; + --#{$prefix}chart-gray-rgb: #{to-rgb(#edeff3)}; + --#{$prefix}chart-dark: #16a34a; + --#{$prefix}chart-dark-rgb: #{to-rgb(#16a34a)}; + --#{$prefix}chart-border-color: #ecf4fc; + --#{$prefix}chart-title-color: #bbcae1; + + // Background Light left-sidebar + &[data-menu-color="light"] { + --#{$prefix}sidenav-bg: #{$white}; + --#{$prefix}sidenav-border-color: #{$white}; + --#{$prefix}sidenav-item-color: #{$gray-700}; + --#{$prefix}sidenav-item-hover-color: #4f46e5; + --#{$prefix}sidenav-item-hover-bg: #eaf2ff; + --#{$prefix}sidenav-item-active-color: #4f46e5; + --#{$prefix}sidenav-item-active-bg: #eaf2ff; + } + + // Background Gray left-sidebar + &[data-menu-color="gray"] { + --#{$prefix}sidenav-bg: #e9ebef; + --#{$prefix}sidenav-border-color: #e7e9eb; + --#{$prefix}sidenav-item-color: #{$gray-700}; + --#{$prefix}sidenav-item-hover-color: #4f46e5; + --#{$prefix}sidenav-item-hover-bg: #e8f7f4; + --#{$prefix}sidenav-item-active-color: #212b29; + --#{$prefix}sidenav-item-active-bg: #e8e8ed; + } + + // Dark Left Sidebar + &[data-menu-color="dark"] { + --#{$prefix}sidenav-bg: #23303c; + --#{$prefix}sidenav-border-color: #23303c; + --#{$prefix}sidenav-item-color: #8495ab; + --#{$prefix}sidenav-item-hover-color: #bccee4; + --#{$prefix}sidenav-item-hover-bg: #2f3742; + --#{$prefix}sidenav-item-active-color: #ced6df; + --#{$prefix}sidenav-item-active-bg: #1c262f; + } + + // Gradient Menu + &[data-menu-color="gradient"] { + --#{$prefix}sidenav-bg: #{linear-gradient(135deg, #1e4258, #313144)}; + --#{$prefix}sidenav-border-color: null; + --#{$prefix}sidenav-item-color: #799cb7; + --#{$prefix}sidenav-item-hover-color: #bccee4; + --#{$prefix}sidenav-item-hover-bg: #2f3742; + --#{$prefix}sidenav-item-active-color: #cfdff1; + --#{$prefix}sidenav-item-active-bg: #2f4358; + } + + // Image Menu + &[data-menu-color="image"] { + --#{$prefix}sidenav-bg: #{linear-gradient(to bottom right, rgba(16,16,30,0.85), #183c52), url('../../images/sidenav-bg.jpg') center/cover no-repeat}; + --#{$prefix}sidenav-border-color: null; + --#{$prefix}sidenav-item-color: #799cb7; + --#{$prefix}sidenav-item-hover-color: #bccee4; + --#{$prefix}sidenav-item-hover-bg: #2f3742; + --#{$prefix}sidenav-item-active-color: #cfdff1; + --#{$prefix}sidenav-item-active-bg: #1e3447; + } + + // Dark Mode + &[data-bs-theme="dark"][data-menu-color="dark"], + &[data-bs-theme="dark"][data-menu-color="gray"], + &[data-bs-theme="dark"][data-menu-color="light"] { + --#{$prefix}sidenav-bg: #1e1f27; + --#{$prefix}sidenav-border-color: #2c2d38; + --#{$prefix}sidenav-item-color: #8495ab; + --#{$prefix}sidenav-item-hover-color: #bccee4; + --#{$prefix}sidenav-item-hover-bg: #2f3742; + --#{$prefix}sidenav-item-active-color: #ced6df; + --#{$prefix}sidenav-item-active-bg: #22232c; + } + + // Light Topbar + &[data-topbar-color="light"] { + --#{$prefix}topbar-bg: #ffffff; + --#{$prefix}topbar-item-color: #{$gray-700}; + --#{$prefix}topbar-item-hover-color: #4f46e5; + --#{$prefix}topbar-search-bg: transparent; + --#{$prefix}topbar-search-border: #e7e9eb; + } + + // Gray Topbar + &[data-topbar-color="gray"] { + --#{$prefix}topbar-bg: #e9ebef; + --#{$prefix}topbar-item-color: #{$gray-700}; + --#{$prefix}topbar-item-hover-color: #4f46e5; + --#{$prefix}topbar-search-bg: #e8e9ef; + --#{$prefix}topbar-search-border: #e8e9ef; + } + + // Dark Topbar + &[data-topbar-color="dark"] { + --#{$prefix}topbar-bg: #38414a; + --#{$prefix}topbar-item-color: #adb5bf; + --#{$prefix}topbar-item-hover-color: #e0eeff; + --#{$prefix}topbar-search-bg: #3f4952; + --#{$prefix}topbar-search-border: #3f4952; + } + + // Gradient Topbar + &[data-topbar-color="gradient"] { + --#{$prefix}topbar-bg: #{linear-gradient(to bottom, #1e4258, #313144)}; + --#{$prefix}topbar-item-color: rgba(255, 255, 255, 0.7); + --#{$prefix}topbar-item-hover-color: #ffffff; + --#{$prefix}topbar-search-bg: rgba(255, 255, 255, 0.1); + --#{$prefix}topbar-search-border: rgba(255, 255, 255, 0.1); + } + + // Topbar (Dark Mode) + &[data-bs-theme="dark"][data-topbar-color="dark"], + &[data-bs-theme="dark"][data-topbar-color="light"], + &[data-bs-theme="dark"][data-topbar-color="gray"] { + --#{$prefix}topbar-bg: #252630; + --#{$prefix}topbar-item-color: #adb5bf; + --#{$prefix}topbar-item-hover-color: #e0eeff; + --#{$prefix}topbar-search-bg: #2d2e3c; + --#{$prefix}topbar-search-border: #2d2e3c; + } + + @each $name, $value in $theme-modern-colors { + --#{$prefix}#{$name}: #{$value}; + } + + @each $name, $value in $theme-modern-colors { + --#{$prefix}#{$name}-rgb: #{to-rgb($value)}; + } + + @each $name, $value in $theme-modern-colors { + --#{$prefix}#{$name}-bg-subtle: #{rgba($value, 0.15)}; + } + + @each $name, $value in $theme-modern-colors { + --#{$prefix}#{$name}-border-subtle: #{rgba($value, 0.3)}; + } + + @each $name, $value in $theme-modern-colors { + --#{$prefix}#{$name}-text-emphasis: #{shade-color($value, 25%)}; + } + } + + @if $enable-dark-mode { + @include color-mode(dark, true) { + &[data-skin="modern"] { + --#{$prefix}body-bg: #{#17181e}; + --#{$prefix}body-bg-rgb: #{to-rgb(#17181e)}; + + --#{$prefix}secondary-bg: #{#1b1c22}; + --#{$prefix}secondary-bg-rgb: #{to-rgb(#1b1c22)}; + + --#{$prefix}box-shadow: #{0px 0px 30px rgba(0, 0, 0, 0.3)}; + + --#{$prefix}theme-card-border-color: #293036; + + --#{$prefix}chart-border-color: #242c31; + --#{$prefix}chart-gray: #40424f; + --#{$prefix}chart-gray-rgb: #{to-rgb(#40424f)}; + } + } + } +} \ No newline at end of file diff --git a/src/assets/scss/config/_theme-saas.scss b/src/assets/scss/config/_theme-saas.scss new file mode 100644 index 0000000..be1aaf4 --- /dev/null +++ b/src/assets/scss/config/_theme-saas.scss @@ -0,0 +1,227 @@ +// +// SaaS Theme Mode +// + +$theme-saas-colors: ( + "primary": #6366f1, // Soft indigo — calm but bold + "secondary": #0ea5e9, // Vibrant cyan accent + "success": #10b981, // Emerald green for positive actions + "info": #3b82f6, // Clear sky blue for info + "warning": #fbbf24, // Warm golden warning + "danger": #ef4444, // Strong modern red + "purple": #a855f7, // Bright purple for highlights +); + +@if $theme-saas ==true { + + @import url('https://fonts.googleapis.com/css2?family=Inter:ital,opsz,wght@0,14..32,100..900;1,14..32,100..900&display=swap'); + + html[data-skin="saas"] { + + --#{$prefix}font-sans-serif: "Inter", sans-serif; + --#{$prefix}font-family-secondary: "Inter", sans-serif; + + --#{$prefix}body-font-size: 13px; + --#{$prefix}body-bg: #f9fbfd; + --#{$prefix}secondary-bg: #fff; + + --#{$prefix}theme-card-border-width: 1px; + --#{$prefix}theme-card-box-shadow: 0 0.5rem 1.5rem rgba(18,38,36,0.03); + --#{$prefix}box-shadow: 0 0.25rem 1rem rgba(18,38,36,0.1); + --#{$prefix}border-color: #edf2f9; + + --#{$prefix}font-weight-medium: 500; + --#{$prefix}font-weight-semibold: 500; + --#{$prefix}font-weight-bold: 600; + + --#{$prefix}font-size-xxs: 11px; + --#{$prefix}font-size-xs: 12px; + --#{$prefix}font-size-base: 13px; + --#{$prefix}font-size-md: 14px; + --#{$prefix}font-size-lg: 16px; + --#{$prefix}font-size-xl: 18px; + --#{$prefix}font-size-xxl: 20px; + + // Menu items + --#{$prefix}sidenav-item-icon-size: 1.125rem; + --#{$prefix}sidenav-item-gap: 12px; + --#{$prefix}sidenav-item-padding-x: 10px; + --#{$prefix}sidenav-item-padding-y: 10px; + --#{$prefix}sidenav-item-font-size: 0.825rem; + --#{$prefix}sidenav-item-font-weight: 400; + + // Sub Menu Items + --#{$prefix}sidenav-sub-item-font-size: 0.825rem; + --#{$prefix}sidenav-sub-item-font-weight: 400; + --#{$prefix}sidenav-sub-item-gap: 4px; + --#{$prefix}sidenav-sub-item-padding-x: 10px; + --#{$prefix}sidenav-sub-item-padding-y: 7px; + + // Chart Colors + --#{$prefix}chart-primary: #10b981; + --#{$prefix}chart-primary-rgb: #{to-rgb(#10b981)}; + --#{$prefix}chart-secondary: #0ea5e9; + --#{$prefix}chart-secondary-rgb: #{to-rgb(#0ea5e9)}; + --#{$prefix}chart-gray: #edeff3; + --#{$prefix}chart-gray-rgb: #{to-rgb(#edeff3)}; + --#{$prefix}chart-dark: #fbbf24; + --#{$prefix}chart-dark-rgb: #{to-rgb(#fbbf24)}; + --#{$prefix}chart-border-color: #ecf4fc; + --#{$prefix}chart-title-color: #bbcae1; + + + // Background Light left-sidebar + &[data-menu-color="light"] { + --#{$prefix}sidenav-bg: #{$white}; + --#{$prefix}sidenav-border-color: #{$white}; + --#{$prefix}sidenav-item-color: #{$gray-700}; + --#{$prefix}sidenav-item-hover-color: #6366f1; + --#{$prefix}sidenav-item-hover-bg: #f4f0ff; + --#{$prefix}sidenav-item-active-color: #6366f1; + --#{$prefix}sidenav-item-active-bg: #f4f0ff; + } + + // Background Gray left-sidebar + &[data-menu-color="gray"] { + --#{$prefix}sidenav-bg: #f1f2f7; + --#{$prefix}sidenav-border-color: #e7e9eb; + --#{$prefix}sidenav-item-color: #{$gray-700}; + --#{$prefix}sidenav-item-hover-color: #6366f1; + --#{$prefix}sidenav-item-hover-bg: #f4f0ff; + --#{$prefix}sidenav-item-active-color: #212b29; + --#{$prefix}sidenav-item-active-bg: #e8e8ed; + } + + // Dark Left Sidebar + &[data-menu-color="dark"] { + --#{$prefix}sidenav-bg: #1b2e4a; + --#{$prefix}sidenav-border-color: #1b2e4a; + --#{$prefix}sidenav-item-color: #8495ab; + --#{$prefix}sidenav-item-hover-color: #bccee4; + --#{$prefix}sidenav-item-hover-bg: #2f3742; + --#{$prefix}sidenav-item-active-color: #ced6df; + --#{$prefix}sidenav-item-active-bg: #243754; + } + + // Gradient Menu + &[data-menu-color="gradient"] { + --#{$prefix}sidenav-bg: #{linear-gradient(135deg, #1a455f, #262549)}; + --#{$prefix}sidenav-border-color: null; + --#{$prefix}sidenav-item-color: #799cb7; + --#{$prefix}sidenav-item-hover-color: #bccee4; + --#{$prefix}sidenav-item-hover-bg: #2f3742; + --#{$prefix}sidenav-item-active-color: #cfdff1; + --#{$prefix}sidenav-item-active-bg: #294461; + } + + // Image Menu + &[data-menu-color="image"] { + --#{$prefix}sidenav-bg: #{linear-gradient(to bottom right, rgba(16,16,30,0.85), #183c52), url('../../images/sidenav-bg.jpg') center/cover no-repeat}; + --#{$prefix}sidenav-border-color: null; + --#{$prefix}sidenav-item-color: #799cb7; + --#{$prefix}sidenav-item-hover-color: #bccee4; + --#{$prefix}sidenav-item-hover-bg: #2f3742; + --#{$prefix}sidenav-item-active-color: #cfdff1; + --#{$prefix}sidenav-item-active-bg: #1e3447; + } + + // Dark Left Sidebar + &[data-bs-theme="dark"][data-menu-color="dark"], + &[data-bs-theme="dark"][data-menu-color="light"] { + --#{$prefix}sidenav-bg: #1e1f27; + --#{$prefix}sidenav-border-color: #2c2d38; + --#{$prefix}sidenav-item-color: #8495ab; + --#{$prefix}sidenav-item-hover-color: #bccee4; + --#{$prefix}sidenav-item-hover-bg: #2f3742; + --#{$prefix}sidenav-item-active-color: #ced6df; + --#{$prefix}sidenav-item-active-bg: #22232c; + } + + // Light Topbar + &[data-topbar-color="light"] { + --#{$prefix}topbar-bg: #ffffff; + --#{$prefix}topbar-item-color: #{$gray-700}; + --#{$prefix}topbar-item-hover-color: #6366f1; + --#{$prefix}topbar-search-bg: transparent; + --#{$prefix}topbar-search-border: #e7e9eb; + } + + // Gray Topbar + &[data-topbar-color="gray"] { + --#{$prefix}topbar-bg: #f1f2f7; + --#{$prefix}topbar-item-color: #{$gray-700}; + --#{$prefix}topbar-item-hover-color: #6366f1; + --#{$prefix}topbar-search-bg: #e8e9ef; + --#{$prefix}topbar-search-border: #e8e9ef; + } + + // Dark Topbar + &[data-topbar-color="dark"] { + --#{$prefix}topbar-bg: #1b2e4a; + --#{$prefix}topbar-item-color: #adb5bf; + --#{$prefix}topbar-item-hover-color: #e0eeff; + --#{$prefix}topbar-search-bg: #32435c; + --#{$prefix}topbar-search-border: #32435c; + } + + // Gradient Topbar + &[data-topbar-color="gradient"] { + --#{$prefix}topbar-bg: #{linear-gradient(to bottom, #1a455f, #262549)}; + --#{$prefix}topbar-item-color: rgba(255, 255, 255, 0.7); + --#{$prefix}topbar-item-hover-color: #ffffff; + --#{$prefix}topbar-search-bg: rgba(255, 255, 255, 0.1); + --#{$prefix}topbar-search-border: rgba(255, 255, 255, 0.1); + } + + // Topbar (Dark Mode) + &[data-bs-theme="dark"][data-topbar-color="dark"], + &[data-bs-theme="dark"][data-topbar-color="light"], + &[data-bs-theme="dark"][data-topbar-color="gray"] { + --#{$prefix}topbar-bg: #252630; + --#{$prefix}topbar-item-color: #adb5bf; + --#{$prefix}topbar-item-hover-color: #e0eeff; + --#{$prefix}topbar-search-bg: #2d2e3c; + --#{$prefix}topbar-search-border: #2d2e3c; + } + + @each $name, $value in $theme-saas-colors { + --#{$prefix}#{$name}: #{$value}; + } + + @each $name, $value in $theme-saas-colors { + --#{$prefix}#{$name}-rgb: #{to-rgb($value)}; + } + + @each $name, $value in $theme-saas-colors { + --#{$prefix}#{$name}-bg-subtle: #{rgba($value, 0.15)}; + } + + @each $name, $value in $theme-saas-colors { + --#{$prefix}#{$name}-border-subtle: #{rgba($value, 0.3)}; + } + + @each $name, $value in $theme-saas-colors { + --#{$prefix}#{$name}-text-emphasis: #{shade-color($value, 25%)}; + } + } + + @if $enable-dark-mode { + @include color-mode(dark, true) { + &[data-skin="saas"] { + --#{$prefix}body-bg: #{#17181e}; + --#{$prefix}body-bg-rgb: #{to-rgb(#17181e)}; + + --#{$prefix}secondary-bg: #{#1b1c22}; + --#{$prefix}secondary-bg-rgb: #{to-rgb(#1b1c22)}; + + --#{$prefix}box-shadow: #{0px 0px 30px rgba(0, 0, 0, 0.3)}; + + --#{$prefix}border-color: #293036; + + --#{$prefix}chart-border-color: #242c31; + --#{$prefix}chart-gray: #40424f; + --#{$prefix}chart-gray-rgb: #{to-rgb(#40424f)}; + } + } + } +} \ No newline at end of file diff --git a/src/assets/scss/pages/_authentication.scss b/src/assets/scss/pages/_authentication.scss new file mode 100644 index 0000000..f7be23e --- /dev/null +++ b/src/assets/scss/pages/_authentication.scss @@ -0,0 +1,62 @@ +// +// _authentication.scss +// + +// Authentication +.auth-box { + @extend .position-relative; + @extend .min-vh-100; + padding: 50px; + + .card-body { + padding: 50px; + } +} + +// Auth Brand Logo (Light & Dark Mode) +.auth-brand { + margin-bottom: 2rem; + + .logo-dark { + display: block; + } + + .logo-light { + display: none; + } +} + +// Auth Page Side Image +.card-side-img { + background-image: url("../../images/auth.jpg"); + background-position: center; + background-repeat: no-repeat; + background-size: cover; +} + +.auth-overlay { + background: linear-gradient(to top, #313a46, rgba(49,58,70, 0.8), rgba(49,58,70, 0.5)); +} + +// Dark mode +html[data-bs-theme="dark"] { + .auth-brand { + .logo-light { + display: block; + } + + .logo-dark { + display: none; + } + } +} + +// Responsive +@include media-breakpoint-up(md) { + .auth-box-form { + max-width: 500px; + } + .auth-sub-text { + max-width: 300px; + } +} \ No newline at end of file diff --git a/src/assets/scss/pages/_chat.scss b/src/assets/scss/pages/_chat.scss new file mode 100644 index 0000000..1a0244b --- /dev/null +++ b/src/assets/scss/pages/_chat.scss @@ -0,0 +1,21 @@ +// +// _chat.scss +// + +// Chat List +.chat-list { + .list-group-item { + padding: 12px 15px !important; + border: none; + border-radius: $border-radius; + margin-top: 0 !important; + } +} + +// Chat items +.chat-item { + .chat-message { + max-width: 400px; + font-weight: $font-weight-medium; + } +} \ No newline at end of file diff --git a/src/assets/scss/pages/_dashboard.scss b/src/assets/scss/pages/_dashboard.scss new file mode 100644 index 0000000..8e0b9ba --- /dev/null +++ b/src/assets/scss/pages/_dashboard.scss @@ -0,0 +1,227 @@ +.rapport-logo { + height: 28px !important; + width: auto !important; + max-width: 168px; + object-fit: contain; +} + +.logo-sm .rapport-logo { + height: 22px !important; + max-width: 56px; +} + +.apexcharts-legend { + display: none; +} + +#cipla_team_heat_map_table.table, +#cipla_team_heat_map_table th, +#cipla_team_heat_map_table td { + border: 5px solid white; +} + +.mlb-card { + background: #f6f2fb; + border: 0; + border-radius: 28px; + box-shadow: 0 10px 30px rgba(90, 60, 140, 0.08); + padding: 22px 22px 16px; + height: 100%; + margin-bottom: 24px; +} +.mlb-card-head { margin-bottom: 8px; } +.mlb-card-title { + font-size: 18px; + font-weight: 700; + color: #1f1f1f; + margin: 0 0 6px; + letter-spacing: -0.02em; +} +.mlb-card-meta { + display: flex; + align-items: center; + justify-content: space-between; + gap: 12px; + flex-wrap: wrap; +} +.mlb-card-date { + color: #8b8b8b; + font-size: 14px; + margin: 0; +} +.mlb-card-details { + color: #7b61c8; + font-weight: 600; + font-size: 13px; + text-decoration: none; + border: 1px solid #eadff8; + background: #fff; + border-radius: 999px; + padding: 6px 14px; + display: inline-block; + line-height: 1.2; +} +.mlb-pills { + display: flex; + justify-content: center; + gap: 10px; + margin: 16px 0 4px; + flex-wrap: wrap; +} +.mlb-pill { + border: 1px solid #ebe4f5; + background: #fff; + color: #6f6f6f; + border-radius: 999px; + padding: 6px 16px; + font-size: 13px; + font-weight: 600; + line-height: 1.2; + cursor: pointer; + font-family: inherit; +} +.mlb-pill.is-active, +.mlb-pill:hover { + background: #eadff8; + border-color: #eadff8; + color: #2b2b2b; +} +.mlb-podium { + min-height: 300px; + display: flex; + align-items: flex-end; + justify-content: center; +} +.mlb-podium-row { + width: 100%; + display: flex; + align-items: flex-end; + justify-content: center; + gap: 12px; + padding: 8px 4px 4px; +} +.mlb-col { + width: 96px; + display: flex; + flex-direction: column; + align-items: center; + text-align: center; +} +.mlb-col.is-first { width: 112px; } +.mlb-col.is-empty .mlb-name, +.mlb-col.is-empty .mlb-bar { color: #9a9a9a; } +.mlb-avatar-wrap { + position: relative; + margin-bottom: 10px; +} +.mlb-crown { + position: absolute; + top: -22px; + left: 50%; + transform: translateX(-50%); + z-index: 2; +} +.mlb-avatar { + width: 62px; + height: 62px; + border-radius: 50%; + display: flex; + align-items: center; + justify-content: center; + font-weight: 800; + font-size: 18px; + overflow: hidden; + background: #eee; +} +.mlb-col.is-first .mlb-avatar { + width: 80px; + height: 80px; + font-size: 24px; +} +.mlb-avatar img { + width: 100%; + height: 100%; + object-fit: cover; +} +.mlb-avatar.rank-1 { + background: #f4e3b8; + color: #222; + box-shadow: 0 10px 24px rgba(243, 211, 74, 0.45); +} +.mlb-avatar.rank-2 { + background: #1d3557; + color: #fff; +} +.mlb-avatar.rank-3 { + background: #ff4f9a; + color: #111; +} +.mlb-badge { + position: absolute; + left: 50%; + bottom: -8px; + transform: translateX(-50%); + width: 24px; + height: 24px; + border-radius: 50%; + color: #fff; + font-size: 12px; + font-weight: 700; + display: flex; + align-items: center; + justify-content: center; + border: 2px solid #f6f2fb; +} +.mlb-badge.rank-1 { background: #e3b341; } +.mlb-badge.rank-2 { background: #9aa0ad; } +.mlb-badge.rank-3 { background: #e0893a; } +.mlb-name { + font-size: 13px; + font-weight: 600; + color: #4b4b4b; + margin: 6px 0 10px; + min-height: 18px; + max-width: 130px; + white-space: nowrap; + overflow: hidden; + text-overflow: ellipsis; +} +.mlb-bar { + width: 100%; + border-radius: 14px; + display: flex; + align-items: center; + justify-content: center; + font-size: 22px; + font-weight: 800; + color: #4a4a4a; + box-shadow: 0 12px 18px rgba(0, 0, 0, 0.08); +} +.mlb-bar.rank-1 { height: 128px; background: #f3d34a; } +.mlb-bar.rank-2 { height: 92px; background: #d5d8e0; } +.mlb-bar.rank-3 { height: 68px; background: #ff8b3d; } +.mlb-empty { + width: 100%; + text-align: center; + color: #8b8b8b; + padding: 48px 12px; +} + +.metric-report-page .breadcrumb-item .btn-link { + text-decoration: none; +} + +.action-card { + cursor: pointer; +} + +.quick-action-modal .modal-content { + height: 90vh; +} + +.quick-action-iframe { + width: 100%; + height: 100%; + min-height: 70vh; + border: 0; +} diff --git a/src/assets/scss/pages/_email.scss b/src/assets/scss/pages/_email.scss new file mode 100644 index 0000000..889fb33 --- /dev/null +++ b/src/assets/scss/pages/_email.scss @@ -0,0 +1,25 @@ +// +// _email.scss +// + +// Email Message Only +.email-app { + .mark-as-read { + opacity: 0.75; + } +} + +// Email Editor Style +.email-editor { + + .ql-container { + max-height: 350px; + overflow-y: auto; + } + + .ql-toolbar.ql-snow, + .ql-container.ql-snow { + border-width: 0 0 1px 0; + border-radius: 0; + } +} \ No newline at end of file diff --git a/src/assets/scss/pages/_error.scss b/src/assets/scss/pages/_error.scss new file mode 100644 index 0000000..d28ae82 --- /dev/null +++ b/src/assets/scss/pages/_error.scss @@ -0,0 +1,11 @@ +// +// _error.scss +// + +// Gradient Text +.error-text-alt { + background: linear-gradient(90deg, $primary 0%, $danger 100%); + background-clip: text; + -webkit-text-fill-color: transparent; + font-weight: $font-weight-bold; +} \ No newline at end of file diff --git a/src/assets/scss/pages/_kanban-board.scss b/src/assets/scss/pages/_kanban-board.scss new file mode 100644 index 0000000..cfe5776 --- /dev/null +++ b/src/assets/scss/pages/_kanban-board.scss @@ -0,0 +1,63 @@ +// +// _kanban-board.scss +// + +.kanban-app { + .kanban-content { + display: flex; + align-items: stretch; + overflow-x: auto; + padding-bottom: 1rem; + + .kanban-board { + min-width: 320px; + width: 320px; + flex-shrink: 0; + border-right: 1px dashed var(--#{$prefix}border-color); + display: flex; + flex-direction: column; + overflow: hidden; + } + + .kanban-board-group { + flex: 1 1 auto; + height: calc(100vh - 347px); // Adjust based on header/filter height + padding: 0 1rem; + overflow-x: hidden; + + ul { + list-style: none; + padding: 0; + margin: 0; + } + } + } + + @include media-breakpoint-down(lg) { + + .kanban-content { + + .kanban-board-group { + height: auto; + overflow-y: visible; + height: calc(100vh - 300px); // Adjust based on header/filter height + } + } + } +} + +// Sortable Plguins overwrite +.sortable-fallback { + opacity: 1 !important; + + .card { + transform: rotate(10deg); + opacity: 1 !important; + } +} + +.sortable-item-ghost { + .card { + background-color: rgba(var(--#{$prefix}warning-rgb), 0.1) !important; + } +} \ No newline at end of file diff --git a/src/assets/scss/pages/_landing.scss b/src/assets/scss/pages/_landing.scss new file mode 100644 index 0000000..45e6d8c --- /dev/null +++ b/src/assets/scss/pages/_landing.scss @@ -0,0 +1,74 @@ +// +// _landing.scss +// + +// Section Size +.section-custom { + padding: 3rem 1rem; +} + +@include media-breakpoint-up(lg) { + .section-custom { + padding: 6.5rem 0; + } +} + +// Navbar +#landing-navbar { + position: relative; + width: 100%; + transition: transform 0.3s ease; + background-color: #313a46; + + .nav-link { + color: var(--#{$prefix}secondary-color); + + &:hover, + &.active { + color: $white; + } + } + + &.top-fixed { + position: fixed; + top: 0; + left: 0; + right: 0; + z-index: 1000; + } + &.top-fixed.top-hide { + transform: translateY(-101%); + } + &.top-fixed.top-scroll-up { + transform: translateY(0); + box-shadow: $box-shadow-sm; + } +} + +// CTA Section +.section-cta { + min-height: 350px; +} + +// Footer +.section-footer { + background-color: #1e1f27; + color: #858f9b; + + .nav-link { + color: inherit; + font-size: 14px; + font-weight: $font-weight-medium; + + &:hover { + color: $primary; + } + } +} + +// Dark Mode +html[data-bs-theme="dark"] { + .top-alert { + background-color: var(--#{$prefix}primary); + } +} \ No newline at end of file diff --git a/src/assets/scss/pages/_outlook.scss b/src/assets/scss/pages/_outlook.scss new file mode 100644 index 0000000..60faddd --- /dev/null +++ b/src/assets/scss/pages/_outlook.scss @@ -0,0 +1,69 @@ +// +// _outlook.scss +// + +.outlook-box { + display: flex; + height: calc(100vh - var(--#{$prefix}topbar-height) - 40px - 42px - calc($spacer * 2.75)); + + .outlook-list { + .nav-link.active { + background-color: rgba(var(--#{$prefix}light-rgb), 0.45); + } + } + + html[data-layout="topnav"] & { + margin-bottom: 30px; + + &.outlook-box-full { + margin: 0 0 30px 0; + } + } +} + +.outlook-left-menu { + width: 280px; + + &.outlook-left-menu-sm { + width: 225px; + } + + &.outlook-left-menu-md { + width: 250px; + } + + &.outlook-left-menu-lg { + width: 320px; + } +} + +@include media-breakpoint-down(lg) { + .outlook-box { + position: relative; + overflow: hidden; + + .offcanvas-lg { + position: absolute; + } + + .offcanvas-backdrop { + position: absolute; + } + } + + .outlook-left-menu { + max-width: 280px; + + &.outlook-left-menu-sm { + max-width: 225px; + } + + &.outlook-left-menu-md { + max-width: 250px; + } + + &.outlook-left-menu-lg { + max-width: 320px; + } + } +} \ No newline at end of file diff --git a/src/assets/scss/pages/_sitemap.scss b/src/assets/scss/pages/_sitemap.scss new file mode 100644 index 0000000..fef81b0 --- /dev/null +++ b/src/assets/scss/pages/_sitemap.scss @@ -0,0 +1,61 @@ +// +// _sitemap.scss +// + +.sitemap-list { + list-style: none; + padding-left: 0; + position: relative; + margin: 0; + + ul { + list-style: none; + padding-left: 2rem; + position: relative; + margin: 0; + padding-bottom: 0.75rem; + + ul { + padding-bottom: 0; + } + } + + li { + position: relative; + + a { + line-height: 1.5rem; + } + + &::before { + content: ""; + position: absolute; + top: 0; + left: 0.5rem; + bottom: 0; + width: 0; + border-left: 1px dashed var(--#{$prefix}border-color); + } + + &::after { + content: ""; + position: absolute; + top: 0.75rem; + left: 0.5rem; + width: 1rem; + border-top: 1px dashed var(--#{$prefix}border-color); + } + + &:last-child::before { + height: 0.75rem; + } + + >span, + >a { + display: inline-block; + position: relative; + z-index: 1; + padding-left: 2rem; + } + } +} \ No newline at end of file diff --git a/src/assets/scss/pages/_timeline.scss b/src/assets/scss/pages/_timeline.scss new file mode 100644 index 0000000..e510268 --- /dev/null +++ b/src/assets/scss/pages/_timeline.scss @@ -0,0 +1,84 @@ +// +// timeline.scss +// + +.timeline-item { + position: relative; + align-items: flex-start; + + &:not(:last-of-type) { + .timeline-content { + &::before { + content: ""; + position: absolute; + top: 5px; + bottom: 0; + left: -7px; + width: 1px; + border-left: 1px dashed var(--#{$prefix}border-color); + } + } + } +} + +.timeline-dot { + width: 13px; + height: 13px; + border-radius: 50%; + flex-shrink: 0; + position: relative; + z-index: 1; +} + +.timeline-time { + width: 120px; + text-align: right; +} + +.timeline-content { + flex: 1; + position: relative; +} + +.timeline-icon-based, +.timeline-icon-bordered, +.timeline-users { + .timeline-dot { + width: 30px; + height: 30px; + display: flex; + align-items: center; + justify-content: center; + } + + .timeline-item { + &:not(:last-of-type) { + .timeline-content { + &::before { + left: -16px; + border-left: 2px dashed var(--#{$prefix}border-color); + } + } + } + } +} + +.timeline-icon-bordered { + .timeline-dot { + width: 31px; + height: 31px; + background-color: $card-bg; + border: 1px dashed var(--#{$prefix}border-color); + } + + .timeline-item { + &:not(:last-of-type) { + .timeline-content { + &::before { + left: -16px; + border-left: 1px dashed var(--#{$prefix}border-color); + } + } + } + } +} \ No newline at end of file diff --git a/src/assets/scss/plugins/_apexcharts.scss b/src/assets/scss/plugins/_apexcharts.scss new file mode 100644 index 0000000..a35d33d --- /dev/null +++ b/src/assets/scss/plugins/_apexcharts.scss @@ -0,0 +1,192 @@ +// +// apexcharts.scss +// + +.apex-charts { + min-height: 10px !important; + + .apexcharts-canvas { + margin: 0 auto; + } +} + +.widget-chart { + .apexcharts-canvas { + margin: 0 auto; + } +} + +.apexcharts-tooltip-title, +.apex-charts text, +.apexcharts-tooltip *, +.apexcharts-tooltip-text, +.apexcharts-xaxistooltip-text, +.apexcharts-datalabels text, +.apexcharts-legend-text, +.apexcharts-title-text, +.apexcharts-subtitle-text, +.apexcharts-yaxis text, +.apexcharts-xaxis text { + font-family: $font-family-base !important; +} + +.apexcharts-tooltip { + border: 1px solid var(--#{$prefix}border-color) !important; + background-color: var(--#{$prefix}secondary-bg) !important; + box-shadow: var(--#{$prefix}box-shadow) !important; + + .apexcharts-tooltip-title { + background-color: rgba(var(--#{$prefix}light-rgb), 0.75) !important; + border-bottom: 1px solid var(--#{$prefix}border-color) !important; + } +} + +.apexcharts-legend-series, +.apexcharts-legend-text{ + font-weight: $font-weight-semibold; +} + +.apexcharts-gridline { + pointer-events: none; + stroke-dasharray: 3; +} + +.apexcharts-xaxis-tick, +.apexcharts-gridline, +.apexcharts-grid-borders .apexcharts-gridline + line, +.apexcharts-radar-series polygon, +.apexcharts-radar-series line, +.apexcharts-pie circle, .apexcharts-pie line { + stroke: var(--#{$prefix}border-color); +} + +.apexcharts-legend-text { + color: var(--#{$prefix}tertiary-color) !important; + font-size: 13px !important; + vertical-align: middle; +} + +.apexcharts-legend-marker { + vertical-align: middle; + margin-right: 5px !important; + top: 1px !important; +} + +.apexcharts-pie-label { + fill: $white !important; +} + +.apexcharts-title-text, +.apexcharts-subtitle-text, +.apexcharts-xaxis text, +.apexcharts-yaxis text { + fill: var(--#{$prefix}secondary-color); +} + +.apexcharts-yaxis-title { + font-weight: $font-weight-medium; +} + +.apexcharts-annotation-rect { + fill: var(--#{$prefix}tertiary-bg) !important; +} + +.apexcharts-xaxis-annotations, +.apexcharts-yaxis-annotations { + rect { + stroke: none; + } +} + +.apex-toolbar { + .btn-light.active { + background-color: var(--#{$prefix}primary); + border-color: var(--#{$prefix}primary); + color: $white; + } +} + +.apexcharts-xaxistooltip, +.apexcharts-yaxistooltip { + background-color: $dropdown-bg !important; + border: $dropdown-border-width solid $dropdown-border-color !important; + box-shadow: var(--#{$prefix}box-shadow) !important; + color: $dropdown-link-color !important; +} + +.apexcharts-xaxistooltip-bottom { + &::before { + border-bottom-color: $dropdown-border-color !important; + } + + &::after { + border-bottom-color: $dropdown-bg !important; + } +} + +.apexcharts-xaxistooltip-top { + &::before { + border-top-color: $dropdown-border-color !important; + } + + &::after { + border-top-color: $dropdown-bg !important; + } +} + +.apexcharts-yaxistooltip-left { + &::before { + border-left-color: $dropdown-border-color !important; + } + + &::after { + border-left-color: $dropdown-bg !important; + } +} + +.apexcharts-datalabel-value, +.apexcharts-datalabel-label { + fill: $dropdown-link-color !important; +} + +.apexcharts-menu { + background: $dropdown-bg !important; + padding: $dropdown-padding-y $dropdown-padding-x !important; + box-shadow: var(--#{$prefix}box-shadow) !important; + border: $dropdown-border-width solid $dropdown-border-color !important; + text-align: center !important; + + .apexcharts-menu-item { + &:hover { + color: $dropdown-link-hover-color !important; + background-color: $dropdown-link-hover-bg !important; + } + } +} + +.apexcharts-track { + path { + stroke: var(--#{$prefix}tertiary-bg); + } +} + +.apexcharts-marker { + stroke: var(--#{$prefix}body-bg); +} + +.apexcharts-grid { + rect { + fill: none; + } +} + +.apex-charts .apexcharts-heatmap-series rect, +.apex-charts .apexcharts-treemap rect, +.apex-charts .apexcharts-bar-series path, +.apex-charts .apexcharts-pie-series path { + stroke: var(--#{$prefix}secondary-bg); +} + +.apexcharts-data-labels { + padding-left: 10px !important; +} \ No newline at end of file diff --git a/src/assets/scss/plugins/_calendar.scss b/src/assets/scss/plugins/_calendar.scss new file mode 100644 index 0000000..6767890 --- /dev/null +++ b/src/assets/scss/plugins/_calendar.scss @@ -0,0 +1,403 @@ +// +// calendar.scss +// + +:root { + --fc-border-color: var(--#{$prefix}border-color); + --fc-page-bg-color: var(--#{$prefix}secondary-bg); + --fc-neutral-bg-color: var(--#{$prefix}light); +} + +.fc td, +.fc th { + border: $table-border-width solid $table-border-color; +} + +.fc { + .fc-toolbar { + h2 { + font-size: 16px; + line-height: 30px; + text-transform: uppercase; + } + + @media (max-width: 767.98px) { + + .fc-left, + .fc-right, + .fc-center { + float: none; + display: block; + text-align: center; + clear: both; + margin: 10px 0; + } + + >*>* { + float: none; + } + + .fc-today-button { + display: none; + } + } + + .btn { + text-transform: capitalize; + } + } + + .fc-col-header-cell { + background-color: var(--#{$prefix}light); + } + + .fc-col-header-cell-cushion { + display: block; + padding: 8px 4px; + color: var(--#{$prefix}body-color); + } + + .fc-daygrid-day-number { + width: 24px; + height: 24px; + border-radius: 50%; + padding: 0; + display: flex; + align-items: center; + justify-content: center; + font-size: 12px; + font-weight: $font-weight-medium; + margin: 2px; + color: var(--#{$prefix}body-color); + } + + .fc-daygrid-day { + &.fc-day-today { + background-color: rgba($primary, 0.1); + + .fc-daygrid-day-number { + background-color: var(--#{$prefix}primary); + color: $white; + } + } + } + + .fc-timegrid-col { + &.fc-day-today { + background-color: rgba($primary, 0.1); + } + } + + .fc-list-event:hover td { + background: transparent; + } + + .fc-list-event-title { + a { + color: $white !important; + } + } + + .fc-col-header, + .fc-daygrid-body, + .fc-scrollgrid-sync-table { + width: 100% !important; + } + + .fc-scrollgrid-section>* { + border-left: $table-border-width solid $table-border-color; + border-top: $table-border-width solid $table-border-color; + } + + .fc-scrollgrid { + border: 0; + } + + .fc-scrollgrid-section-liquid>td { + border-top: 0; + } + + .fc-multimonth { + border-color: var(--#{$prefix}border-color); + } +} + +.fc-theme-bootstrap a:not([href]) { + color: var(--#{$prefix}body-color); +} + +.fc-event { + color: $white; +} + +.fc { + th.fc-widget-header { + background: var(--#{$prefix}gray-300); + line-height: 20px; + padding: 10px 0; + text-transform: uppercase; + font-weight: $font-weight-bold; + } +} + +.fc-unthemed { + + .fc-content, + .fc-divider, + .fc-list-heading td, + .fc-list-view, + .fc-popover, + .fc-row, + tbody, + td, + th, + thead { + border-color: $gray-300; + } + + td.fc-today { + background: lighten($gray-200, 2%); + } +} + +.fc-button { + background: var(--#{$prefix}secondary-bg); + border-color: var(--#{$prefix}border-color); + color: $gray-700; + text-transform: capitalize; + box-shadow: none; + padding: 6px 12px !important; + height: auto !important; +} + +.fc .fc-multimonth-multicol .fc-daygrid-more-link { + border: 1px solid var(--#{$prefix}primary); + display: block; + float: none; + padding: 1px; + font-weight: $font-weight-medium; +} + +.fc-state-down, +.fc-state-active, +.fc-state-disabled { + background-color: var(--#{$prefix}primary); + color: $white; + text-shadow: none; +} + +.fc-event { + border-radius: 2px; + border: none; + cursor: move; + font-size: 0.8125rem; + margin: 5px 7px; + padding: 5px 5px; + text-align: center; +} + +.fc-theme-standard { + .fc-popover { + .fc-popover-header { + padding: 8px 14px; + } + } +} + +.fc-event, +.fc-event-dot, +.fc-daygrid-dot-event.fc-event-mirror, +.fc-daygrid-dot-event:hover { + background-color: var(--#{$prefix}primary); +} + +.fc-event-title, +.fc-sticky { + font-weight: $font-weight-semibold !important; + text-overflow: ellipsis; + white-space: nowrap; +} + +.fc-daygrid-event-dot { + border-color: $white !important; + display: none; +} + +.fc-event-time { + display: none; +} + +.fc-event .fc-content { + color: $white; +} + +#external-events { + .external-event { + text-align: left; + padding: 8px 16px; + margin: 6px 0; + } +} + +.fc-day-grid-event.fc-h-event.fc-event.fc-start.fc-end.bg-dark { + .fc-content { + color: $light; + } +} + +.fc-prev-button, +.fc-next-button { + position: relative; + padding: 6px 8px !important; +} + + +.fc-toolbar-chunk { + .fc-button-group { + + .fc-button { + color: var(--#{$prefix}secondary); + background-color: rgba($secondary, 0.15); + border: none; + box-shadow: none !important; + + &:hover, + &.active { + color: $white; + background-color: var(--#{$prefix}secondary); + } + } + } + + .fc-today-button { + background-color: var(--#{$prefix}secondary) !important; + border: var(--#{$prefix}secondary); + box-shadow: none !important; + } +} + +.fc { + + .fc-button-primary:not(:disabled).fc-button-active, + .fc-button-primary:not(:disabled):active { + background-color: var(--#{$prefix}secondary) !important; + border-color: var(--#{$prefix}secondary) !important; + color: $white !important; + } + + .fc-button-primary { + text-transform: capitalize; + } +} + + +.fc-toolbar { + @media (max-width: 575.98px) { + flex-direction: column; + gap: 16px; + } +} + +#event-modal { + .event-details { + display: none; + } + + .view-event { + .event-form { + display: none; + } + + #event-category-tag { + display: none; + } + + .event-details { + display: block; + } + } +} + +.fc-daygrid-event-harness { + .fc-daygrid-event { + backdrop-filter: blur(4px); + } +} + +.fc-timegrid-event-harness { + .fc-timegrid-event { + backdrop-filter: blur(4px); + } +} + + +.fc-timegrid-slots { + table { + tr { + border-color: var(--#{$prefix}border-color) !important; + } + } +} + +.fc-list-table { + border-color: var(--#{$prefix}border-color); +} + +@each $color, +$value in $theme-colors { + .fc-daygrid-event-harness { + .fc-daygrid-event { + &.bg-#{$color}-subtle { + + .fc-event-title, + .fc-event-main { + color: $value !important; + } + } + } + } + + .fc-timegrid-event-harness { + .fc-timegrid-event { + &.bg-#{$color}-subtle { + .fc-event-title { + color: $value !important; + } + } + } + } + + .fc-list-table { + .fc-list-event { + &.bg-#{$color}-subtle { + color: $value !important; + + .fc-list-event-title { + >a { + color: $value !important; + } + } + + .fc-list-event-dot { + border-color: $value; + } + } + } + } +} + +.fc-daygrid-event-harness .fc-daygrid-event.bg-dark-subtle { + + .fc-event-main, + .fc-event-title { + color: var(--#{$prefix}dark-text-emphasis) !important; + } +} + +.fc-direction-ltr { + direction: ltr; + + .fc-toolbar>*>:not(:first-child) { + margin-left: 0.75em; + } +} \ No newline at end of file diff --git a/src/assets/scss/plugins/_choice.scss b/src/assets/scss/plugins/_choice.scss new file mode 100644 index 0000000..ac88d40 --- /dev/null +++ b/src/assets/scss/plugins/_choice.scss @@ -0,0 +1,253 @@ +// +// _choices.scss +// + +.choices { + + &[data-type*="select-one"] { + cursor: pointer; + + .choices__input { + padding: $input-padding-y $input-padding-x !important; + background-color: $input-bg; + border: 1px solid $input-border-color; + font-size: $input-font-size; + border-radius: $input-border-radius; + color: $input-color; + margin-bottom: 10px; + + &:hover { + border-color: $input-focus-border-color; + } + } + + &:after { + content: ""; + color: var(--#{$prefix}light); + background-image: url("data:image/svg+xml,%3Csvg viewBox='0 0 24 24' fill='%239ba6b7' xmlns='http://www.w3.org/2000/svg'%3E%3Cpath d='M12 16a1 1 0 0 1-.64-.23l-6-5a1 1 0 1 1 1.28-1.54L12 13.71l5.36-4.32a1 1 0 0 1 1.41.15a1 1 0 0 1-.14 1.46l-6 4.83A1 1 0 0 1 12 16'/%3E%3C/svg%3E"); + position: absolute; + border: 0; + top: 18px; + right: 12px; + left: auto; + font-size: 20px; + height: 20px; + width: 20px; + margin-top: 0; + transform: translateY(-50%); + transition: transform 0.2s ease-in-out; + pointer-events: none; + } + + &.is-open:after { + margin-top: 0; + transform: translateY(-50%) rotate(-180deg); + } + + .choices__button { + right: 20px; + } + } + + // data-type = select- multiple & text + &[data-type*="select-multiple"], + &[data-type*="text"] { + .choices__inner { + cursor: text; + padding: $input-padding-y * 0.5 $input-padding-x * 0.5 !important; + } + + .choices__button { + border-left: 1px solid rgba($white, 0.5); + border-right: 0; + } + + .choices__list--dropdown { + padding-bottom: 10px; + + .choices__list { + margin-bottom: 0; + } + } + } + + &[data-type*="select-multiple"] { + .choices__input { + padding-top: 3px; + } + } +} + +// Select Light +.input-light { + .choices__inner { + background-color: var(--#{$prefix}light); + border: none; + } +} + +.choices__inner { + padding: $input-padding-y $input-padding-x !important; + vertical-align: middle; + background-color: $form-select-bg; + border: $form-select-border-width solid $form-select-border-color; + border-radius: $form-select-border-radius !important; + font-size: $input-font-size; + min-height: auto; + + &:hover { + border-color: $input-focus-border-color; + } + + .choices__list--single { + padding: 0 !important; + } +} + +.is-focused, +.is-open { + .choices__inner { + border-color: $input-focus-border-color; + } +} + +.choices__list--multiple { + .choices__item { + vertical-align: initial; + border-radius: 7px; + padding: 2px 7px; + font-size: 11px; + font-weight: $font-weight-normal; + margin: 2px 5px 2px 0; + background-color: var(--#{$prefix}primary); + border: 1px solid var(--#{$prefix}primary); + color: $white; + box-shadow: $box-shadow-sm; + + &.is-highlighted { + background-color: var(--#{$prefix}primary); + border: 1px solid var(--#{$prefix}primary); + } + } +} + +.is-disabled { + .choices__list--multiple { + .choices__item { + background-color: var(--#{$prefix}secondary); + border: 1px solid var(--#{$prefix}secondary); + } + } +} + +.choices__list--dropdown { + padding: 10px 10px 20px 10px; + background-color: $card-bg !important; + border: 1px solid var(--#{$prefix}border-color) !important; + box-shadow: $dropdown-box-shadow; + border-radius: $dropdown-border-radius; + animation-name: DropDownSlideUp; + animation-duration: 0.3s; + animation-fill-mode: both; + will-change: transform; + + &.is-active { + animation-name: DropDownSlideUp; + } + + .choices__item--selectable.is-highlighted { + background-color: $dropdown-link-hover-bg !important; + } + + .choices__list { + margin: 0 -10px -16px; + + &::-webkit-scrollbar { + -webkit-appearance: none; + } + + &::-webkit-scrollbar:vertical { + width: 12px; + margin-right: 15px; + } + + &::-webkit-scrollbar:horizontal { + height: 12px; + } + + &::-webkit-scrollbar-thumb { + background-color: rgba(var(--#{$prefix}dark-rgb), 0.1); + border-radius: 10px; + border: 2px solid $card-bg; + } + + &::-webkit-scrollbar-track { + border-radius: 10px; + background-color: $card-bg; + } + } + + .has-no-results { + font-style: italic; + font-weight: $font-weight-medium; + } + + .choices__item--selectable:after { + display: none; + } +} + +.choices__list--dropdown { + .choices__list { + max-height: 300px; + } + + .choices__item { + font-size: $dropdown-font-size !important; + padding: $dropdown-item-padding-y $dropdown-item-padding-x $dropdown-item-padding-y 16px !important; + } +} + +.choices__heading { + font-weight: $font-weight-semibold; + padding: 10px 16px; + border-bottom: 1px solid var(--#{$prefix}border-color); + color: $text-muted; +} + +.choices__input { + background-color: $input-bg; + color: $input-color; + font-size: $input-font-size; + margin-bottom: 0; + padding: 2px 0 2px 2px; + + &::placeholder { + color: $input-placeholder-color; + } +} + +.choices__placeholder { + color: $input-placeholder-color; + opacity: 1; +} + +.choices.is-disabled .choices__inner, .choices.is-disabled .choices__input { + background-color: var(--#{$prefix}tertiary-bg); +} + +[data-bs-theme="dark"] { + .choices[data-type*="select-one"] { + .choices__button { + filter: $btn-close-white-filter; + } + } + + .choices { + &[data-type*="select-one"] { + &:after { + background-image: url("data:image/svg+xml,%3Csvg viewBox='0 0 24 24' fill='%238391a2' xmlns='http://www.w3.org/2000/svg'%3E%3Cpath d='M12 16a1 1 0 0 1-.64-.23l-6-5a1 1 0 1 1 1.28-1.54L12 13.71l5.36-4.32a1 1 0 0 1 1.41.15a1 1 0 0 1-.14 1.46l-6 4.83A1 1 0 0 1 12 16'/%3E%3C/svg%3E"); + } + } + } +} \ No newline at end of file diff --git a/src/assets/scss/plugins/_colorpicker.scss b/src/assets/scss/plugins/_colorpicker.scss new file mode 100644 index 0000000..ace9245 --- /dev/null +++ b/src/assets/scss/plugins/_colorpicker.scss @@ -0,0 +1,77 @@ +// +// _colorpicker.scss +// + +.pcr-app { + background: var(--#{$prefix}secondary-bg); + box-shadow: var(--#{$prefix}box-shadow); + border-radius: 4px; + border: 1px solid var(--#{$prefix}border-color); + + .pcr-interaction { + .pcr-type.active { + background: var(--#{$prefix}primary); + } + + .pcr-result { + background-color: var(--#{$prefix}secondary-bg); + color: var(--#{$prefix}body-color); + border: 1px solid var(--#{$prefix}border-color); + border-radius: .25rem + } + + input { + background-color: var(--#{$prefix}light); + border-radius: 0.25rem !important; + + &:focus { + box-shadow: none; + background-color: var(--#{$prefix}secondary-bg); + border-color: var(--#{$prefix}primary-border-subtle); + } + } + + .pcr-save { + background: var(--#{$prefix}success) !important; + } + + .pcr-clear, + .pcr-cancel { + background: var(--#{$prefix}danger) !important; + } + } +} + +.pickr { + .pcr-button { + height: 36px; + width: 150px; + border-radius: .25rem; + + &::after, + &::before { + border-radius: .25rem + } + } +} + +.pcr-app[data-theme=classic] { + .pcr-selection { + .pcr-color-preview { + margin-right: .75em; + margin-left: 0 + } + + .pcr-color-chooser, + .pcr-color-opacity { + margin-left: .75em; + margin-right: 0 + } + } +} + +.pcr-app[data-theme=monolith] { + .pcr-result { + min-width: 100% + } +} \ No newline at end of file diff --git a/src/assets/scss/plugins/_datatables.scss b/src/assets/scss/plugins/_datatables.scss new file mode 100644 index 0000000..ca2b03f --- /dev/null +++ b/src/assets/scss/plugins/_datatables.scss @@ -0,0 +1,356 @@ +// +// _datatables.scss +// + +div.dt-container { + margin-top: -0.625rem; + + div.dt-length select { + width: auto; + display: inline-block; + margin-right: .5em; + } + + div.dt-search { + text-align: right; + + input { + margin-left: .5em; + display: inline-block; + width: auto; + } + } + + div.dt-layout-table > div { + display: block !important; + } + + div.dt-layout-full { + width: 100%; + } +} + +select.dt-input { + @extend .form-select; + @extend .form-select-sm; +} + +[type="search"].dt-input { + @extend .form-control; + @extend .form-control-sm; +} + +.dt-layout-row { + margin-top: 0.625rem; + display: flex; + justify-content: space-between; + align-items: center; +} + +.dt-paging { + + + .dt-paging-button { + + &.current { + z-index: 3; + color: var(--#{$prefix}pagination-active-color); + background-color: var(--#{$prefix}pagination-active-bg); + border-color: var(--#{$prefix}pagination-active-border-color); + } + } + + .pagination { + margin-bottom: 0; + padding-top: calc(var(--#{$prefix}card-spacer-y) - .625rem); + } +} + +.dt-info { + padding-top: calc(var(--#{$prefix}card-spacer-y) - .625rem); +} + +table.dataTable { + > tbody { + > tr { + .child span.dtr-title { + font-weight: $font-weight-semibold; + } + } + } +} + +// SCSS for DataTables Sorting Arrows with Tabler Icons +table.dataTable { + thead { + th { + position: relative; + cursor: pointer; + + &:after { + content: ""; + width: 1em; + height: 1em; + background-color: currentColor; + mask-image: var(--svg); + mask-repeat: no-repeat; + mask-size: 100% 100%; + --svg: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' width='24' height='24'%3E%3Cpath fill='none' stroke='black' stroke-linecap='round' stroke-linejoin='round' stroke-width='2' d='M4 4h16v2.172a2 2 0 0 1-.586 1.414L15 12v7l-6 2v-8.5L4.52 7.572A2 2 0 0 1 4 6.227z'/%3E%3C/svg%3E"); + + position: absolute; + right: $table-cell-padding-x; + bottom: 10px; + color: var(--#{$prefix}secondary-color); + font-size: 16px; + font-weight: normal; + display: none; + } + + &[aria-sort="ascending"]:after { + content: ""; + display: inline-block; + width: 1em; + height: 1em; + background-color: currentColor; + mask-image: var(--svg); + mask-repeat: no-repeat; + mask-size: 100% 100%; + --svg: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' width='24' height='24'%3E%3Cpath fill='none' stroke='black' stroke-linecap='round' stroke-linejoin='round' stroke-width='2' d='M4 6h7m-7 6h7m-7 6h9m2-9l3-3l3 3m-3-3v12'/%3E%3C/svg%3E"); + } + + &[aria-sort="descending"]:after { + content: ""; + display: inline-block; + width: 1em; + height: 1em; + background-color: currentColor; + mask-image: var(--svg); + mask-repeat: no-repeat; + mask-size: 100% 100%; + --svg: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' width='24' height='24'%3E%3Cpath fill='none' stroke='black' stroke-linecap='round' stroke-linejoin='round' stroke-width='2' d='M4 6h9m-9 6h7m-7 6h7m4-3l3 3l3-3m-3-9v12'/%3E%3C/svg%3E"); + } + + &:hover, + &.dt-ordering-asc, + &.dt-ordering-desc { + &::after { + display: block; + } + } + + &.dt-orderable-none { + cursor: default; + + &::after { + display: none; + } + } + } + } + + tbody { + + > tr.selected, + > tr > .selected { + background-color: rgba(var(--#{$prefix}warning-rgb), 0.1); + color: inherit; + + td { + background-color: rgba(var(--#{$prefix}warning-rgb), 0.1); + color: inherit; + } + } + } +} + +// Select Info +.select-info { + background-color: var(--#{$prefix}warning-bg-subtle); + padding: 3px 6px; + border-radius: 3px; + font-weight: $font-weight-semibold; + + .select-item { + margin: 0 !important; + } +} + +// Data Table copy button +div.dt-button-info { + background-color: var(--#{$prefix}primary); + border: none; + color: $white; + box-shadow: none; + border-radius: 3px; + text-align: center; + z-index: 21; + + h2 { + border-bottom: none; + background-color: rgba($white, 0.2); + color: $white; + } +} + +div.dt-scroll-body { + border-color: transparent; +} + +// Scrollbar +div.dt-scroll-body thead tr, +div.dt-scroll-body tfoot tr { + height: 0 !important; + display: none !important; +} + +.dt-column-header { + padding-right: 30px; +} + +.dt-column-title { + padding-right: 30px; +} + +.dt-child-rows-btn { + width: 1% !important; + cursor: pointer; + + .dt-column-header { + padding-right: 0; + } + + .dt-hasChild & { + + + .ti-square-rounded-plus-filled { + --svg: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' width='24' height='24'%3E%3Cpath fill='black' d='m12 2l.324.001l.318.004l.616.017l.299.013l.579.034l.553.046c4.785.464 6.732 2.411 7.196 7.196l.046.553l.034.579q.008.147.013.299l.017.616L22 12l-.005.642l-.017.616l-.013.299l-.034.579l-.046.553c-.464 4.785-2.411 6.732-7.196 7.196l-.553.046l-.579.034q-.147.008-.299.013l-.616.017L12 22l-.642-.005l-.616-.017l-.299-.013l-.579-.034l-.553-.046c-4.785-.464-6.732-2.411-7.196-7.196l-.046-.553l-.034-.579l-.013-.299l-.017-.616Q2 12.327 2 12l.001-.324l.004-.318l.017-.616l.013-.299l.034-.579l.046-.553c.464-4.785 2.411-6.732 7.196-7.196l.553-.046l.579-.034q.147-.008.299-.013l.616-.017Q11.673 2 12 2m3 9H9l-.117.007A1 1 0 0 0 9 13h6l.117-.007A1 1 0 0 0 15 11'/%3E%3C/svg%3E"); + } + } +} + +// Column Search +.column-search-input-bar { + th { + cursor: default !important; + + &::after { + content: none !important; + } + + .dt-column-header { + display: flex; + width: 100%; + padding-right: 0 !important; + } + + .dt-column-title { + padding-right: 0 !important; + } + } +} + +// checkbox-select-datatable +.checkbox-select-datatable { + .dt-column-header, + .dt-column-title { + padding-right: 0; + } +} + +// Fixed Header +table.dataTable.fixedHeader-floating, +table.dataTable.fixedHeader-locked { + background-color: var(--#{$prefix}body-bg); +} + +@media screen and (max-width: 767px) { + + div.dt-container div.dt-length, + div.dt-container div.dt-search, + div.dt-container div.dt-info, + div.dt-container div.dt-paging { + text-align: center; + } + + .dt-paging { + .pagination { + justify-content: center; + } + } + + .dt-length { + margin-bottom: 10px; + } +} + +.ti-square-rounded-plus-filled { + display: inline-block; + width: 1em; + height: 1em; + background-color: currentColor; + mask-image: var(--svg); + mask-repeat: no-repeat; + mask-size: 100% 100%; + --svg: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' width='24' height='24'%3E%3Cpath fill='black' d='m12 2l.324.001l.318.004l.616.017l.299.013l.579.034l.553.046c4.785.464 6.732 2.411 7.196 7.196l.046.553l.034.579q.008.147.013.299l.017.616L22 12l-.005.642l-.017.616l-.013.299l-.034.579l-.046.553c-.464 4.785-2.411 6.732-7.196 7.196l-.553.046l-.579.034q-.147.008-.299.013l-.616.017L12 22l-.642-.005l-.616-.017l-.299-.013l-.579-.034l-.553-.046c-4.785-.464-6.732-2.411-7.196-7.196l-.046-.553l-.034-.579l-.013-.299l-.017-.616Q2 12.327 2 12l.001-.324l.004-.318l.017-.616l.013-.299l.034-.579l.046-.553c.464-4.785 2.411-6.732 7.196-7.196l.553-.046l.579-.034q.147-.008.299-.013l.616-.017Q11.673 2 12 2m0 6a1 1 0 0 0-1 1v2H9l-.117.007A1 1 0 0 0 9 13h2v2l.007.117A1 1 0 0 0 13 15v-2h2l.117-.007A1 1 0 0 0 15 11h-2V9l-.007-.117A1 1 0 0 0 12 8'/%3E%3C/svg%3E"); +} + +.dt-button-down-arrow { + display: none !important; +} + +.dt-button-collection { + @extend .dropdown-menu; + @extend .dropdown-menu-end; +} + +.dt-select-checkbox { + th.select-checkbox { + width: 1% !important; + + .dt-column-header { + padding-right: 0 !important; + width: 1% !important; + } + + .dt-column-title { + padding-right: 0 !important; + } + } + + .select-checkbox { + width: 1% !important; + + &::before { + content: none !important; + } + + &::after { + display: inline-block; + content: ""; + flex-shrink: 0; + border-radius: .25em; + font-size: 1em; + width: 1.25em; + height: 1.25em; + margin-top: .125em; + vertical-align: top; + appearance: none; + background-color: var(--ins-secondary-bg); + background-repeat: no-repeat; + background-position: center; + background-size: contain; + border: var(--ins-border-width) solid var(--ins-border-color); + print-color-adjust: exact; + } + } + + .selected { + .select-checkbox { + &::after { + background-color: var(--ins-primary) !important; + background-image: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 20 20'%3e%3cpath fill='none' stroke='%23fff' stroke-linecap='round' stroke-linejoin='round' stroke-width='3' d='m6 10 3 3 6-6'/%3e%3c/svg%3e") !important; + border-color: var(--ins-primary) !important; + } + } + } +} \ No newline at end of file diff --git a/src/assets/scss/plugins/_daterangepicker.scss b/src/assets/scss/plugins/_daterangepicker.scss new file mode 100644 index 0000000..bffb993 --- /dev/null +++ b/src/assets/scss/plugins/_daterangepicker.scss @@ -0,0 +1,96 @@ +// +// _daterangepicker.scss +// + +.rdp-root { + --rdp-accent-color: var(--#{$prefix}primary); +} + +.rdp-caption_label { + font-size: $font-size-base; +} + +.rdp-chevron { + height: 16px; + width: 16px; +} + +.rdp-day_button { + font-size: $font-size-base; + height: 30px; + width: 30px; +} + + + +.react-datepicker-wrapper { + display: block; +} + +.react-datepicker { + font-family: $font-family-base; + border: $dropdown-border-width solid $dropdown-border-color; + box-shadow: var(--#{$prefix}box-shadow); + background-color: $dropdown-bg; +} + +.react-datepicker__header { + background-color: $dropdown-bg !important; + font-family: $font-family-base !important; + border-bottom: $dropdown-border-width solid $dropdown-border-color !important; +} + +.react-datepicker__time { + background-color: $dropdown-bg !important; + font-family: $font-family-base !important; +} + +.react-datepicker__day-name, +.react-datepicker__day, +.react-datepicker__time-name, +.react-datepicker__current-month, +.react-datepicker-time__header, +.react-datepicker-year-header, +.react-datepicker__time-list-item { + color: var(--#{$prefix}body-color); +} + +.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, +.react-datepicker__time-container .react-datepicker__time .react-datepicker__time-box ul.react-datepicker__time-list li.react-datepicker__time-list-item:hover { + background-color: rgba(var(--#{$prefix}primary-rgb), 0.15); + color: var(--#{$prefix}primary); +} + +.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 { + background-color: rgba(var(--#{$prefix}primary-rgb), 0.15) !important; + color: var(--#{$prefix}primary) !important; +} + + +.react-datepicker-popper .react-datepicker__triangle { + color: var(--#{$prefix}border-color) !important; + fill: var(--#{$prefix}border-color) !important; + stroke: var(--#{$prefix}border-color) !important; +} + +.react-datepicker__month-container + .react-datepicker__time-container { + border-left: $dropdown-border-width solid $dropdown-border-color !important; +} + +.react-datepicker__time-container .react-datepicker__time .react-datepicker__time-box ul.react-datepicker__time-list { + scrollbar-width: thin; +} \ No newline at end of file diff --git a/src/assets/scss/plugins/_dropzone.scss b/src/assets/scss/plugins/_dropzone.scss new file mode 100644 index 0000000..070cb69 --- /dev/null +++ b/src/assets/scss/plugins/_dropzone.scss @@ -0,0 +1,33 @@ +// +// _dropzone.scss +// + +.dropzone { + border: 2px dashed var(--#{$prefix}border-color); + background: $input-bg; + border-radius: 8px; + cursor: pointer; + min-height: 150px; + padding: 20px; + + .dz-message { + text-align: center; + margin: 2rem 0; + } + + &.dz-started { + .dz-message { + display: none; + } + } + + &.dropzone-compact { + min-height: 0; + padding: 0.5rem 0.75rem; + + .dz-message { + margin: 0; + text-align: left; + } + } +} diff --git a/src/assets/scss/plugins/_filepond.scss b/src/assets/scss/plugins/_filepond.scss new file mode 100644 index 0000000..3917d3e --- /dev/null +++ b/src/assets/scss/plugins/_filepond.scss @@ -0,0 +1,55 @@ +// +// _filepond.scss +// + +.filepond--root { + margin-bottom: 0 +} + +.filepond--panel-root { + border-bottom: 2px dashed var(--#{$prefix}border-color); + background: var(--#{$prefix}secondary-bg) +} + +.filepond--drop-label { + color: var(--#{$prefix}body-color); + + .filepond--label-action { + font-weight: $font-weight-medium; + } +} + +.filepond--credits { + display: none +} + +.filepond--item-panel { + background-color: var(--#{$prefix}primary) !important +} + +.filepond-uploader.two-grid .filepond--item { + width: calc(50% - .5em) +} + +.filepond-uploader.three-grid .filepond--item { + width: calc(33.3% - .5em) +} + +.filepond--root { + border: 2px dashed var(--#{$prefix}border-color); + border-bottom: 0; + border-radius: .5em; + min-height: 70px; +} + +.filepond-input-circle:not(.rounded) { + border-radius: 50% !important; + & > .filepond--panel { + border-radius: 50% !important; + } +} + +.filepond--drip { + background: transparent; +} + diff --git a/src/assets/scss/plugins/_flatpickr.scss b/src/assets/scss/plugins/_flatpickr.scss new file mode 100644 index 0000000..f1fd41f --- /dev/null +++ b/src/assets/scss/plugins/_flatpickr.scss @@ -0,0 +1,195 @@ +// +// _flatpickr.scss +// + +.flatpickr-calendar { + background: $dropdown-bg; + box-shadow: var(--#{$prefix}box-shadow); + border: 1px solid $dropdown-border-color; + font-size: $font-size-base; + + &.arrowTop { + &:before { + border-bottom-color: $dropdown-bg; + } + + &:after { + border-bottom-color: $dropdown-bg; + } + } + + &.arrowBottom { + + &:before, + &:after { + border-top-color: $dropdown-bg; + } + } + + &.open { + z-index: 9999; + } +} + +.flatpickr-current-month { + font-size: 100%; +} + +.flatpickr-day { + + &.selected, + &.startRange, + &.endRange, + &.selected.inRange, + &.startRange.inRange, + &.endRange.inRange, + &.selected:focus, + &.startRange:focus, + &.endRange:focus, + &.selected:hover, + &.startRange:hover, + &.endRange:hover, + &.selected.prevMonthDay, + &.startRange.prevMonthDay, + &.endRange.prevMonthDay, + &.selected.nextMonthDay, + &.startRange.nextMonthDay, + &.endRange.nextMonthDay { + background: var(--#{$prefix}primary); + border-color: var(--#{$prefix}primary); + } + + &.selected.startRange+.endRange:not(:nth-child(7n+1)), + &.startRange.startRange+.endRange:not(:nth-child(7n+1)), + &.endRange.startRange+.endRange:not(:nth-child(7n+1)) { + box-shadow: -10px 0 0 var(--#{$prefix}primary); + } +} + +.flatpickr-time { + + input:hover, + .flatpickr-am-pm:hover, + input:focus, + .flatpickr-am-pm:focus { + background: $input-bg; + color: $dropdown-link-active-color; + } +} + +.flatpickr-months { + .flatpickr-month { + height: 40px; + } + + .flatpickr-prev-month, + .flatpickr-next-month, + .flatpickr-month { + color: var(--#{$prefix}body-color); + fill: var(--#{$prefix}gray-500); + line-height: 16px; + } +} + +.flatpickr-weekdays { + background-color: $dropdown-link-active-bg; +} + +span.flatpickr-weekday, +.flatpickr-day, +.flatpickr-current-month input.cur-year[disabled], +.flatpickr-current-month input.cur-year[disabled]:hover, +.flatpickr-time input, +.flatpickr-time .flatpickr-time-separator, +.flatpickr-time .flatpickr-am-pm { + color: $dropdown-link-color; + fill: $dropdown-link-color; + font-weight: $font-weight-semibold; +} + +.flatpickr-current-month input.cur-year { + font-weight: $font-weight-semibold; +} + +.flatpickr-day { + + &.disabled, + &.disabled:hover, + &.prevMonthDay, + &.nextMonthDay, + &.notAllowed, + &.notAllowed.prevMonthDay, + &.notAllowed.nextMonthDay { + color: var(--#{$prefix}secondary-color); + } + + &.inRange, + &.prevMonthDay.inRange, + &.nextMonthDay.inRange, + &.today.inRange, + &.prevMonthDay.today.inRange, + &.nextMonthDay.today.inRange, + &:hover, + &.prevMonthDay:hover, + &.nextMonthDay:hover, + &:focus, + &.prevMonthDay:focus, + &.nextMonthDay:focus { + background: $dropdown-link-hover-bg; + border-color: $dropdown-link-hover-bg; + } +} + +.flatpickr-calendar.showTimeInput.hasTime .flatpickr-time { + border-top: 1px solid $dropdown-bg; +} + +.numInputWrapper:hover, +.flatpickr-current-month .flatpickr-monthDropdown-months:hover { + background-color: transparent; + color: $dropdown-link-active-color; +} + +.flatpickr-current-month .numInputWrapper { + width: 8ch; + display: inline-block; + margin-left: 10px; +} + +.flatpickr-current-month .flatpickr-monthDropdown-months, +.flatpickr-current-month .numInputWrapper { + border: 1px solid var(--#{$prefix}border-color); + border-radius: 4px; + padding: 2px 8px; + font-weight: normal; +} + +.flatpickr-day.inRange { + box-shadow: -5px 0 0 $dropdown-link-hover-bg, 5px 0 0 $dropdown-link-hover-bg; +} + +.flatpickr-day.flatpickr-disabled, +.flatpickr-day.flatpickr-disabled:hover { + color: var(--#{$prefix}secondary-color); + text-decoration: line-through; + opacity: 0.5; +} + +.flatpickr-calendar.hasTime .flatpickr-time { + border-top: var(--#{$prefix}border-color); +} + +.flatpickr-weekwrapper .flatpickr-weeks { + box-shadow: none; + +} + +.flatpickr-weekwrapper span.flatpickr-day, +.flatpickr-weekwrapper span.flatpickr-day:hover { + color: var(--#{$prefix}secondary-color); +} + +[data-inline-date=true], +[data-time-inline] { + display: none +} \ No newline at end of file diff --git a/src/assets/scss/plugins/_jvectormap.scss b/src/assets/scss/plugins/_jvectormap.scss new file mode 100644 index 0000000..ee829d3 --- /dev/null +++ b/src/assets/scss/plugins/_jvectormap.scss @@ -0,0 +1,29 @@ +// +// _jvectormap.scss +// + +.jvm-tooltip { + font-family: $font-family-base; + background-color: #223058; + font-size: $font-size-base; + padding: 4px 10px; +} + +.jvm-container { + text.jvm-marker { + fill: var(--#{$prefix}body-color); + font-family: $font-family-base; + } +} + +.jvm-zoom-btn { + background-color: #2b2c34; + height: 20px; + width: 20px; + text-align: center; + line-height: 14px; +} + +.jvm-zoom-btn.jvm-zoomin { + top: 6px; +} \ No newline at end of file diff --git a/src/assets/scss/plugins/_multiselect.scss b/src/assets/scss/plugins/_multiselect.scss new file mode 100644 index 0000000..fa58ae4 --- /dev/null +++ b/src/assets/scss/plugins/_multiselect.scss @@ -0,0 +1,59 @@ +.ms-container { + display: flex; + align-items: stretch; + gap: 0.75rem; + width: 100%; +} + +.ms-pane { + flex: 1; + min-width: 0; +} + +.ms-arrow { + display: flex; + align-items: center; + color: var(--#{$prefix}secondary-color); + font-size: 1.1rem; + user-select: none; +} + +.ms-container .custom-header { + margin-bottom: 0.35rem; +} + +.ms-container .ms-list { + list-style: none; + margin: 0; + padding: 0; + height: 220px; + overflow-y: auto; + border: 1px solid var(--#{$prefix}border-color); + border-radius: $border-radius; + background-color: var(--#{$prefix}secondary-bg); +} + +.ms-container .ms-empty { + padding: 0.5rem 0.75rem; +} + +.ms-container .ms-item { + display: block; + width: 100%; + text-align: left; + border: 0; + border-bottom: 1px solid var(--#{$prefix}border-color); + background: transparent; + color: var(--#{$prefix}secondary-color); + padding: 0.35rem 0.75rem; + font-size: 0.875rem; +} + +.ms-container .ms-item:hover { + background-color: var(--#{$prefix}primary); + color: $white; +} + +.ms-container li:last-child .ms-item { + border-bottom: 0; +} diff --git a/src/assets/scss/plugins/_noui-rangeslider.scss b/src/assets/scss/plugins/_noui-rangeslider.scss new file mode 100644 index 0000000..667f10b --- /dev/null +++ b/src/assets/scss/plugins/_noui-rangeslider.scss @@ -0,0 +1,180 @@ +// +// _noUiRangeSlider.scss +// + +.noUi-target { + box-shadow: none; + background-color: var(--#{$prefix}light); + border: none; +} + +.noUi-handle { + background: var(--#{$prefix}secondary-bg); + box-shadow: var(--#{$prefix}box-shadow-inset); + border: 1px solid var(--#{$prefix}border-color); +} + +.noUi-connect { + background: var(--#{$prefix}primary); +} + +.noUi-horizontal { + height: 8px; + + .noUi-handle { + height: 20px; + width: 20px; + border-radius: 50%; + right: -10px !important; + top: -7px; + + &::before, + &::after { + display: none; + } + + &:focus { + outline: 0; + } + } + + [data-bs-theme="dark"] &{ + .noUi-handle { + background: var(--#{$prefix}primary); + } + } +} + +[data-slider-style="line"] { + &.noUi-horizontal { + .noUi-handle { + width: 8px; + border-radius: 4px; + right: -8px !important; + background: var(--#{$prefix}primary); + box-shadow: none; + } + } +} + + +// Vertical Slider +.noUi-vertical { + width: 8px; + + .noUi-handle { + height: 20px; + width: 20px; + right: -6px; + top: -6px; + left: auto; + border-radius: 50%; + + &::before, + &::after { + display: none; + } + + &:focus { + outline: 0; + } + } + + .noUi-origin { + top: 0; + } + + [data-bs-theme="dark"] &{ + .noUi-handle { + background: var(--#{$prefix}primary); + } + } +} + +// tooltip +.noUi-tooltip { + padding: $tooltip-padding-y $tooltip-padding-x; + border-color: var(--#{$prefix}border-color); + border-radius: $tooltip-border-radius; + font-weight: $font-weight-semibold; + background-color: $card-bg; + color: var(--#{$prefix}body-color); +} + +// Marker +.noUi-marker { + background: var(--#{$prefix}light); +} + +.noUi-value-horizontal { + padding-top: 4px; + color: var(--#{$prefix}secondary-color); +} + +// rangeslider sizes +[data-slider-size="sm"] { + &.noUi-horizontal { + height: 4px; + + .noUi-handle { + width: 16px; + height: 16px; + } + } + + &[data-slider-style="line"] { + &.noUi-horizontal { + .noUi-handle { + width: 6px; + border-radius: 4px; + top: -6px !important; + right: -6px !important; + } + } + } +} + +[data-slider-size="lg"] { + &.noUi-horizontal { + height: 12px; + + .noUi-handle { + width: 24px; + height: 24px; + } + } + + &[data-slider-style="line"] { + &.noUi-horizontal { + .noUi-handle { + width: 10px; + border-radius: 4px; + right: -10px !important; + } + } + } +} + +// rangeslider color +@each $color, +$value in $theme-colors { + [data-slider-color="#{$color}"] { + .noUi-connect { + background: $value; + } + + [data-bs-theme="dark"] &{ + .noUi-handle { + background: $value; + } + } + + &[data-slider-style="line"] { + &.noUi-horizontal { + .noUi-handle { + background: $value; + } + } + } + } +} \ No newline at end of file diff --git a/src/assets/scss/plugins/_pass-bar.scss b/src/assets/scss/plugins/_pass-bar.scss new file mode 100644 index 0000000..9e8c6a7 --- /dev/null +++ b/src/assets/scss/plugins/_pass-bar.scss @@ -0,0 +1,59 @@ +// +// _pass-bar.scss +// + +.password-bar { + display: flex; + gap: 12px; + + .strong-bar { + flex: 1; + height: 6px; + border-radius: 10px; + background: var(--#{$prefix}light); + transition: background 0.3s; + + &.bar-active-1 { + background-color: $danger; + } + + &.bar-active-2 { + background-color: $warning; + } + + &.bar-active-3 { + background-color: $primary; + } + + &.bar-active-4 { + background-color: $success; + } + } +} + +// Password Box +.password-box { + p { + padding-left: 12px; + + &.valid { + color: $success; + + &::before { + position: relative; + left: -8px; + content: "✔️"; + } + } + + &.invalid { + color: $danger; + + &::before { + position: relative; + left: -8px; + content: "✖"; + } + } + } +} \ No newline at end of file diff --git a/src/assets/scss/plugins/_prismjs.scss b/src/assets/scss/plugins/_prismjs.scss new file mode 100644 index 0000000..42bb4fe --- /dev/null +++ b/src/assets/scss/plugins/_prismjs.scss @@ -0,0 +1,145 @@ +// +// _prismjs.scss +// + +:not(pre)>code[class*="language-"], +pre[class*="language-"] { + background: transparent; + scrollbar-width: thin; + overflow: hidden !important; + + &:hover { + overflow: auto !important; + } +} + +code[class*="language-"], +pre[class*="language-"] { + color: black; + background: none; + text-shadow: 0 1px white; + font-family: Consolas, Monaco, "Andale Mono", "Ubuntu Mono", monospace; + font-size: 13px; + text-align: left; + white-space: pre; + word-spacing: normal; + word-break: normal; + word-wrap: normal; + display: block; + line-height: 1.5; + tab-size: 4; + hyphens: none; +} + +pre[class*="language-"]::selection, +pre[class*="language-"] ::selection, +code[class*="language-"]::selection, +code[class*="language-"] ::selection { + text-shadow: none; + background: #b3d4fc; +} + +@media print { + + code[class*="language-"], + pre[class*="language-"] { + text-shadow: none; + } +} + +/* Code blocks */ +pre[class*="language-"] { + padding: 1em; + margin: 0; + overflow: auto; +} + +/* Inline code */ +:not(pre)>code[class*="language-"] { + padding: 0.1em; + border-radius: 0.3em; + white-space: normal; +} + +.token.comment, +.token.prolog, +.token.doctype, +.token.cdata { + color: slategray; +} + +.token.punctuation { + color: var(--#{$prefix}primary); +} + +.token.namespace { + opacity: 0.7; +} + +.token.property, +.token.tag, +.token.boolean, +.token.number, +.token.constant, +.token.symbol, +.token.deleted { + color: var(--#{$prefix}primary); +} + +.token.selector, +.token.attr-name, +.token.string, +.token.char, +.token.builtin, +.token.inserted { + color: var(--#{$prefix}success); +} + +.token.operator, +.token.entity, +.token.url, +.language-css .token.string, +.style .token.string { + color: #9a6e3a; + background: transparent; +} + +.token.atrule, +.token.attr-value, +.token.keyword { + color: $danger; +} + +.token.function, +.token.class-name { + color: #dd4a68; +} + +.token.regex, +.token.important, +.token.variable { + color: #e90; +} + +.token.important, +.token.bold { + font-weight: $font-weight-bold; +} + +.token.italic { + font-style: italic; +} + +.token.entity { + cursor: help; +} + +code[class*="language-"], +pre[class*="language-"] { + color: var(--#{$prefix}gray-600); + text-shadow: none; + + code:not(:last-of-type) { + margin-bottom: 1rem; + } +} \ No newline at end of file diff --git a/src/assets/scss/plugins/_quill-editor.scss b/src/assets/scss/plugins/_quill-editor.scss new file mode 100644 index 0000000..1b3c794 --- /dev/null +++ b/src/assets/scss/plugins/_quill-editor.scss @@ -0,0 +1,153 @@ +// +// _quill-editor.scss +// + +.ql-editor { + text-align: left; + @extend .lh-lg; + + ol, + ul { + padding-left: 1.5em; + padding-right: 0; + } + + li:not(.ql-direction-rtl)::before { + margin-left: -1.5em; + margin-right: 0.3em; + text-align: right; + } +} + +.ql-container { + font-family: $font-family-base; + + &.ql-snow { + border-color: $input-border-color; + border-radius: 0 0 $input-border-radius $input-border-radius; + min-block-size: 12rem; + } +} + +// Toolbar +.ql-toolbar { + font-family: $font-family-base !important; + + span { + outline: none !important; + color: $dropdown-link-color; + + &:hover { + color: $primary !important; + } + } + + &.ql-snow { + border-radius: $input-border-radius $input-border-radius 0 0; + border-color: $input-border-color; + display: flex; + flex-wrap: wrap; + row-gap: 8px; + + .ql-picker.ql-expanded { + .ql-picker-label { + border-color: transparent; + } + } + + .ql-picker-options { + box-shadow: $dropdown-box-shadow; + border-radius: $dropdown-border-radius; + } + + .ql-formats { + border: 1px solid $input-border-color; + margin-right: 10px; + border-radius: 3px; + + button,span { + i { + line-height: 18px; + color: var(--#{$prefix}body-color); + } + + &:hover { + i { + color: var(--#{$prefix}primary); + } + } + } + } + } + + .ql-picker-label { + display: flex; + + svg { + height: 16px; + width: 16px; + } + } +} + +.ql-snow { + + a { + color: $link-color; + } + + .ql-picker { + font-size: $font-size-base; + } + + .ql-picker.ql-expanded .ql-picker-label { + color: var(--#{$prefix}body-color) !important; + } + + .ql-picker-options { + background-color: $dropdown-bg; + border-color: $dropdown-border-color !important; + } + + .ql-tooltip { + background-color: $dropdown-bg; + border-color: var(--#{$prefix}border-color); + box-shadow: $dropdown-box-shadow; + color: var(--#{$prefix}body-color); + padding: 8px 16px; + + input[type=text] { + border: $input-border-width solid $input-border-color !important; + border-radius: $input-border-radius; + + &:focus,&:focus-visible { + border: $input-border-width solid $input-border-color !important; + } + } + } +} + + +// Quill Bubble tyle +.ql-bubble { + border: $input-border-width solid $input-border-color; + border-radius: $input-border-radius; + + .ql-tooltip-editor { + input::placeholder { + color: $input-placeholder-color; + } + } +} + +.ql-tooltip { + .ql-toolbar { + button { + color: $white !important; + + &:hover { + color: var(--#{$prefix}primary) !important; + } + } + } +} diff --git a/src/assets/scss/plugins/_react-select.scss b/src/assets/scss/plugins/_react-select.scss new file mode 100644 index 0000000..401c2d1 --- /dev/null +++ b/src/assets/scss/plugins/_react-select.scss @@ -0,0 +1,163 @@ +// +// react select +// + +.react-select { + > div { + border: $input-border-width solid $input-border-color; + background-color: $input-bg !important; + + &:hover { + border: $input-border-width solid $input-border-color; + } + } +} + +.react-select__control--is-focused { + border-color: $input-focus-border-color !important; + box-shadow: none !important; +} + +.react-select__indicator-separator { + display: none !important; +} + +.react-select__dropdown-indicator { + color: #{map-get($grays, "600")} !important; +} + +.react-select__menu { + background-color: $dropdown-bg !important; + box-shadow: none !important; + border: none !important; + border-radius: $dropdown-border-radius !important; + z-index: $zindex-dropdown !important; +} + +.react-select__menu-list { + border: $dropdown-border-width solid $dropdown-border-color !important; + border-radius: $dropdown-border-radius !important; +} + +.react-select__option { + padding: $dropdown-item-padding-y $dropdown-item-padding-x !important; + color: $dropdown-link-color !important; + + &:hover { + color: $dropdown-link-hover-color !important; + background-color: $dropdown-link-hover-bg !important; + } +} + +.react-select__option--is-focused, +.react-select__option--is-selected { + color: $dropdown-link-hover-color !important; + background-color: $dropdown-link-hover-bg !important; +} +.react-select__single-value { + color: #{map-get($grays, "600")} !important; +} +.react-select__multi-value { + background-color: rgba($primary, 0.2) !important; + color: $primary !important; + + .react-select__multi-value__label { + color: $primary; + } + + .react-select__multi-value__remove { + &:hover { + background-color: rgba($primary, 0.2) !important; + color: $primary !important; + } + } +} + +// react-bootstrap-typeahead style +.rbt-token { + background-color: rgba($primary, 0.2) !important; + color: $primary !important; + .rbt-token-remove-button { + background-color: transparent; + border: none; + .sr-only { + position: absolute; + width: 1px; + height: 1px; + padding: 0; + margin: -1px; + overflow: hidden; + clip: rect(0, 0, 0, 0); + white-space: nowrap; + border: 0; + } + } +} + +.rbt-input-multi.focus { + box-shadow: none !important; + background-color: $input-focus-bg !important; + border-color: $input-focus-border-color !important; +} + +// Topbar search +.app-search { + .react-select__menu-list { + .react-select__option { + padding: $dropdown-item-padding-y $dropdown-item-padding-x; + color: #{map-get($grays, "700")}; + background-color: transparent; + .dropdown-item { + &.active, + &:active { + background-color: transparent; + } + } + &:hover { + color: $dark; + background-color: $dropdown-link-hover-bg; + } + &--is-selected { + background-color: $dropdown-link-hover-bg; + .dropdown-item { + color: $dark !important; + } + } + &--is-disabled { + &:hover { + background-color: transparent !important; + } + } + } + } + + .react-select__value-container { + &--has-value { + .react-select__single-value { + i, + img, + .user-subinfo { + display: none !important; + } + .dropdown-item { + color: #{map-get($grays, "600")} !important; + .drop-username { + color: #{map-get($grays, "600")} !important; + } + &:hover { + color: $dropdown-link-color; + background-color: transparent; + } + } + + .dropdown-item, + .dropdown-item .drop-username { + width: 110px; + overflow: hidden; + text-overflow: ellipsis; + white-space: nowrap; + } + } + } + } +} \ No newline at end of file diff --git a/src/assets/scss/plugins/_react-slider.scss b/src/assets/scss/plugins/_react-slider.scss new file mode 100644 index 0000000..5cf89bd --- /dev/null +++ b/src/assets/scss/plugins/_react-slider.scss @@ -0,0 +1,183 @@ +// +// _noUiRangeSlider.scss +// + +.render-thumb { + height: 20px; + width: 20px; + border-radius: 50%; + background: var(--#{$prefix}secondary-bg); + box-shadow: var(--#{$prefix}box-shadow-inset); + border: 1px solid var(--#{$prefix}border-color); + + &:focus-visible { + outline: none !important; + } +} + + +.render-track { + box-shadow: none; + background-color: var(--#{$prefix}light); + border: none; +} + + +.noUi-target { + box-shadow: none; + background-color: var(--#{$prefix}light); + border: none; +} + +.noUi-handle { + background: var(--#{$prefix}secondary-bg); + box-shadow: var(--#{$prefix}box-shadow-inset); + border: 1px solid var(--#{$prefix}border-color); +} + +.noUi-connect { + background: var(--#{$prefix}primary); +} + +.noUi-horizontal { + height: 8px; + + .noUi-handle { + height: 20px; + width: 20px; + border-radius: 50%; + right: -10px !important; + top: -7px; + + &::before, + &::after { + display: none; + } + + &:focus { + outline: 0; + } + } + + [data-bs-theme="dark"] &{ + .noUi-handle { + background: var(--#{$prefix}primary); + } + } +} + +[data-slider-style="line"] { + &.noUi-horizontal { + .noUi-handle { + width: 8px; + border-radius: 4px; + right: -8px !important; + background: var(--#{$prefix}primary); + box-shadow: none; + } + } +} + + +// Vertical Slider +.noUi-vertical { + width: 8px; + + .noUi-handle { + height: 20px; + width: 20px; + right: -6px; + top: -6px; + left: auto; + border-radius: 50%; + + &::before, + &::after { + display: none; + } + + &:focus { + outline: 0; + } + } + + .noUi-origin { + top: 0; + } + + [data-bs-theme="dark"] &{ + .noUi-handle { + background: var(--#{$prefix}primary); + } + } +} + +// tooltip +.noUi-tooltip { + padding: $tooltip-padding-y $tooltip-padding-x; + border-color: var(--#{$prefix}border-color); + border-radius: $tooltip-border-radius; + font-weight: $font-weight-semibold; + background-color: $card-bg; + color: var(--#{$prefix}body-color); +} + +// Marker +.noUi-marker { + background: var(--#{$prefix}light); +} + +.noUi-value-horizontal { + padding-top: 4px; + color: var(--#{$prefix}secondary-color); +} + +// rangeslider sizes +[data-slider-size="sm"] { + &.noUi-horizontal { + height: 4px; + + .noUi-handle { + width: 16px; + height: 16px; + } + } + + &[data-slider-style="line"] { + &.noUi-horizontal { + .noUi-handle { + width: 6px; + border-radius: 4px; + top: -6px !important; + right: -6px !important; + } + } + } +} + +[data-slider-size="lg"] { + &.noUi-horizontal { + height: 12px; + + .noUi-handle { + width: 24px; + height: 24px; + } + } + + &[data-slider-style="line"] { + &.noUi-horizontal { + .noUi-handle { + width: 10px; + border-radius: 4px; + right: -10px !important; + } + } + } +} + +[data-bs-theme="dark"] { + .render-thumb { + background: var(--#{$prefix}primary); + } +} \ No newline at end of file diff --git a/src/assets/scss/plugins/_select2.scss b/src/assets/scss/plugins/_select2.scss new file mode 100644 index 0000000..08598c5 --- /dev/null +++ b/src/assets/scss/plugins/_select2.scss @@ -0,0 +1,212 @@ +// +// _select2.scss +// + +.select2-container { + width: 100% !important; + + .select2-selection--single { + border: $input-border-width solid $input-border-color; + height: $input-height; + background-color: $input-bg; + outline: none; + + .select2-selection__rendered { + line-height: 36px; + padding-left: 12px; + color: $input-color; + } + + .select2-selection__arrow { + height: 34px; + display: flex; + justify-content: center; + align-items: center; + width: 34px; + right: 3px; + + b { + transition: transform 0.2s ease-in-out; + background-image: url("data:image/svg+xml,%3Csvg viewBox='0 0 24 24' fill='%239ba6b7' xmlns='http://www.w3.org/2000/svg'%3E%3Cpath d='M12 16a1 1 0 0 1-.64-.23l-6-5a1 1 0 1 1 1.28-1.54L12 13.71l5.36-4.32a1 1 0 0 1 1.41.15a1 1 0 0 1-.14 1.46l-6 4.83A1 1 0 0 1 12 16'/%3E%3C/svg%3E"); + border: 0; + margin: -10px; + height: 20px; + width: 20px; + } + } + } +} + +.select2-container--open { + .select2-selection--single { + .select2-selection__arrow { + b { + transform: rotate(-180deg); + } + } + } +} + +.select2-results__option { + padding: 6px 12px; + + +} + +.select2-dropdown { + border: $dropdown-border-width solid $dropdown-border-color; + box-shadow: var(--#{$prefix}box-shadow); + background-color: $dropdown-bg; + z-index: $zindex-modal + 1; +} + +.select2-results__options { + &::-webkit-scrollbar { + -webkit-appearance: none; + } + + &::-webkit-scrollbar:vertical { + width: 5px; + margin-right: 5px; + } + + &::-webkit-scrollbar:horizontal { + height: 5px; + } + + &::-webkit-scrollbar-thumb { + background-color: rgba(var(--#{$prefix}dark-rgb), 0.2); + border-radius: 10px; + margin-right: 5px; + border: none; + } + + &::-webkit-scrollbar-track { + border-radius: 10px; + background-color: transparent; + } + + &::-webkit-scrollbar-corner { + background-color: transparent; + } +} + +.select2-container--default { + .select2-results__option--selected { + background-color: var(--#{$prefix}tertiary-bg); + } + + .select2-search--dropdown { + padding: 10px; + background-color: $dropdown-bg; + + .select2-search__field { + outline: none; + border: 1px solid $input-border-color; + background-color: $input-bg; + color: $input-color; + border-radius: $input-border-radius; + } + } + + .select2-results__option--highlighted[aria-selected] { + background-color: var(--#{$prefix}primary); + } + + .select2-results__option[aria-selected="true"] { + background-color: $dropdown-bg; + color: $dropdown-link-active-color; + + &:hover { + background-color: var(--#{$prefix}primary); + color: $white; + } + } + + .select2-selection--multiple { + .select2-selection__choice__display { + padding-left: 36px; + padding-right: 5px; + } + } + + .select2-selection--single { + .select2-selection__arrow { + right: 1px; + left: auto; + } + } +} + +.select2-container { + .select2-selection--multiple { + display: flex; + min-height: $input-height; + border: $input-border-width solid $input-border-color !important; + background-color: $input-bg; + + .select2-selection__rendered { + padding: 1px 4px; + margin-bottom: 0; + } + + .select2-search__field { + border: 0; + color: $input-color; + } + + .select2-selection__choice { + background-color: var(--#{$prefix}primary); + border: none; + color: $white; + border-radius: 3px; + padding: 0px 7px 0 0; + margin-top: 6px; + } + + .select2-selection__choice__remove { + color: $white; + margin-right: 7px; + border-color: tint-color($primary, 10%); + padding: 0 8px; + + &:hover { + color: $white; + background-color: var(--#{$prefix}primary); + } + } + } + + .select2-search--inline { + .select2-search__field { + margin-top: 7px; + font-family: $font-family-base; + } + } + + .select2-search { + textarea { + &::placeholder { + color: $input-placeholder-color; + } + } + } +} + +[dir="rtl"] .select2-container--open .select2-dropdown { + left: auto; + right: 0; +} + +[data-bs-theme="dark"] { + .select2-container { + .select2-selection--single { + .select2-selection__arrow { + + b { + background-image: url("data:image/svg+xml,%3Csvg viewBox='0 0 24 24' fill='%238391a2' xmlns='http://www.w3.org/2000/svg'%3E%3Cpath d='M12 16a1 1 0 0 1-.64-.23l-6-5a1 1 0 1 1 1.28-1.54L12 13.71l5.36-4.32a1 1 0 0 1 1.41.15a1 1 0 0 1-.14 1.46l-6 4.83A1 1 0 0 1 12 16'/%3E%3C/svg%3E"); + } + } + } + } +} \ No newline at end of file diff --git a/src/assets/scss/plugins/_simplebar.scss b/src/assets/scss/plugins/_simplebar.scss new file mode 100644 index 0000000..b7137cb --- /dev/null +++ b/src/assets/scss/plugins/_simplebar.scss @@ -0,0 +1,238 @@ +// +// _simplebar.scss +// + +[data-simplebar] { + position: relative; + flex-direction: column; + flex-wrap: wrap; + justify-content: flex-start; + align-content: flex-start; + align-items: flex-start; +} + +.simplebar-wrapper { + overflow: hidden; + width: inherit; + height: inherit; + max-width: inherit; + max-height: inherit; +} + +.simplebar-mask { + direction: inherit; + position: absolute; + overflow: hidden; + padding: 0; + margin: 0; + left: 0; + top: 0; + bottom: 0; + right: 0; + width: auto !important; + height: auto !important; + z-index: 0; +} + +.simplebar-offset { + direction: inherit !important; + box-sizing: inherit !important; + resize: none !important; + position: absolute; + top: 0; + left: 0; + bottom: 0; + right: 0; + padding: 0; + margin: 0; + -webkit-overflow-scrolling: touch; +} + +.simplebar-content-wrapper { + direction: inherit; + box-sizing: border-box !important; + position: relative; + display: block; + height: 100%; + width: auto; + overflow: auto; + max-width: 100%; + max-height: 100%; + scrollbar-width: none; +} + +.simplebar-content-wrapper::-webkit-scrollbar, +.simplebar-hide-scrollbar::-webkit-scrollbar { + display: none; +} + +.simplebar-content:before, +.simplebar-content:after { + content: " "; + display: table; +} + +.simplebar-placeholder { + max-height: 100%; + max-width: 100%; + width: 100%; + pointer-events: none; +} + +.simplebar-height-auto-observer-wrapper { + box-sizing: inherit !important; + height: 100%; + width: 100%; + max-width: 1px; + position: relative; + float: left; + max-height: 1px; + overflow: hidden; + z-index: -1; + padding: 0; + margin: 0; + pointer-events: none; + flex-grow: inherit; + flex-shrink: 0; + flex-basis: 0; +} + +.simplebar-height-auto-observer { + box-sizing: inherit; + display: block; + opacity: 0; + position: absolute; + top: 0; + left: 0; + height: 1000%; + width: 1000%; + min-height: 1px; + min-width: 1px; + overflow: hidden; + pointer-events: none; + z-index: -1; +} + +.simplebar-track { + z-index: 1; + position: absolute; + right: 0; + bottom: 0; + pointer-events: none; + overflow: hidden; +} + +[data-simplebar].simplebar-dragging { + .simplebar-content { + pointer-events: none; + user-select: none; + } + + .simplebar-track { + pointer-events: all; + } +} + +.simplebar-scrollbar { + position: absolute; + right: 2px; + width: 6px; + min-height: 10px; + + &:before { + position: absolute; + content: ""; + background: #a2adb7; + border-radius: 7px; + left: 0; + right: 0; + opacity: 0; + transition: opacity 0.2s linear; + } +} + +.simplebar-scrollbar.simplebar-visible:before { + opacity: 0.5; + transition: opacity 0s linear; +} + +.simplebar-track.simplebar-vertical { + top: 0; + width: 11px; + + .simplebar-scrollbar { + &:before { + top: 2px; + bottom: 2px; + } + } +} + +.simplebar-track.simplebar-horizontal { + left: 0; + height: 11px; + + .simplebar-scrollbar { + right: auto; + left: 0; + top: 2px; + height: 7px; + min-height: 0; + min-width: 10px; + width: auto; + + &:before { + height: 100%; + left: 2px; + right: 2px; + } + } +} + +/* Rtl support */ +[data-simplebar-direction="rtl"] .simplebar-track.simplebar-vertical { + right: auto; + left: 0; +} + +.hs-dummy-scrollbar-size { + direction: rtl; + position: fixed; + opacity: 0; + visibility: hidden; + height: 500px; + width: 500px; + overflow-y: hidden; + overflow-x: scroll; +} + +.simplebar-hide-scrollbar { + position: fixed; + left: 0; + visibility: hidden; + overflow-y: scroll; + scrollbar-width: none; +} + +// Scroll Size +[data-simplebar-md] { + .simplebar-scrollbar { + right: 1px; + width: 8px; + } +} + +[data-simplebar-lg] { + .simplebar-scrollbar { + right: 1px; + width: 10px; + } +} + +[data-simplebar-primary] { + .simplebar-scrollbar { + &:before { + background: var(--#{$prefix}primary); + } + } +} \ No newline at end of file diff --git a/src/assets/scss/plugins/_sortablejs.scss b/src/assets/scss/plugins/_sortablejs.scss new file mode 100644 index 0000000..4656098 --- /dev/null +++ b/src/assets/scss/plugins/_sortablejs.scss @@ -0,0 +1,28 @@ +// +// _sortable.scss +// + +.nested-sortable { + .nested-sortable { + margin-top: 10px; + } +} +.nested-sortable-handle { + .nested-sortable-handle { + margin-top: 10px; + } +} + +.sort-handle { + padding-right: 10px; + font-size: 16px; + cursor: move; + + &:hover { + color: var(--#{$prefix}primary); + } +} + +.sortable-item-ghost { + background-color: var(--#{$prefix}light-bg-subtle); +} \ No newline at end of file diff --git a/src/assets/scss/plugins/_summernote.scss b/src/assets/scss/plugins/_summernote.scss new file mode 100644 index 0000000..485c42e --- /dev/null +++ b/src/assets/scss/plugins/_summernote.scss @@ -0,0 +1,67 @@ +// +// _summernote.scss +// + +.note-toolbar { + gap: 5px !important; +} + +.note-editor { + margin-bottom: 0; + + &.note-airframe, + &.note-frame { + border-color: var(--#{$prefix}border-color); + } + + &.note-airframe .note-statusbar, + &.note-frame .note-statusbar { + background: var(--#{$prefix}light); + border-top-color: var(--#{$prefix}border-color); + } +} + +.note-btn-group { + .note-btn { + border: 0; + padding: .28rem .5rem; + } +} + +.note-editor .note-toolbar .note-color .note-dropdown-menu .note-palette .note-holder-custom .note-color-btn, +.note-popover .popover-content .note-color .note-dropdown-menu .note-palette .note-holder-custom .note-color-btn { + border-color: var(--#{$prefix}border-color); +} + +.note-editor .note-toolbar .note-color .note-dropdown-menu .note-palette .note-palette-title, +.note-popover .popover-content .note-color .note-dropdown-menu .note-palette .note-palette-title { + border-bottom: 0; +} + +.note-editor .note-toolbar .note-para .note-dropdown-menu, +.note-popover .popover-content .note-para .note-dropdown-menu { + min-width: 235px; +} + +.note-modal { + .modal-dialog { + box-shadow: none; + } + + .modal-body { + overflow-x: hidden !important; + } +} + +.help-list-item { + margin: 12px 0; +} + +.note-form-group { + margin-bottom: 10px; + + .note-form-label { + margin-bottom: 5px; + font-weight: $font-weight-medium; + } +} diff --git a/src/assets/scss/plugins/_sweetalert2.scss b/src/assets/scss/plugins/_sweetalert2.scss new file mode 100644 index 0000000..c5aea12 --- /dev/null +++ b/src/assets/scss/plugins/_sweetalert2.scss @@ -0,0 +1,177 @@ +// +// _sweetalert2.scss +// + +.swal2-container { + .swal2-title { + font-size: 20px; + font-weight: $font-weight-medium; + color: var(--#{$prefix}heading-color); + } +} + +.swal2-popup { + width: 28em; + padding: 2rem; + border-radius: $modal-content-border-radius; + background-color: var(--#{$prefix}secondary-bg); + color: var(--#{$prefix}body-color); + + .swal2-html-container { + font-size: 16px !important; + color: var(--#{$prefix}body-color); + } +} + +.swal2-footer { + border-top: 1px solid var(--#{$prefix}border-color); + color: var(--#{$prefix}body-color); +} + +.swal2-icon { + &.swal2-question { + border-color: var(--#{$prefix}info); + color: var(--#{$prefix}info); + } + + &.swal2-success { + [class^=swal2-success-line] { + background-color: var(--#{$prefix}success); + } + + .swal2-success-ring { + border-color: var(--#{$prefix}success); + } + } + + &.swal2-warning { + border-color: var(--#{$prefix}warning); + color: var(--#{$prefix}warning); + } +} + +div:where(.swal2-icon) { + width: 4em; + height: 4em; + margin: 0.5rem auto; + + .swal2-icon-content { + font-size: 3em; + } + + &.swal2-info { + border-color: var(--#{$prefix}info); + color: var(--#{$prefix}info); + } +} + +.swal2-styled { + &:focus { + box-shadow: none; + } +} + +.swal2-loader { + border-color: var(--#{$prefix}primary) transparent var(--#{$prefix}primary) transparent; +} + +.swal2-timer-progress-bar { + background-color: rgba($success, 0.4); +} + +.swal2-progress-steps { + .swal2-progress-step { + background: var(--#{$prefix}primary); + + &.swal2-active-progress-step { + background: var(--#{$prefix}primary); + + &~.swal2-progress-step, + &~.swal2-progress-step-line { + background: rgba($primary, 0.3); + } + } + } + + .swal2-progress-step-line { + background: var(--#{$prefix}primary); + } +} + +.swal2-actions.swal2-loading { + .swal2-styled.swal2-confirm { + border-left-color: var(--#{$prefix}primary) !important; + border-right-color: var(--#{$prefix}primary) !important; + } +} + +.swal2-file, +.swal2-input, +.swal2-textarea { + border: 1px solid $input-border-color; + + &:focus { + box-shadow: none; + border-color: $input-focus-border-color; + } +} + +.swal2-input { + height: auto; + display: block; + padding: $input-padding-y $input-padding-x; + font-family: $input-font-family; + @include font-size($input-font-size); + font-weight: $input-font-weight; + line-height: $input-line-height; + color: $input-color; + box-shadow: none !important; + border-radius: 5px !important; + background-color: $input-bg; + background-clip: padding-box; + border: $input-border-width solid $input-border-color !important; +} + +.swal2-close { + font-family: $font-family-base; + font-size: 42px; + width: 1em; + height: 1em; + position: absolute; + top: 5px; + right: 5px; + + &:focus { + box-shadow: none; + } + + &:hover { + color: $danger; + } +} + +.swal2-validation-message { + background-color: transparent; +} + + +div:where(.swal2-icon).swal2-error [class^=swal2-x-mark-line] { + width: 1.9375em; + top: 1.95em; +} + +div:where(.swal2-icon).swal2-success [class^=swal2-success-line][class$=tip] { + top: 2.4em; + width: 1em; +} + +.swal2-icon.swal2-success [class^=swal2-success-line][class$=long] { + top: 1.85em; + right: .5em; + width: 2.25em; +} + +.swal2-backdrop-show { + backdrop-filter: blur(2px); + background: var(--#{$prefix}emphasis-color); +} \ No newline at end of file diff --git a/src/assets/scss/plugins/_touchpin.scss b/src/assets/scss/plugins/_touchpin.scss new file mode 100644 index 0000000..470968c --- /dev/null +++ b/src/assets/scss/plugins/_touchpin.scss @@ -0,0 +1,81 @@ +// +// _touchpin.scss +// + +.touchspin{ + overflow: hidden; + height: calc($input-padding-y * 2 + $input-btn-font-size * 1.5 + $border-width * 2); + border: 1px solid var(--#{$prefix}border-color); + border-radius: var(--#{$prefix}border-radius); + + .form-control { + text-align: center; + + &:focus { + box-shadow: none; + outline: none; + z-index: 0; + } + } + + .btn-group-vertical { + .btn { + border-radius: 0; + height: calc(calc($input-padding-y * 2 + $input-btn-font-size * 1.5 + $border-width * 2) * 0.5); + padding: 2px 6px; + } + } + + .btn { + border-radius: var(--#{$prefix}border-radius); + padding: 6px; + } + + .floating { + display: flex; + align-items: center; + padding: 4px 6px; + margin: 4px !important; + border-radius: var(--#{$prefix}border-radius) !important; + + &.rounded-circle { + border-radius: 50% !important; + } + } + + &.input-group-sm { + height: calc($input-padding-y-sm * 2 + $input-font-size-sm * 1.5 + $border-width * 2); + + .btn { + padding: 4px; + } + + .floating { + padding: 2px 3px; + margin: 4px; + border-radius: var(--#{$prefix}border-radius-sm) !important; + } + + .btn-group-vertical { + .btn { + height: calc(calc($input-padding-y-sm * 2 + $input-font-size-sm * 1.5 + $border-width * 2) * 0.5); + } + } + } + + &.input-group-lg { + height: calc($input-padding-y-lg * 2 + $input-font-size-lg * 1.5 + $border-width * 2); + + .floating { + padding: 4px 6px; + margin: 4px; + border-radius: var(--#{$prefix}border-radius-lg) !important; + } + + .btn-group-vertical { + .btn { + height: calc(calc($input-padding-y-lg * 2 + $input-font-size-lg * 1.5 + $border-width * 2) * 0.5); + } + } + } +} diff --git a/src/assets/scss/plugins/_tour.scss b/src/assets/scss/plugins/_tour.scss new file mode 100644 index 0000000..7dde3d2 --- /dev/null +++ b/src/assets/scss/plugins/_tour.scss @@ -0,0 +1,281 @@ +// +// _tour.scss +// + +.tg-backdrop { + z-index: 1001; +} + +.tg-dialog { + background: $card-bg !important; + color: var(--#{$prefix}body-color); + + .tg-arrow { + background: $card-bg !important; + } +} + +.tg-dialog-btn { + background-color: var(--#{$prefix}primary) !important; + color: $white !important; + border-color: var(--#{$prefix}primary) !important; +} + +.tg-dialog-close-btn { + height: 20px !important; + width: 20px !important; + background-color: rgba(var(--#{$prefix}warning-rgb), 0.75); + border-radius: 50%; + display: flex; + align-items: center; + justify-content: center; +} + + +// rc tour +.rc-tour { + position: absolute; + z-index: 1070; + display: block; + visibility: visible; + font-size: 12px; + line-height: 1.5; + opacity: 1; + max-width: 360px; +} + +.rc-tour-hidden { + display: none; +} + +.rc-tour-placement-top, .rc-tour-placement-topLeft, .rc-tour-placement-topRight { + padding: 5px 0 5px 0; +} + +.rc-tour-placement-right, .rc-tour-placement-rightTop, .rc-tour-placement-rightBottom { + padding: 0 5px 0 5px; +} + +.rc-tour-placement-bottom, .rc-tour-placement-bottomLeft, .rc-tour-placement-bottomRight { + padding: 5px 0 5px 0; +} + +.rc-tour-placement-left, .rc-tour-placement-leftTop, .rc-tour-placement-leftBottom { + padding: 0 5px 0 5px; +} + +.rc-tour-section { + text-align: left; + text-decoration: none; + border-radius: 6px; + box-shadow: var(--#{$prefix}box-shadow); + background: $card-bg !important; + position: relative; + border: none; + background-clip: padding-box; +} + +.rc-tour-arrow { + position: absolute; + width: 0; + height: 0; + border-color: transparent; + border-style: solid; +} + +.rc-tour-placement-top .rc-tour-arrow, .rc-tour-placement-topLeft .rc-tour-arrow, .rc-tour-placement-topRight .rc-tour-arrow { + bottom: 0; + margin-left: -5px; + border-width: 5px 5px 0; + border-top-color: var(--#{$prefix}border-color); +} + +.rc-tour-placement-top .rc-tour-arrow { + left: 50%; +} + +.rc-tour-placement-topLeft .rc-tour-arrow { + left: 15%; +} + +.rc-tour-placement-topRight .rc-tour-arrow { + right: 15%; +} + +.rc-tour-placement-right .rc-tour-arrow, .rc-tour-placement-rightTop .rc-tour-arrow, .rc-tour-placement-rightBottom .rc-tour-arrow { + left: 0; + margin-top: -5px; + border-width: 5px 5px 5px 0; + border-right-color: var(--#{$prefix}border-color); +} + +.rc-tour-placement-right .rc-tour-arrow { + top: 50%; +} + +.rc-tour-placement-rightTop .rc-tour-arrow { + top: 15%; + margin-top: 0; +} + +.rc-tour-placement-rightBottom .rc-tour-arrow { + bottom: 15%; +} + +.rc-tour-placement-left .rc-tour-arrow, .rc-tour-placement-leftTop .rc-tour-arrow, .rc-tour-placement-leftBottom .rc-tour-arrow { + right: 0; + margin-top: -5px; + border-width: 5px 0 5px 5px; + border-left-color: var(--#{$prefix}border-color); +} + +.rc-tour-placement-left .rc-tour-arrow { + top: 15%; +} + +.rc-tour-placement-leftTop .rc-tour-arrow { + top: 15%; + margin-top: 0; +} + +.rc-tour-placement-leftBottom .rc-tour-arrow { + bottom: 15%; +} + +.rc-tour-placement-bottom .rc-tour-arrow, .rc-tour-placement-bottomLeft .rc-tour-arrow, .rc-tour-placement-bottomRight .rc-tour-arrow { + top: 0; + margin-left: -5px; + border-width: 0 5px 5px; + border-bottom-color: var(--#{$prefix}border-color); +} + +.rc-tour-placement-bottom .rc-tour-arrow { + left: 50%; +} + +.rc-tour-placement-bottomLeft .rc-tour-arrow { + left: 15%; +} + +.rc-tour-placement-bottomRight .rc-tour-arrow { + right: 15%; +} + +.rc-tour-wrap { + position: fixed; + overflow: auto; + top: 0; + right: 0; + bottom: 0; + left: 0; + z-index: 1050; + -webkit-overflow-scrolling: touch; + outline: 0; +} + +.rc-tour-title { + margin: 0; + font-size: 14px; + line-height: 21px; + font-weight: bold; +} + +.rc-tour-close { + cursor: pointer; + border: 0; + background: transparent; + font-size: 16px; + position: absolute; + right: 20px; + top: 10px; + font-weight: 700; + line-height: 1; + color: var(--#{$prefix}body-color); + opacity: .2; + text-decoration: none; +} + +.rc-tour-close:hover { + opacity: 1; + filter: alpha(opacity=100); + text-decoration: none; +} + +.rc-tour-header { + padding: 13px 20px 14px 20px; + border-radius: 5px 5px 0 0; + background: $card-bg !important; + color: var(--#{$prefix}body-color); + border-bottom: 1px solid var(--#{$prefix}border-color); +} + +.rc-tour-description { + padding: 24px; + font-size: 14px; + line-height: 1.5715; + word-wrap: break-word; +} + +.rc-tour-footer { + padding: 10px 16px; + display: flex; + background: 0 0; + border-top: 1px solid var(--#{$prefix}border-color); + border-radius: 0 0 2px 2px; +} + +.rc-tour-sliders { + width: 70%; + display: flex; + align-items: center; +} + +.rc-tour-sliders span { + width: 8px; + height: 8px; + display: inline-block; + border-radius: 50%; + background: rgba(var(--#{$prefix}primary-rgb), 0.25); + margin-right: 4px; + opacity: 0.75; +} + +.rc-tour-actions { + margin-left: auto; + display: flex; +} + +.rc-tour-close .rc-tour-close-x { + font-size: 24px; +} + +.rc-tour-sliders span.active { + background: var(--#{$prefix}primary); +} + +.rc-tour-prev-btn, .rc-tour-next-btn, .rc-tour-finish-btn { + display: inline-block; + margin-left: 8px; + @extend .btn; + @extend .btn-primary; + @extend .btn-sm; +} + +.rc-tour .ant-btn-primary { + color: #fff; + border: 1px solid #1890ff; + background: #1890ff; + box-shadow: 0 2px #0000000b; +} + +.rc-tour-mask .rc-tour-placeholder-animated { + transition: all 0.15s; +} + +.rc-tour-mask { + z-index: 1015 !important; +} + +.rc-tour { + z-index: 1020 !important; +} \ No newline at end of file diff --git a/src/assets/scss/plugins/_treeview.scss b/src/assets/scss/plugins/_treeview.scss new file mode 100644 index 0000000..38ba251 --- /dev/null +++ b/src/assets/scss/plugins/_treeview.scss @@ -0,0 +1,87 @@ +// +// _treeview.scss +// + +.jstree-default { + padding: 2px 6px; + height: auto; + + .jstree-clicked, + .jstree-hovered { + background: var(--#{$prefix}tertiary-bg); + box-shadow: none; + } + + .jstree-clicked { + background-color: rgba(var(--#{$prefix}primary-rgb), 0.1); + color: var(--#{$prefix}primary); + } + + .jstree-anchor, + .jstree-icon, + .jstree-icon:empty { + line-height: 22px; + height: 22px; + border-radius: 4px; + } + + .jstree-node, + .jstree-icon { + background-image: url(../../images/treeview.png); + } + + .jstree-last { + background: transparent; + } + + .jstree-themeicon-custom { + background-color: transparent; + background-image: none; + background-position: 0 0; + } + + .jstree-disabled { + color: $list-group-disabled-color; + } +} + +.jstree-wholerow { + + &.jstree-wholerow-clicked, + &.jstree-wholerow-hovered { + background: var(--#{$prefix}tertiary-bg); + } +} + +.vakata-context, +.vakata-context ul { + background-color: $dropdown-bg; + border: $dropdown-border-width solid $dropdown-border-color; + box-shadow: $dropdown-box-shadow; + border-radius: $dropdown-border-radius; + + .vakata-context-hover>a { + box-shadow: none !important; + background-color: $dropdown-link-hover-bg; + } + + .vakata-context-separator, + .vakata-contextmenu-sep, + li>a>i:empty { + display: none !important; + } + + li>a { + text-shadow: none; + color: $dropdown-link-color; + + &:hover { + background-color: $dropdown-link-hover-bg; + color: $dropdown-link-hover-color; + } + } + + ul { + margin-left: 0; + } +} \ No newline at end of file diff --git a/src/assets/scss/plugins/_typehead.scss b/src/assets/scss/plugins/_typehead.scss new file mode 100644 index 0000000..c345528 --- /dev/null +++ b/src/assets/scss/plugins/_typehead.scss @@ -0,0 +1,61 @@ +// +// typehead.scss +// + + +.twitter-typeahead { + display: inherit !important; +} + +.tt-query, +.tt-hint { + outline: none; +} + +.tt-query { + box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075); +} + +.tt-hint { + color: $input-color; + background: $input-bg !important; +} + +.tt-menu { + width: 100%; + padding: 8px 0; + max-height: 200px; + overflow-y: auto; + background-color: $dropdown-bg; + box-shadow: var(--#{$prefix}box-shadow); + border: 1px solid $dropdown-border-color; +} + +.tt-suggestion { + padding: 3px 20px; + line-height: 24px; + + &:hover, + &.tt-cursor { + cursor: pointer; + color: $white; + background-color: var(--#{$prefix}primary); + } + + p { + margin: 0; + } +} + +.tt-highlight { + font-family: $font-family-base; +} + +.typeahead-empty-message { + padding: 5px 10px; + color: $danger; +} + +.league-name { + padding: 3px 20px; +} \ No newline at end of file diff --git a/src/assets/scss/plugins/_wizard.scss b/src/assets/scss/plugins/_wizard.scss new file mode 100644 index 0000000..0a62f93 --- /dev/null +++ b/src/assets/scss/plugins/_wizard.scss @@ -0,0 +1,56 @@ +// +// _wizard.scss +// + +.wizard-tabs { + border: 0; + gap: 5px; + + .nav-link { + border: 1px dashed var(--#{$prefix}border-color) !important; + border-radius: 5px !important; + color: var(--#{$prefix}secondary-color); + + &.active { + background-color: rgba(var(--#{$prefix}light-rgb), 0.5); + color: var(--#{$prefix}secondary-color); + + i { + color: var(--#{$prefix}body-color); + } + } + + &.wizard-item-done { + background-color: rgba(var(--#{$prefix}success-rgb), 0.1); + border-color: rgba(var(--#{$prefix}success-rgb), 0.9) !important; + color: var(--#{$prefix}success); + + i, + .text-body { + color: var(--#{$prefix}success) !important; + } + } + } + + &.wizard-bordered { + .nav-link { + border: 0 !important; + border-left: 3px solid transparent !important; + + &.wizard-item-done { + border-color: var(--#{$prefix}success) !important; + } + } + } +} + +[data-wizard-animation] .tab-pane { + opacity: 0; + transform: translateX(20px); + transition: opacity 0.3s ease, transform 0.3s ease; +} + +[data-wizard-animation] .tab-pane.active.show { + opacity: 1; + transform: translateX(0); +} \ No newline at end of file diff --git a/src/assets/scss/structure/_footer.scss b/src/assets/scss/structure/_footer.scss new file mode 100644 index 0000000..1646ad9 --- /dev/null +++ b/src/assets/scss/structure/_footer.scss @@ -0,0 +1,22 @@ +// +// _footer.scss +// + +.footer { + margin-top: auto; + display: flex; + align-items: center; + padding: calc($grid-gutter-width * .5); + color: var(--#{$prefix}emphasis-color); + transition: margin-left .25s ease-in-out; + background-color: $card-bg; + border-top: 1px solid $card-border-color; + margin: auto calc($grid-gutter-width * -0.5) 0; +} + +// Used for account authentication pages +.footer-alt { + border: none; + text-align: center; + justify-content: center; +} \ No newline at end of file diff --git a/src/assets/scss/structure/_horizontal.scss b/src/assets/scss/structure/_horizontal.scss new file mode 100644 index 0000000..3959814 --- /dev/null +++ b/src/assets/scss/structure/_horizontal.scss @@ -0,0 +1,268 @@ +// +// _horizontal.scss +// + +html[data-layout="topnav"] { + + .app-topbar { + margin: 0; + z-index: 1005; + box-shadow: none; + border-bottom: 0; + + .logo-topbar { + display: block; + float: none; + } + + .sidenav-toggle-button { + display: none; + } + + .topbar-menu { + padding-right: calc(var(--#{$prefix}gutter-x) * .5); + padding-left: calc(var(--#{$prefix}gutter-x) * .5); + } + } + + &[data-sidenav-size="offcanvas"] { + .sidenav-toggle-button { + display: flex; + } + } + + .content-page { + margin-left: 0; + min-height: calc(100vh - $topbar-height - 43px); + } + + .topnav { + width: 100%; + z-index: 1000; + position: sticky; + top: $topbar-height; + background: $sidenav-bg; + padding-left: $grid-gutter-width * 0.5; + padding-right: $grid-gutter-width * 0.5; + box-shadow: var(--#{$prefix}box-shadow); + + .navbar { + margin: 0; + padding: 0; + } + + .navbar-nav { + + @include media-breakpoint-up(lg) { + .nav-item { + &:first-of-type { + .nav-link { + padding-left: 0; + } + } + } + } + .nav-link { + display: flex; + align-items: center; + position: relative; + line-height: $sidenav-item-font-size; + font-size: $sidenav-item-font-size; + font-weight: $sidenav-item-font-weight; + padding: calc($sidenav-item-padding-y * 1.5) calc($sidenav-item-padding-x * 1.5); + + + .menu-icon { + margin-right: calc($sidenav-item-icon-size * 0.5); + + i { + font-size: $sidenav-item-icon-size; + } + + svg { + height: $sidenav-item-icon-size; + width: $sidenav-item-icon-size; + } + } + + + .menu-arrow { + margin-left: calc($sidenav-item-icon-size * 0.5); + } + } + + .dropdown { + .dropdown-menu { + font-size: $sidenav-sub-item-font-size; + + .dropdown-item { + display: flex; + gap: 8px; + align-items: center; + padding: calc($sidenav-item-padding-y * 0.75) calc($sidenav-item-padding-x * 1.5); + + i { + font-size: calc($sidenav-sub-item-font-size * 1.25); + } + } + + .menu-arrow { + transform: rotate(-90deg); + } + + } + } + } + + .nav-item { + + >a, + .nav-link { + color: $sidenav-item-color; + + &:hover { + color: $sidenav-item-hover-color; + } + } + + &.active { + >a { + color: $sidenav-item-hover-color; + } + } + + } + } + + .page-title-head { + background-color: transparent; + border: 0; + min-height: 60px; + margin-bottom: 0; + } +} + + +@include media-breakpoint-up(lg) { + + .topnav { + .dropdown { + .dropdown-menu { + margin-top: 0; + + .dropdown { + .dropdown-menu { + position: absolute; + top: 0; + left: 100%; + display: none; + } + } + } + + &:hover { + .nav-link { + color: $sidenav-item-hover-color !important; + } + + >.dropdown-menu { + display: block; + } + } + } + + .dropdown:hover>.dropdown-menu>.dropdown:hover { + >.dropdown-item { + color: $sidenav-item-hover-color !important; + } + >.dropdown-menu { + display: block; + } + } + + + .dropdown.active>a.dropdown-item { + color: $dropdown-link-active-color; + @include gradient-bg($dropdown-link-active-bg); + } + } +} + +@include media-breakpoint-down(lg) { + html[data-layout="topnav"] { + .topnav { + max-height: 360px; + overflow-y: auto; + + .navbar-nav { + .nav-link { + padding: calc($sidenav-item-padding-y * 0.8) calc($sidenav-item-padding-x * 2); + } + } + + .dropdown { + .dropdown-menu { + background-color: transparent; + border: none; + box-shadow: none; + padding-left: calc($sidenav-item-padding-x * 3); + margin-top: calc($sidenav-item-padding-y * -0.75); + + .dropdown-menu { + margin-top: calc($sidenav-item-padding-y * -0.5); + padding-left: calc($sidenav-item-padding-x * 1.5); + } + } + + .dropdown-item { + position: relative; + background-color: transparent; + } + } + + .dropdown { + .dropdown-item { + color: $sidenav-item-color; + + &.hover { + color: $sidenav-item-hover-color; + } + + &.active, + &:active { + color: $sidenav-item-active-color; + } + } + } + + .dropdown.active>a.dropdown-item { + color: $sidenav-item-active-color; + } + } + + .topnav-toggle-button { + display: block; + } + } +} + +// Horizontal Menu Toggle Button +.topnav-toggle-button { + display: none; + position: relative; + cursor: pointer; + float: left; + padding: 0; + background-color: transparent; + border: none; + color: $topbar-item-color; +} + + +@include media-breakpoint-up(xxl) { + html[data-layout="topnav"] { + .container-fluid { + max-width: 85%; + } + } +} \ No newline at end of file diff --git a/src/assets/scss/structure/_layout.scss b/src/assets/scss/structure/_layout.scss new file mode 100644 index 0000000..341d33d --- /dev/null +++ b/src/assets/scss/structure/_layout.scss @@ -0,0 +1,235 @@ +// +// _layout.scss +// + +// Wrapper +.wrapper { + height: 100%; + width: 100%; +} + +// Content Page +.content-page { + display: flex; + flex-direction: column; + position: relative; + margin-left: $sidenav-width; + min-height: calc(100vh - #{calc($topbar-height + 1px)}); + transition: $transition-base; + padding: 0 calc($grid-gutter-width * 0.5); +} + +// Page Head +.page-title-head { + min-height: 40px; + padding: $spacer 0; +} + +// Logo Height +.logo-lg { + img { + height: $logo-lg-height; + } +} + +.logo-sm { + img { + height: $logo-sm-height; + } +} + +// Sidebar Logo +.logo { + display: block; + top: 0; + position: sticky; + line-height: $topbar-height; + padding: 0 12px; + text-align: center; + + span.logo-lg { + display: block; + } + + span.logo-sm { + display: none; + } + + &.logo-light { + display: none; + } + + &.logo-dark { + display: block; + } +} + +html[data-menu-color="gradient"], +html[data-menu-color="dark"], +html[data-menu-color="image"], +html[data-bs-theme="dark"], +html[data-menu-color="light"][data-topbar-color="dark"], +html[data-menu-color="light"][data-topbar-color="gradient"], +html[data-menu-color="gray"][data-topbar-color="dark"], +html[data-menu-color="gray"][data-topbar-color="gradient"] { + + .logo { + &.logo-light { + display: block; + } + + &.logo-dark { + display: none; + } + } +} + +// +// NO ICONS SIDEBAR +// + +html.sidebar-no-icons { + .sidenav-menu { + .menu-icon { + display: none; + } + } +} + +// +//SIDEBAR WITH LINES +// + +html.sidebar-with-line { + .sub-menu { + position: relative; + + &::before { + content: ""; + // width: calc($sidenav-item-icon-size + $sidenav-item-padding-x + $sidenav-item-gap); + width: 1px; + top: 5px; + bottom: calc($sidenav-item-padding-x + 4px); + position: absolute; + left: calc($sidenav-item-icon-size - 1px); + border-left: 1px dashed $sidenav-item-color; + opacity: 0.5; + } + + .sub-menu { + &::before { + left: calc($sidenav-item-icon-size - 1px + 14px); + } + } + + .side-nav-link { + &::before { + content: ""; + // width: calc($sidenav-item-icon-size + $sidenav-item-padding-x + $sidenav-item-gap); + width: $sidenav-item-padding-x; + height: 1px; + position: absolute; + left: calc($sidenav-item-icon-size); + border-top: 1px dashed $sidenav-item-color; + opacity: 0.5; + } + + &::after { + content: ""; + height: 4px; + width: 4px; + background-color: $sidenav-item-color; + position: absolute; + left: calc($sidenav-item-icon-size + $sidenav-item-padding-x); + border-radius: 50%; + opacity: 0.5; + } + } + } +} + +// +// Right Asidebar +// +.asidebar { + position: fixed; + top: $topbar-height; + bottom: 0; + right: 0; + width: 250px !important; + overflow: hidden; + background-color: $card-bg !important; +} + +.asidebar-button { + position: fixed; + top: 20%; + right: 0; +} + +@include media-breakpoint-up(xl) { + .wrapper:has(.asidebar) .content-page { + margin-right: 250px; + } +} + +// +// BOXED LAYOUT +// +@include media-breakpoint-up(xxl) { + html[data-layout-width="boxed"] { + body { + background-color: var(--#{$prefix}tertiary-bg); + } + + .wrapper { + margin: 0 auto; + box-shadow: var(--#{$prefix}box-shadow); + max-width: 1340px; + background-color: var(--#{$prefix}body-bg); + } + + .app-topbar { + z-index: 100; + margin-right: -1px; + } + } +} + + +// +// SCROLLABLE LAYOUT +// + +@include media-breakpoint-up(lg) { + html[data-layout-position="scrollable"] { + .content-page { + position: relative; + min-height: max-content; + } + + .sidenav-menu { + position: absolute; + } + + .logo, + .app-topbar { + position: static; + } + } +} + +// +// MONOCROME STYLE +// +.monochrome:before { + content: ""; + position: fixed; + inset: 0; + backdrop-filter: grayscale(100%) opacity(.92); + height: 100%; + width: 100%; + margin: 0; + pointer-events: none; + z-index: 999999 +} \ No newline at end of file diff --git a/src/assets/scss/structure/_sidenav.scss b/src/assets/scss/structure/_sidenav.scss new file mode 100644 index 0000000..b5fca4d --- /dev/null +++ b/src/assets/scss/structure/_sidenav.scss @@ -0,0 +1,636 @@ +// +// _sidenav.scss +// + +.sidenav-menu { + z-index: 1005; + position: fixed; + bottom: 0; + top: 0; + width: $sidenav-width; + background: $sidenav-bg; + box-shadow: var(--#{$prefix}box-shadow-sm); + border-right: $card-border-width solid $sidenav-border-color; + transition: width .25s ease-in-out; + + [data-simplebar] { + height: calc(100% - $topbar-height); + } +} + +// Side-nav +.side-nav { + padding-left: 0; + list-style-type: none; + display: flex; + flex-direction: column; + gap: 5px; + padding-bottom: 50px; + + .side-nav-item { + + .side-nav-link { + display: flex; + align-items: center; + gap: $sidenav-item-gap; + background: transparent; + border: transparent; + position: relative; + white-space: nowrap; + color: $sidenav-item-color; + width: 100%; + transition: color .25s ease-in-out; + line-height: calc($sidenav-item-font-size * 1.25); + font-size: $sidenav-item-font-size; + font-weight: $sidenav-item-font-weight; + padding: $sidenav-item-padding-y $sidenav-item-padding-x; + border-radius: 5px; + font-family: $font-family-secondary; + + &:hover, + &:focus, + &:active { + color: $sidenav-item-hover-color; + } + + .menu-icon { + font-size: $sidenav-item-icon-size; + line-height: $sidenav-item-icon-size; + + i { + font-size: $sidenav-item-icon-size; + line-height: $sidenav-item-icon-size; + } + + svg { + height: $sidenav-item-icon-size; + width: $sidenav-item-icon-size; + } + } + + .menu-text { + text-overflow: ellipsis; + overflow: hidden; + } + + .badge { + margin-left: auto; + } + + &.disabled { + pointer-events: none; + cursor: default; + opacity: 0.5; + } + + &.special-menu { + background-color: var(--#{$prefix}primary) !important; + color: $white !important; + } + } + } + + >.side-nav-item { + padding: 0 10px; + } + + // Multi Level Menu + .sub-menu { + list-style-type: none; + display: flex; + flex-direction: column; + gap: $sidenav-sub-item-gap; + padding-left: 0; + + .side-nav-item { + .side-nav-link { + font-size: $sidenav-sub-item-font-size; + padding: $sidenav-sub-item-padding-y $sidenav-item-padding-x $sidenav-sub-item-padding-y calc($sidenav-item-icon-size + $sidenav-item-padding-x + $sidenav-item-gap); + font-weight: $sidenav-sub-item-font-weight; + font-family: $font-family-base; + } + } + + .sub-menu { + padding-left: 15px; + } + } + + .side-nav-title { + letter-spacing: 0.1em; + pointer-events: none; + cursor: default; + white-space: nowrap; + text-transform: uppercase; + color: $sidenav-item-color; + font-weight: $font-weight-bold; + font-size: calc($sidenav-item-font-size * 0.7); + padding: $sidenav-item-padding-y calc($sidenav-item-padding-x * 2); + } + + // Active Menu + >.side-nav-item.active { + + >button { + color: $sidenav-item-active-color; + background-color: $sidenav-item-active-bg; + + .menu-arrow { + transform: rotate(-180deg); + } + } + + >a.active { + color: $sidenav-item-active-color; + } + + .side-nav-item.active { + >button { + color: $sidenav-item-active-color; + font-weight: $sidenav-item-font-weight; + + .menu-arrow { + transform: rotate(-180deg); + } + } + >a.active { + color: $sidenav-item-active-color; + } + } + } +} + +.menu-arrow { + margin-left: auto; + transition: transform .1s ease-in-out; + + &:before { + content: "\ea5f"; + font-family: "tabler-icons"; + } +} + +[aria-expanded="true"] { + .menu-arrow { + transform: rotate(-180deg); + } +} + + +// sidenav user +.sidenav-user { + padding: 20px; + display: none; + color: $sidenav-item-color; + background: url(../../images/user-bg-pattern.svg); + background-size: cover !important; + margin-bottom: 10px; + border-radius: 5px; + + .sidenav-user-name { + white-space: nowrap; + display: block; + color: $sidenav-item-active-color; + } +} + +html[data-sidenav-user="true"] { + .sidenav-user { + display: block; + } +} + + +// Enlarge Menu (Condensed md size left sidebar ) +html[data-sidenav-size="condensed"] { + + .app-topbar { + z-index: 1005; + margin-left: $sidenav-width-sm; + } + + .content-page { + margin-left: $sidenav-width-sm; + min-height: 1900px; + } + + .sidenav-menu { + position: absolute; + width: $sidenav-width-sm; + + .simplebar-mask, + .simplebar-content-wrapper { + overflow: visible !important; + } + + .simplebar-scrollbar { + display: none !important; + } + + .simplebar-offset { + bottom: 0 !important; + } + + .logo { + z-index: 1; + background: $sidenav-bg; + text-align: center; + padding: 0; + + span.logo-lg { + display: none; + } + + span.logo-sm { + display: block; + } + } + + .side-nav { + gap: 0; + + >.side-nav-item { + padding: 0px; + } + + .side-nav-item { + position: relative; + + .side-nav-link { + transition: none; + border-radius: 0; + padding: calc($sidenav-item-padding-y * 1.75) $sidenav-item-padding-x; + + .menu-text, + .menu-arrow, + .badge { + display: none; + } + + .menu-icon { + display: flex; + justify-content: center; + font-size: calc($sidenav-item-icon-size * 1.25); + line-height: calc($sidenav-item-icon-size * 1.25); + min-width: calc($sidenav-width-sm - $sidenav-item-padding-x - $sidenav-item-padding-x); + + i { + font-size: calc($sidenav-item-icon-size * 1.25); + line-height: calc($sidenav-item-icon-size * 1.25); + } + + svg { + height: calc($sidenav-item-icon-size * 1.25); + width: calc($sidenav-item-icon-size * 1.25); + } + } + } + + .collapse, + .collapsing { + display: none; + height: inherit !important; + transition: none !important; + + .sub-menu { + display: none; + padding: 5px 0; + margin-top: 0; + position: absolute; + left: $sidenav-width-sm; + box-shadow: var(--#{$prefix}box-shadow); + border: $card-border-width solid $sidenav-border-color; + border-top: 0; + background: $sidenav-bg; + border-radius: 0 0 4px 4px; + + .sub-menu { + border-radius: 4px; + } + } + } + + &:hover { + .side-nav-link { + position: relative; + + .menu-text, + .badge { + display: flex; + // visibility: visible; + } + + .side-nav-link::before { + display: none; + } + } + + >.collapse, + >.collapsing { + display: block !important; + transition: none !important; + + >.sub-menu { + display: block; + left: $sidenav-width-sm; + width: calc($sidenav-width - calc($sidenav-width-sm * .65)); + + .side-nav-item:hover { + + >.collapse, + >.collapsing { + + >.sub-menu { + top: 0; + left: calc($sidenav-width - calc($sidenav-width-sm * .65)); + width: calc($sidenav-width - calc($sidenav-width-sm * .65)); + } + } + } + + .menu-arrow { + transform: rotate(-90deg); + display: flex; + } + } + } + } + + .sub-menu { + .side-nav-item { + .side-nav-link { + transition: $transition-base; + padding: calc($sidenav-sub-item-padding-y * 1.5) calc($sidenav-sub-item-padding-x * 1.5); + white-space: inherit; + } + } + } + } + + >.side-nav-item:hover { + >.side-nav-link { + color: $sidenav-item-active-color; + background: $sidenav-bg; + box-shadow: var(--#{$prefix}box-shadow); + width: calc($sidenav-width + calc($sidenav-width-sm * .35)); + border-radius: 4px; + + &[data-bs-toggle="collapse"] { + border-end-end-radius: 0; + } + } + } + } + } + + .side-nav-link::before, + .sidenav-user, + .side-nav-title { + display: none; + } +} + +// Compact Menu +html[data-sidenav-size="compact"] { + + .sidenav-menu { + width: $sidenav-width-md; + + .sidenav-user { + .sidenav-user-set-icon { + display: none; + } + } + + .side-nav { + + .side-nav-title { + text-align: center; + } + + .side-nav-link { + flex-direction: column; + justify-content: center; + gap: calc($sidenav-item-gap * 0.25); + + .side-nav-link::before, + .badge { + display: none; + } + } + + .sub-menu { + padding: 0; + + .side-nav-link { + padding: $sidenav-sub-item-padding-y 0; + + .menu-arrow { + margin: 0; + display: inline-flex; + } + } + } + } + } + + .content-page, + .app-topbar { + margin-left: $sidenav-width-md; + } + + .menu-arrow { + display: none; + } +} + +// Hover View Menu +html[data-sidenav-size="on-hover"] { + + .content-page, + .app-topbar { + margin-left: $sidenav-width-sm; + } + + .sidenav-toggle-button { + display: none; + } + + .sidenav-menu:not(:hover) { + width: $sidenav-width-sm; + + .simplebar-scrollbar:before { + background: transparent; + } + + .logo { + .logo-sm { + display: block; + } + + .logo-lg { + display: none; + } + } + + .side-nav-item { + .side-nav-link { + justify-content: center; + + .menu-text, + .menu-arrow, + .badge { + display: none; + } + } + } + + .side-nav-title { + display: none; + } + + .button-on-hover, + .sidenav-user, + .menu-text { + display: none; + } + + .sub-menu { + height: 0; + opacity: 0; + } + + .menu-icon { + font-size: calc($sidenav-item-icon-size * 1.15); + line-height: calc($sidenav-item-icon-size * 1.15); + + i { + font-size: calc($sidenav-item-icon-size * 1.15); + line-height: calc($sidenav-item-icon-size * 1.15); + } + + svg { + height: calc($sidenav-item-icon-size * 1.15); + width: calc($sidenav-item-icon-size * 1.15); + } + } + } + + .sidenav-menu { + .simplebar-horizontal .simplebar-scrollbar:before { + background: transparent; + } + + .logo { + text-align: left; + } + + &:hover { + z-index: 1045; + } + + .button-on-hover { + display: block; + } + } +} + +// Sidebar sm hover Toggle Menu Button (sm hover active button) +.button-on-hover { + cursor: pointer; + display: none; + right: calc($sidenav-width-sm * 0.5 - $logo-sm-height * 0.7); + top: 0; + position: absolute; + font-size: $sidenav-item-icon-size; + line-height: $topbar-height; + background: transparent; + border: none; + z-index: 1; + color: $sidenav-item-color; + + &:hover, + &:focus, + &:active { + color: $sidenav-item-hover-color; + } +} + +html[data-sidenav-size="on-hover-active"] { + + .sidenav-toggle-button { + display: none; + } + + .sidenav-menu { + + .logo { + text-align: left; + } + + .button-on-hover { + display: block; + color: var(--#{$prefix}primary); + } + } +} + +// Fullscreen Close Button +.button-close-offcanvas { + display: none; + z-index: 1; + position: absolute; + background: transparent; + border: none; + top: 0; + right: calc($sidenav-width-sm * 0.5 - $logo-sm-height * 0.7); + cursor: pointer; + color: $sidenav-item-color; + line-height: $topbar-height; + font-size: $sidenav-item-icon-size; + + &:hover, + &:focus, + &:active { + color: $sidenav-item-hover-color; + } +} + +// Offcanvas Menu +html[data-sidenav-size="offcanvas"] { + + .logo-topbar { + display: inline-block; + + @include media-breakpoint-up(xl) { + min-width: 200px; + } + } + + .content-page, + .app-topbar { + margin-left: 0; + } + + .button-close-offcanvas { + display: block; + } + + .sidenav-menu { + margin-left: calc($sidenav-width * -1); + opacity: 0; + transition: all .25s ease-in-out; + + .logo { + text-align: left; + } + } + + &.sidebar-enable { + .sidenav-menu { + opacity: 1; + z-index: 1055; + margin-left: 0; + } + } +} \ No newline at end of file diff --git a/src/assets/scss/structure/_topbar.scss b/src/assets/scss/structure/_topbar.scss new file mode 100644 index 0000000..cae612f --- /dev/null +++ b/src/assets/scss/structure/_topbar.scss @@ -0,0 +1,261 @@ +// +// _topbar.scss +// + +.app-topbar { + position: sticky; + top: 0; + z-index: 1001; + background: $topbar-bg; + box-shadow: $card-box-shadow; + height: $topbar-height; + margin-left: $sidenav-width; + transition: margin-left .25s ease-in-out; + + .topbar-menu { + display: flex; + justify-content: space-between; + position: relative; + border-bottom: $card-border-width solid $card-border-color; + padding-left: $grid-gutter-width; + padding-right: $grid-gutter-width; + + .topbar-item { + display: flex; + align-items: center; + justify-content: center; + height: $topbar-height; + + .topbar-link { + z-index: 1; + border: none; + background-color: transparent; + cursor: pointer; + display: flex; + align-items: center; + justify-content: center; + cursor: pointer; + color: $topbar-item-color; + position: relative; + + &:hover, + &:active, + &:focus { + color: $topbar-item-hover-color; + } + + } + + .topbar-badge { + position: absolute; + top: -10px; + right: -1px; + } + } + } + + ul { + list-style-type: none; + margin-bottom: 0; + } +} + +// Topbar Logo +.logo-topbar { + float: left; + display: none; + line-height: $topbar-height; + padding: 0 $spacer * 0.5; + + .logo-sm { + display: none; + } + + .logo-light { + display: none; + } + + .logo-dark { + display: block; + } +} + +html[data-topbar-color="dark"], +html[data-bs-theme="dark"] { + .logo-topbar { + .logo-light { + display: block; + } + + .logo-dark { + display: none; + } + } +} + +html[data-topbar-color="dark"], +html[data-topbar-color="gradient"] { + .app-topbar { + .sidenav-toggle-button { + background-color: rgba(var(--#{$prefix}white-rgb), 0.03); + border: 1px dashed rgba(var(--#{$prefix}white-rgb), 0.1) !important; + color: $white !important; + } + } + + &:not([data-bs-theme="dark"]) { + .app-topbar { + .app-search { + .app-search-icon { + color: $topbar-item-color !important; + } + + input::placeholder { + color: $topbar-item-color !important; + opacity: 0.5; + } + } + } + } +} + +.nav-user { + display: flex; + align-items: center; + gap: 10px; + min-height: $topbar-height; +} + +// Notification Close Btn +.dropdown-item { + &:hover { + .noti-close-btn { + display: block !important; + } + } +} + + +@media (max-width: 375px) { + .logo-topbar { + display: none !important; + } +} + +@include media-breakpoint-down(sm) { + .app-topbar { + + .topbar-menu { + position: initial; + + .topbar-badge { + top: 10px; + } + } + + .dropdown { + position: static; + + .dropdown-menu { + width: 90%; + } + } + } +} + +@include media-breakpoint-down(md) { + .logo-topbar { + display: block; + + span.logo-lg { + display: none; + } + + span.logo-sm { + display: block; + } + } +} + +// +// Topbar Search +// +.topbar-search { + width: 230px; + padding: $input-padding-y $input-padding-x; + background-color: $topbar-search-bg !important; + color: $topbar-item-color !important; + border-color: $topbar-search-border !important; + line-height: $input-line-height; + @include border-radius($input-border-radius, 0); +} + +// +// Notification +// +.notification-item { + position: relative; + cursor: pointer; + + .notification-badge { + height: 22px; + width: 22px; + text-align: center; + color: $white; + top: -12px; + right: -8px; + border: 2px solid $card-bg; + line-height: 18px; + font-size: 11px; + } +} + +// Manage for light & dark logo +html[data-menu-color="light"][data-topbar-color="dark"], +html[data-menu-color="light"][data-topbar-color="gradient"], +html[data-menu-color="gray"][data-topbar-color="dark"], +html[data-menu-color="gray"][data-topbar-color="gradient"] { + .sidenav-menu { + .logo { + background: $topbar-bg; + width: calc(100% + 1px); + } + } +} + +.thememode-dropdown { + .dropdown-item { + .form-check-input { + opacity: 0; + } + } + + /* style the parent label when its radio is checked */ + .dropdown-item input[type="radio"]:checked+* { + background-color: red; + color: #fff; + border-radius: 4px; + padding: 4px; + } +} + + +// Fullscreen Toggle +// +.fullscreen-off { + display: block; +} + +.fullscreen-on { + display: none; +} + +.fullscreen-enable { + .fullscreen-off { + display: none; + } + + .fullscreen-on { + display: block; + } +} \ No newline at end of file diff --git a/src/auth/AuthProvider.jsx b/src/auth/AuthProvider.jsx new file mode 100644 index 0000000..7f537b6 --- /dev/null +++ b/src/auth/AuthProvider.jsx @@ -0,0 +1,103 @@ +import { createContext, useCallback, useContext, useEffect, useMemo, useState } from 'react'; +import { configureClient, publicPost, isSuccess } from '@/api/client'; +import { + clearSession, + getLoginDetails, + getSession, + normalizeDomain, + sessionFromVerify, + setLoginDetails, + setSession, +} from '@/auth/storage'; + +const AuthContext = createContext(null); + +export function AuthProvider({ children }) { + const [session, setSessionState] = useState(() => getSession()); + const [ready, setReady] = useState(false); + + const persist = useCallback((next) => { + setSession(next); + setSessionState(next); + }, []); + + const logout = useCallback(() => { + clearSession(); + setSessionState(null); + }, []); + + useEffect(() => { + configureClient({ + onSessionChange: persist, + onLogout: logout, + }); + setReady(true); + }, [persist, logout]); + + const login = useCallback(async ({ domain, email }) => { + const normalized = { + domain: normalizeDomain(domain), + email: (email || '').trim(), + }; + const response = await publicPost('ums', 'auth/login', normalized); + if (!isSuccess(response)) { + throw new Error(response?.message || 'Login failed'); + } + setLoginDetails(normalized); + return response.data; + }, []); + + const verify = useCallback(async (secret) => { + const details = getLoginDetails(); + if (!details?.email || !details?.domain) { + throw new Error('Please start login again'); + } + const response = await publicPost('ums', 'auth/verify', { + ...details, + ...secret, + device: 'portal', + }); + if (!isSuccess(response)) { + throw new Error(response?.message || 'Verification failed'); + } + const next = sessionFromVerify(response.data); + persist(next); + setLoginDetails(null); + return next; + }, [persist]); + + const hasPermission = useCallback( + (key) => { + const permissions = session?.permissions || []; + return permissions.includes(key); + }, + [session], + ); + + const value = useMemo( + () => ({ + ready, + session, + user: session?.user || null, + permissions: session?.permissions || [], + roles: session?.roles || [], + domain: session?.domain || session?.user?.domain || '', + isAuthenticated: Boolean(session?.access_token), + login, + verify, + logout, + hasPermission, + }), + [ready, session, login, verify, logout, hasPermission], + ); + + return {children}; +} + +export function useAuth() { + const ctx = useContext(AuthContext); + if (!ctx) { + throw new Error('useAuth must be used within AuthProvider'); + } + return ctx; +} diff --git a/src/auth/GuestOnly.jsx b/src/auth/GuestOnly.jsx new file mode 100644 index 0000000..8acec03 --- /dev/null +++ b/src/auth/GuestOnly.jsx @@ -0,0 +1,15 @@ +import { Navigate, Outlet } from 'react-router'; +import { useAuth } from '@/auth/AuthProvider'; +import Loader from '@/components/Loader'; + +export default function GuestOnly() { + const { ready, isAuthenticated } = useAuth(); + + if (!ready) { + return ; + } + if (isAuthenticated) { + return ; + } + return ; +} diff --git a/src/auth/RequireAuth.jsx b/src/auth/RequireAuth.jsx new file mode 100644 index 0000000..0a4f074 --- /dev/null +++ b/src/auth/RequireAuth.jsx @@ -0,0 +1,16 @@ +import { Navigate, Outlet, useLocation } from 'react-router'; +import { useAuth } from '@/auth/AuthProvider'; +import Loader from '@/components/Loader'; + +export default function RequireAuth() { + const { ready, isAuthenticated } = useAuth(); + const location = useLocation(); + + if (!ready) { + return ; + } + if (!isAuthenticated) { + return ; + } + return ; +} diff --git a/src/auth/storage.js b/src/auth/storage.js new file mode 100644 index 0000000..8566367 --- /dev/null +++ b/src/auth/storage.js @@ -0,0 +1,74 @@ +const SESSION_KEY = 'rapport.session'; +const LOGIN_DETAILS_KEY = 'logindetails'; + +export function getSession() { + try { + const raw = sessionStorage.getItem(SESSION_KEY); + return raw ? JSON.parse(raw) : null; + } catch { + return null; + } +} + +export function setSession(session) { + if (!session) { + sessionStorage.removeItem(SESSION_KEY); + return; + } + sessionStorage.setItem(SESSION_KEY, JSON.stringify(session)); +} + +export function clearSession() { + sessionStorage.removeItem(SESSION_KEY); + sessionStorage.removeItem(LOGIN_DETAILS_KEY); + const keys = []; + for (let i = 0; i < sessionStorage.length; i += 1) { + const key = sessionStorage.key(i); + if (key && key.startsWith('rapport.roleMap')) keys.push(key); + } + keys.forEach((key) => sessionStorage.removeItem(key)); +} + +export function getAccessToken() { + return getSession()?.access_token || ''; +} + +export function getRefreshToken() { + return getSession()?.refresh_token || ''; +} + +export function getLoginDetails() { + try { + const raw = sessionStorage.getItem(LOGIN_DETAILS_KEY); + return raw ? JSON.parse(raw) : null; + } catch { + return null; + } +} + +export function setLoginDetails(details) { + if (!details) { + sessionStorage.removeItem(LOGIN_DETAILS_KEY); + return; + } + sessionStorage.setItem(LOGIN_DETAILS_KEY, JSON.stringify(details)); +} + +export function normalizeDomain(domain) { + const value = (domain || '').trim().toLowerCase(); + return value === 'nebulisation' ? 'team3' : value; +} + +export function sessionFromVerify(data) { + const user = data?.user || {}; + return { + access_token: data.access_token, + refresh_token: data.refresh_token, + expiresin: data.expiresin, + user, + permissions: data.permissions || [], + roles: user.roles || data.roles || [], + hierarchy: user.hierarchy || '', + domain: user.domain || '', + }; +} diff --git a/src/components/AppLogo.jsx b/src/components/AppLogo.jsx new file mode 100644 index 0000000..338f438 --- /dev/null +++ b/src/components/AppLogo.jsx @@ -0,0 +1,17 @@ +import { Link } from 'react-router'; +import logo from '@/assets/images/rapport-logo.png'; + +const AppLogo = ({ height }) => { + return ( + <> + + Rapport + + + Rapport + + + ); +}; + +export default AppLogo; diff --git a/src/components/AppWrapper.jsx b/src/components/AppWrapper.jsx new file mode 100644 index 0000000..b071df0 --- /dev/null +++ b/src/components/AppWrapper.jsx @@ -0,0 +1,19 @@ +import { LayoutProvider } from '@/context/useLayoutContext'; +import { NotificationProvider } from '@/context/useNotificationContext'; +import { AuthProvider } from '@/auth/AuthProvider'; +import { Suspense } from 'react'; +import Loader from '@/components/Loader'; + +const AppWrapper = ({ children }) => { + return ( + + + + }>{children} + + + + ); +}; + +export default AppWrapper; diff --git a/src/components/CustomApexChart.jsx b/src/components/CustomApexChart.jsx new file mode 100644 index 0000000..6750e9d --- /dev/null +++ b/src/components/CustomApexChart.jsx @@ -0,0 +1,22 @@ +import Loader from '@/components/Loader'; +import { useLayoutContext } from '@/context/useLayoutContext'; +import { Suspense, useMemo } from 'react'; +import ReactApexChart from 'react-apexcharts'; +const CustomApexChart = ({ + type, + height, + width = '100%', + getOptions, + series, + className +}) => { + const { + skin, + theme + } = useLayoutContext(); + const options = useMemo(() => getOptions(), [skin, theme]); + return }> + + ; +}; +export default CustomApexChart; \ No newline at end of file diff --git a/src/components/CustomChartJs.jsx b/src/components/CustomChartJs.jsx new file mode 100644 index 0000000..f4d5aa5 --- /dev/null +++ b/src/components/CustomChartJs.jsx @@ -0,0 +1,130 @@ +import { Suspense, useEffect, useState } from 'react'; +import Loader from '@/components/Loader'; +import { useLayoutContext } from '@/context/useLayoutContext'; +import { CategoryScale, Chart as ChartJS, Decimation, Legend, LinearScale, SubTitle, Title, Tooltip } from 'chart.js'; +import { Chart } from 'react-chartjs-2'; +import { merge } from 'lodash'; +import { getColor } from '@/helpers/color'; +function getDefaultChartOptions() { + if (typeof window === 'undefined') { + return {}; + } + const bodyFont = getComputedStyle(document.body).fontFamily.trim(); + return { + responsive: true, + maintainAspectRatio: false, + layout: { + padding: { + top: -10 + } + }, + scales: { + x: { + ticks: { + font: { + family: bodyFont + }, + color: getColor('secondary-color'), + display: true + }, + grid: { + display: false + }, + border: { + display: false + } + }, + y: { + ticks: { + font: { + family: bodyFont + }, + color: getColor('secondary-color') + }, + grid: { + display: true, + color: getColor('chart-border-color'), + lineWidth: 1 + }, + border: { + display: false, + dash: [5, 5] + } + } + }, + plugins: { + legend: { + display: true, + position: 'top', + labels: { + font: { + family: bodyFont + }, + color: getColor('secondary-color'), + usePointStyle: true, + pointStyle: 'circle', + boxWidth: 8, + boxHeight: 8, + padding: 15 + } + }, + tooltip: { + enabled: true, + titleFont: { + family: bodyFont + }, + bodyFont: { + family: bodyFont + } + } + } + }; +} +const CustomChartJs = ({ + type, + height = '100%', + width = '100%', + getOptions, + plugins, + style +}) => { + ChartJS.register(Tooltip, Legend, Title, SubTitle, Decimation, CategoryScale, LinearScale, plugins ?? []); + const { + skin, + theme + } = useLayoutContext(); + const [mounted, setMounted] = useState(false); + useEffect(() => { + setMounted(true); + }, []); + const [chartState, setChartState] = useState({ + data: { + labels: [], + datasets: [] + }, + options: {} + }); + useEffect(() => { + if (!mounted) return; + const delay = theme === 'system' ? 10 : 0; + const timer = setTimeout(() => { + const { + data, + options + } = getOptions(); + const mergedOptions = merge({}, getDefaultChartOptions(), options); + setChartState({ + data, + options: mergedOptions + }); + }, delay); + return () => clearTimeout(timer); + }, [mounted, skin, theme, getOptions]); + return }> + + ; +}; +export default CustomChartJs; \ No newline at end of file diff --git a/src/components/CustomQuill.jsx b/src/components/CustomQuill.jsx new file mode 100644 index 0000000..7ae08b7 --- /dev/null +++ b/src/components/CustomQuill.jsx @@ -0,0 +1,33 @@ +import { lazy } from 'react'; +import Quill from 'quill'; +import ReactDOMServer from 'react-dom/server'; +import { TbAlignCenter, TbAlignJustified, TbAlignLeft, TbAlignRight, TbBackground, TbBlockquote, TbBold, TbCode, TbH1, TbH2, TbH3, TbIndentDecrease, TbIndentIncrease, TbItalic, TbLetterT, TbLink, TbList, TbPaint, TbPhoto, TbStrikethrough, TbSubscript, TbSuperscript, TbTrash, TbUnderline, TbVideo } from 'react-icons/tb'; +const icons = Quill.import('ui/icons'); +icons['bold'] = ReactDOMServer.renderToStaticMarkup(); +icons['italic'] = ReactDOMServer.renderToStaticMarkup(); +icons['underline'] = ReactDOMServer.renderToStaticMarkup(); +icons['strike'] = ReactDOMServer.renderToStaticMarkup(); +icons['list'] = ReactDOMServer.renderToStaticMarkup(); +icons['bullet'] = ReactDOMServer.renderToStaticMarkup(); +icons['indent'] = ReactDOMServer.renderToStaticMarkup(); +icons['outdent'] = ReactDOMServer.renderToStaticMarkup(); +icons['link'] = ReactDOMServer.renderToStaticMarkup(); +icons['image'] = ReactDOMServer.renderToStaticMarkup(); +icons['video'] = ReactDOMServer.renderToStaticMarkup(); +icons['code-block'] = ReactDOMServer.renderToStaticMarkup(); +icons['clean'] = ReactDOMServer.renderToStaticMarkup(); +icons['color'] = ReactDOMServer.renderToStaticMarkup(); +icons['background'] = ReactDOMServer.renderToStaticMarkup(); +icons['script']['super'] = ReactDOMServer.renderToStaticMarkup(); +icons['script']['sub'] = ReactDOMServer.renderToStaticMarkup(); +icons['blockquote'] = ReactDOMServer.renderToStaticMarkup(); +icons['align'][''] = ReactDOMServer.renderToStaticMarkup(); +icons['align']['center'] = ReactDOMServer.renderToStaticMarkup(); +icons['align']['right'] = ReactDOMServer.renderToStaticMarkup(); +icons['align']['justify'] = ReactDOMServer.renderToStaticMarkup(); +icons['header']['1'] = ReactDOMServer.renderToStaticMarkup(); +icons['header']['2'] = ReactDOMServer.renderToStaticMarkup(); +icons['header']['3'] = ReactDOMServer.renderToStaticMarkup(); +icons['header'][''] = ReactDOMServer.renderToStaticMarkup(); +const CustomQuill = lazy(() => import('react-quill-new')); +export default CustomQuill; \ No newline at end of file diff --git a/src/components/EntityForm.jsx b/src/components/EntityForm.jsx new file mode 100644 index 0000000..1cb68b2 --- /dev/null +++ b/src/components/EntityForm.jsx @@ -0,0 +1,579 @@ +import { useCallback, useEffect, useState } from 'react'; +import { Link, useLocation, useNavigate, useSearchParams } from 'react-router'; +import { Controller, useForm } from 'react-hook-form'; +import Select from 'react-select'; +import Flatpickr from 'react-flatpickr'; +import { Button, Card, Col, Container, Form, Row, Spinner } from 'react-bootstrap'; +import { signedGet, signedPost, isSuccess } from '@/api/client'; +import PageBreadcrumb from '@/components/PageBreadcrumb'; +import { + CombinedMetricsField, + ColorRangesField, + MappingField, + RankingAttributesField, +} from '@/components/metric/MetricFieldControls'; +import MilestoneMappingField from '@/components/recognition/MilestoneMappingField'; +import EmailNotificationRulesField from '@/components/form/EmailNotificationRulesField'; +import RankRolesField from '@/components/form/RankRolesField'; +import ReminderRowsField from '@/components/form/ReminderRowsField'; +import DependentSelectField from '@/components/form/DependentSelectField'; +import BigMultiSelectField from '@/components/form/BigMultiSelectField'; +import S3FileField from '@/components/S3FileField'; +import { parseCombinedMetrics } from '@/helpers/metric'; + +function toOptions(values = {}) { + return Object.entries(values).map(([value, label]) => ({ value, label })); +} + +function defaultValue(field, item) { + const fromItem = item?.[field.key]; + const raw = fromItem !== undefined && fromItem !== null ? fromItem : field.default; + if (raw === undefined || raw === null) { + if (field.type === 'multiselect' || field.type === 'bigmultiselect' || field.type === 'checkbox') return []; + if (field.type === 'mapping' || field.type === 'color_ranges' || field.type === 'ranking_attributes' || field.type === 'combined_metrics' || field.type === 'milestonemapping' || field.type === 'email_notifications' || field.type === 'rank_roles' || field.type === 'reminders') { + return []; + } + if (field.type === 'approverlist') return ['l1manager']; + if (field.type === 'multitextbox') return {}; + return ''; + } + if (field.type === 'combined_metrics') return parseCombinedMetrics(raw); + if (field.type === 'email_notifications') { + if (typeof raw === 'string' && raw.trim()) { + try { + const parsed = JSON.parse(raw); + return Array.isArray(parsed) ? parsed : []; + } catch { + return []; + } + } + return Array.isArray(raw) ? raw : []; + } + if ((field.type === 'mapping' || field.type === 'color_ranges' || field.type === 'ranking_attributes' || field.type === 'milestonemapping' || field.type === 'rank_roles' || field.type === 'reminders') && !Array.isArray(raw)) { + return []; + } + if ((field.type === 'multiselect' || field.type === 'bigmultiselect') && typeof raw === 'string') { + return raw.split(/[#~,]/).filter(Boolean); + } + if (field.type === 'checkbox' && typeof raw === 'string') { + return raw.split(/[#~,]/).filter(Boolean); + } + if (field.type === 'approverlist') { + return Array.isArray(raw) && raw.length ? raw : ['l1manager']; + } + if (field.type === 'multitextbox' && typeof raw === 'string') { + try { + const parsed = JSON.parse(raw); + if (Array.isArray(parsed)) { + return parsed.reduce((acc, row) => { + if (row?.role) acc[row.role] = row.otp || ''; + return acc; + }, {}); + } + return parsed && typeof parsed === 'object' ? parsed : {}; + } catch { + return {}; + } + } + if (field.type === 'year_start_month' || field.key === 'year_start_month') { + return String(raw); + } + return raw; +} + +function isFieldVisible(field, values) { + if (field.workflowOnly && values?.workflow !== 'yes') return false; + if (!field.showIf) return true; + return Object.entries(field.showIf).every(([key, expected]) => { + const actual = values?.[key]; + if (Array.isArray(expected)) return expected.includes(actual); + return actual === expected; + }); +} + +function applyExclusive(next, previous, exclusiveValue) { + if (!exclusiveValue) return next; + const addedExclusive = next.includes(exclusiveValue) && !(previous || []).includes(exclusiveValue); + if (addedExclusive) return [exclusiveValue]; + if (next.includes(exclusiveValue) && next.length > 1) { + return next.filter((value) => value !== exclusiveValue); + } + return next; +} + +function FieldControl({ field, control, register, moduleName, onUploadingChange }) { + const common = { className: 'form-control', id: `field-${field.key}` }; + if (field.type === 'hidden') { + return ; + } + if (['text', 'email', 'tel', 'number', 'url', 'password'].includes(field.type)) { + return ( + + ); + } + if (field.type === 'date' || field.type === 'datetime') { + const enableTime = field.type === 'datetime'; + return ( + ( + rhf.onChange(str)} + options={{ + enableTime, + dateFormat: enableTime ? 'Y-m-d H:i' : 'Y-m-d', + allowInput: true, + }} + /> + )} + /> + ); + } + if (field.type === 'image' || field.type === 'logo' || field.type === 'file') { + return ( + ( + + )} + /> + ); + } + if (field.type === 'textarea') { + return ( + + ); + } + if (field.type === 'datalist') { + const listId = `datalist-${field.key}`; + return ( + <> + + + {Object.entries(field.values || {}).map(([value, label]) => ( + + ))} + + + ); + } + if (field.type === 'select') { + return ( + + + {Object.entries(field.values || {}).map(([value, label]) => ( + + ))} + + ); + } + if (field.type === 'color') { + return ( + ( +
+ rhf.onChange(e.target.value)} + style={{ width: 50, padding: 2 }} + /> + rhf.onChange(e.target.value)} + placeholder="#RRGGBB" + /> +
+ )} + /> + ); + } + if (field.type === 'yesno') { + return ( +
+ + +
+ ); + } + if (field.type === 'radio') { + return ( +
+ {Object.entries(field.values || {}).map(([value, label]) => ( + + ))} +
+ ); + } + if (field.type === 'checkbox') { + return ( +
+ {Object.entries(field.values || {}).map(([value, label]) => ( + + ))} +
+ ); + } + if (field.type === 'bigmultiselect') { + return ; + } + if (field.type === 'multiselect') { + const options = toOptions(field.values); + return ( + ( + +
+
+ + + +
+

Drop files here or click to upload.

+

You can drag images here, or browse files via the button below.

+ +
+ } + + + {!!files?.length && files?.map((file, index) => onRemove(index)} />)} + ; +}; +function FileCard({ + file, + onRemove +}) { + return
+ +
+ + {isFileWithPreview(file) && } + + + {file.name} + +

{formatBytes(file.size)}

+ + + + +
+
+
+
; +} +function FilePreview({ + file +}) { + if (file.type.startsWith('image/')) { + return {file.name}; + } + return <> + + ; +} +export default FileUploader; \ No newline at end of file diff --git a/src/components/ListTableControls.jsx b/src/components/ListTableControls.jsx new file mode 100644 index 0000000..48965f9 --- /dev/null +++ b/src/components/ListTableControls.jsx @@ -0,0 +1,61 @@ +import { Button, Form, FormControl } from 'react-bootstrap'; + +export const LIST_PAGE_SIZES = [10, 25, 50, 100]; + +export function ListTableToolbar({ + pageSize, + onPageSizeChange, + search, + onSearchChange, + onSearchKeyDown, + searchPlaceholder = 'Search...', +}) { + return ( +
+
+ Show + onPageSizeChange(Number(e.target.value))} + > + {LIST_PAGE_SIZES.map((size) => ( + + ))} + + entries +
+ onSearchChange(e.target.value)} + onKeyDown={onSearchKeyDown} + /> +
+ ); +} + +export function ListTableFooter({ pageIndex, pageSize, total, onPrev, onNext }) { + const start = total === 0 ? 0 : pageIndex * pageSize + 1; + const end = Math.min((pageIndex + 1) * pageSize, total); + return ( +
+
+ Showing {start} to {end} of {total} entries +
+
+ + +
+
+ ); +} diff --git a/src/components/Loader.jsx b/src/components/Loader.jsx new file mode 100644 index 0000000..66ecafd --- /dev/null +++ b/src/components/Loader.jsx @@ -0,0 +1,19 @@ +import { Spinner } from 'react-bootstrap'; +const Loader = ({ + height = '100%', + width = '100%', + overlay = false +}) => { + return
+ + {overlay &&
} +
; +}; +export default Loader; \ No newline at end of file diff --git a/src/components/NestableList.jsx b/src/components/NestableList.jsx new file mode 100644 index 0000000..6dce9ee --- /dev/null +++ b/src/components/NestableList.jsx @@ -0,0 +1,106 @@ +import { closestCenter, DndContext, DragOverlay, PointerSensor, useSensor, useSensors } from '@dnd-kit/core'; +import { arrayMove, SortableContext, useSortable, verticalListSortingStrategy } from '@dnd-kit/sortable'; +import { CSS } from '@dnd-kit/utilities'; +import { useState } from 'react'; +const Item = ({ + id, + depth = 0 +}) => { + const { + attributes, + listeners, + setNodeRef, + transform, + transition, + isDragging + } = useSortable({ + id + }); + const style = { + transform: CSS.Transform.toString(transform), + transition, + padding: '8px 12px', + marginLeft: depth * 20, + background: isDragging ? '#e0e0e0' : '#fff', + border: '1px solid #ccc', + borderRadius: 4, + marginBottom: 4, + cursor: 'grab' + }; + return
+ {id} +
; +}; +export default function NestableList() { + const [items, setItems] = useState([{ + id: 'Item 1', + depth: 0 + }, { + id: 'Item 2', + depth: 0 + }, { + id: 'Item 2.1', + depth: 1 + }, { + id: 'Item 2.2', + depth: 1 + }, { + id: 'Item 3', + depth: 0 + }]); + const [activeId, setActiveId] = useState(null); + const [activeItem, setActiveItem] = useState(undefined); + const [shadowDepth, setShadowDepth] = useState(0); + const sensors = useSensors(useSensor(PointerSensor)); + const handleDragStart = event => { + const item = items.find(i => i.id === event.active.id); + setActiveId(event.active.id); + if (item) setActiveItem(item); + setShadowDepth(item?.depth); + }; + const handleDragMove = event => { + if (!activeItem) return; + const offsetX = event.delta.x; + const newDepth = Math.max(0, Math.min(5, activeItem?.depth + Math.round(offsetX / 20))); + setShadowDepth(newDepth); + }; + const handleDragEnd = event => { + const { + active, + over + } = event; + if (!over || active.id === over.id) { + resetDrag(); + return; + } + const oldIndex = items.findIndex(i => i.id === active.id); + const newIndex = items.findIndex(i => i.id === over.id); + const reordered = arrayMove(items, oldIndex, newIndex).map(item => item.id === active.id ? { + ...item, + depth: shadowDepth + } : item); + setItems(reordered); + resetDrag(); + }; + const resetDrag = () => { + setActiveId(null); + setActiveItem(undefined); + setShadowDepth(0); + }; + return + i.id)} strategy={verticalListSortingStrategy}> + {items.map(item => )} + + + + {activeItem &&
+ {activeItem.id} +
} +
+
; +} \ No newline at end of file diff --git a/src/components/OTPInput.jsx b/src/components/OTPInput.jsx new file mode 100644 index 0000000..9f51ab6 --- /dev/null +++ b/src/components/OTPInput.jsx @@ -0,0 +1,37 @@ +import { useRef } from 'react'; +import { FormControl, FormLabel } from 'react-bootstrap'; +const OTPInput = ({ + code, + setCode, + inputClassName, + label, + labelClassName +}) => { + const inputsRef = useRef([]); + const handleChange = (e, idx) => { + const value = e.target.value; + if (!/^\d?$/.test(value)) return; + const newCode = [...code]; + newCode[idx] = value; + setCode(newCode); + if (value && idx < inputsRef.current.length - 1) { + inputsRef.current[idx + 1]?.focus(); + } + }; + const handleKeyDown = (e, idx) => { + if (e.key === 'Backspace' && !code[idx] && idx > 0) { + inputsRef.current[idx - 1]?.focus(); + } + }; + return <> + + {label} * + +
+ {code.map((number, idx) => handleChange(e, idx)} onKeyDown={e => handleKeyDown(e, idx)} ref={el => { + inputsRef.current[idx] = el; + }} autoComplete="one-time-code" />)} +
+ ; +}; +export default OTPInput; \ No newline at end of file diff --git a/src/components/PageBreadcrumb.jsx b/src/components/PageBreadcrumb.jsx new file mode 100644 index 0000000..c3a7e58 --- /dev/null +++ b/src/components/PageBreadcrumb.jsx @@ -0,0 +1,33 @@ +import { Link } from "react-router"; +import { BreadcrumbItem } from 'react-bootstrap'; +import { TbChevronRight } from 'react-icons/tb'; +import PageMetaData from "@/components/PageMetaData"; +const PageBreadcrumb = ({ + title, + subtitle +}) => { + return <> + +
+
+

{title}

+
+
+
+ + Rapport + {' '} + + {subtitle && <> + + {subtitle} + {' '} + + } + {title} +
+
+
+ ; +}; +export default PageBreadcrumb; \ No newline at end of file diff --git a/src/components/PageMetaData.jsx b/src/components/PageMetaData.jsx new file mode 100644 index 0000000..987684c --- /dev/null +++ b/src/components/PageMetaData.jsx @@ -0,0 +1,17 @@ +const defaultPageMetaData = { + title: 'Rapport', + description: 'Rapport admin portal', + keywords: 'Rapport, admin' +}; +const PageMetaData = ({ + title, + description = defaultPageMetaData.description, + keywords = defaultPageMetaData.keywords +}) => { + return <> + {title ? `${title} | ${defaultPageMetaData.title}` : defaultPageMetaData.title} + + + ; +}; +export default PageMetaData; \ No newline at end of file diff --git a/src/components/PasswordInputWithStrength.jsx b/src/components/PasswordInputWithStrength.jsx new file mode 100644 index 0000000..addbf8a --- /dev/null +++ b/src/components/PasswordInputWithStrength.jsx @@ -0,0 +1,41 @@ +import { FormControl, FormLabel } from 'react-bootstrap'; +import { LuKeyRound } from 'react-icons/lu'; +const calculatePasswordStrength = password => { + let strength = 0; + if (password.length >= 8) strength++; + if (/[A-Z]/.test(password)) strength++; + if (/\d/.test(password)) strength++; + if (/[\W_]/.test(password)) strength++; + return strength; +}; +const PasswordInputWithStrength = ({ + password, + setPassword, + id, + label, + name, + placeholder, + showIcon, + labelClassName, + inputClassName +}) => { + const strength = calculatePasswordStrength(password); + const strengthBars = new Array(4).fill(0); + return <> + {label && + {label} * + } + +
+ setPassword(e.target.value)} /> + {showIcon && } +
+ +
+ {strengthBars.map((_, i) =>
)} +
+ +

Use 8+ characters with letters, numbers & symbols.

+ ; +}; +export default PasswordInputWithStrength; \ No newline at end of file diff --git a/src/components/Rating.jsx b/src/components/Rating.jsx new file mode 100644 index 0000000..ee47420 --- /dev/null +++ b/src/components/Rating.jsx @@ -0,0 +1,16 @@ +import clsx from 'clsx'; +import { TbStar, TbStarFilled, TbStarHalfFilled } from 'react-icons/tb'; +const Rating = ({ + rating, + className +}) => { + const fullStars = Math.floor(rating); + const halfStar = rating % 1 !== 0; + const emptyStars = 5 - fullStars - (halfStar ? 1 : 0); + return + {[...Array(fullStars)].map((_, i) => )} + {halfStar && } + {[...Array(emptyStars)].map((_, i) => )} + ; +}; +export default Rating; \ No newline at end of file diff --git a/src/components/S3FileField.jsx b/src/components/S3FileField.jsx new file mode 100644 index 0000000..86ede5f --- /dev/null +++ b/src/components/S3FileField.jsx @@ -0,0 +1,217 @@ +import { useCallback, useEffect, useRef, useState } from 'react'; +import Dropzone from 'react-dropzone'; +import { Button } from 'react-bootstrap'; +import { TbCloudUpload, TbX } from 'react-icons/tb'; +import clsx from 'clsx'; +import FileExtensionWithPreview from '@/components/FileExtensionWithPreview'; +import { formatBytes } from '@/helpers/file'; +import { + FILE_EXTENSIONS, + IMAGE_EXTENSIONS, + IMPORT_EXTENSIONS, + S3_MIMES, + uploadFileToS3, +} from '@/helpers/s3Upload'; + +const MAX_SIZE = 500 * 1024 * 1024; + +function extensionsFor(field) { + if (Array.isArray(field?.allowedExtensions) && field.allowedExtensions.length) { + return field.allowedExtensions; + } + if (field?.type === 'file' && field.accept === 'import') return IMPORT_EXTENSIONS; + if (field?.type === 'image' || field?.type === 'logo') return IMAGE_EXTENSIONS; + return FILE_EXTENSIONS; +} + +function acceptFromExtensions(exts) { + return exts.reduce((accept, ext) => { + const mime = S3_MIMES[ext]; + if (!mime) return accept; + const dotted = `.${ext}`; + if (!accept[mime]) accept[mime] = []; + if (!accept[mime].includes(dotted)) accept[mime].push(dotted); + return accept; + }, {}); +} + +function isImagePath(value, type) { + if (type?.startsWith('image/')) return true; + return /\.(png|jpe?g|gif|webp|svg)(\?|$)/i.test(value || ''); +} + +function fileNameFromUrl(url) { + try { + return decodeURIComponent(new URL(url).pathname.split('/').pop() || 'file'); + } catch { + return String(url || '').split('/').pop() || 'file'; + } +} + +function rejectMessage(rejected, exts) { + const code = rejected?.[0]?.errors?.[0]?.code; + if (code === 'file-too-large') return 'The file size is too big (500MB max).'; + if (code === 'file-invalid-type') return `The file is not allowed (${exts.join(', ')} only).`; + return rejected?.[0]?.errors?.[0]?.message || 'File was rejected'; +} + +export default function S3FileField({ + field, + value = '', + onChange, + moduleName, + required = false, + onUploadingChange, +}) { + const [uploading, setUploading] = useState(false); + const [error, setError] = useState(''); + const [localFile, setLocalFile] = useState(null); + const previewUrlRef = useRef(''); + const onChangeRef = useRef(onChange); + const uploadingRef = useRef(onUploadingChange); + + onChangeRef.current = onChange; + uploadingRef.current = onUploadingChange; + + const exts = extensionsFor(field); + const accept = acceptFromExtensions(exts); + const isImageField = field?.type === 'image' || field?.type === 'logo'; + + const clearPreview = () => { + if (previewUrlRef.current) { + URL.revokeObjectURL(previewUrlRef.current); + previewUrlRef.current = ''; + } + }; + + useEffect(() => () => clearPreview(), []); + + const onDrop = useCallback( + async (accepted, rejected) => { + if (rejected?.length) { + setError(rejectMessage(rejected, exts)); + return; + } + const file = accepted[0]; + if (!file) return; + clearPreview(); + const preview = file.type.startsWith('image/') ? URL.createObjectURL(file) : ''; + previewUrlRef.current = preview; + setLocalFile({ name: file.name, size: file.size, type: file.type, preview }); + setError(''); + setUploading(true); + uploadingRef.current?.(true); + try { + const url = await uploadFileToS3(file, { moduleName: field?.uploadModule || moduleName }); + onChangeRef.current?.(url); + } catch (err) { + setError(err.message || 'Upload failed'); + onChangeRef.current?.(''); + setLocalFile(null); + clearPreview(); + } finally { + setUploading(false); + uploadingRef.current?.(false); + } + }, + [exts, field?.uploadModule, moduleName], + ); + + const onRemove = (event) => { + event.stopPropagation(); + if (uploading) return; + clearPreview(); + setLocalFile(null); + setError(''); + onChange?.(''); + }; + + const previewSrc = localFile?.preview || (isImagePath(value, localFile?.type) ? value : ''); + const displayName = localFile?.name || (value ? fileNameFromUrl(value) : ''); + const hasFile = Boolean(localFile || value); + + return ( +
+ + + {({ getRootProps, getInputProps, isDragActive }) => ( +
+ +
+ {hasFile ? ( + previewSrc ? ( + {displayName} + ) : ( + + ) + ) : ( + + + + + + )} +
+
+ {hasFile + ? displayName + : isImageField + ? 'Drop or click to upload an image' + : 'Drop or click to upload a file'} +
+
+ {uploading + ? 'Uploading...' + : hasFile + ? localFile?.size + ? formatBytes(localFile.size) + : 'Uploaded' + : `${exts.join(', ')} · 500MB max`} +
+
+ {hasFile ? ( + + ) : ( + + )} +
+
+ )} +
+ + {error ?
{error}
: null} +
+ ); +} diff --git a/src/components/Spinner.jsx b/src/components/Spinner.jsx new file mode 100644 index 0000000..183d853 --- /dev/null +++ b/src/components/Spinner.jsx @@ -0,0 +1,15 @@ +import React from 'react'; +const Spinner = ({ + tag = 'div', + type = 'bordered', + className, + color, + size, + children +}) => { + const Tag = tag || 'div'; + return + {children} + ; +}; +export default Spinner; \ No newline at end of file diff --git a/src/components/TouchSpinInput.jsx b/src/components/TouchSpinInput.jsx new file mode 100644 index 0000000..c56ac94 --- /dev/null +++ b/src/components/TouchSpinInput.jsx @@ -0,0 +1,66 @@ +import clsx from 'clsx'; +import { useEffect, useState } from 'react'; +import { Button, FormControl } from 'react-bootstrap'; +import { TbMinus, TbPlus } from 'react-icons/tb'; +const TouchSpinInput = ({ + min = 0, + max = 100, + value, + setValue, + className, + inputClassName, + buttonClassName, + variant = 'light', + size, + ...props +}) => { + const [localValue, setLocalValue] = useState(value ?? 0); + const increment = () => { + if (!props.readOnly) { + setLocalValue(prev => { + if (prev >= max) return prev; + return prev + 1; + }); + } + }; + const decrement = () => { + if (!props.readOnly) { + setLocalValue(prev => { + if (prev <= min) return prev; + return prev - 1; + }); + } + }; + const handleChange = e => { + const val = e.target.value; + if (val === '') { + setLocalValue(0); + return; + } + const newValue = parseInt(val); + if (newValue < min) { + setLocalValue(min); + return; + } + if (newValue > max) { + setLocalValue(max); + return; + } + setLocalValue(newValue); + }; + useEffect(() => { + if (setValue) { + setValue(localValue); + } + }, [localValue]); + return
+ + + +
; +}; +export default TouchSpinInput; \ No newline at end of file diff --git a/src/components/cards/ChatCard.jsx b/src/components/cards/ChatCard.jsx new file mode 100644 index 0000000..10213fb --- /dev/null +++ b/src/components/cards/ChatCard.jsx @@ -0,0 +1,74 @@ +import user2 from '@/assets/images/users/user-2.jpg'; +import user5 from '@/assets/images/users/user-5.jpg'; +import { useState } from 'react'; +import { Button, Card, CardHeader } from 'react-bootstrap'; +import { LuMessageSquare } from 'react-icons/lu'; +import { TbClock, TbSend2 } from 'react-icons/tb'; +import { messages } from '@/components/cards/data'; +import SimpleBar from "simplebar-react"; +const ChatCard = () => { + const [chatMessages, setChatMessages] = useState(messages); + const [input, setInput] = useState(''); + const handleSend = e => { + e.preventDefault(); + const text = input.trim(); + if (!text) return; + const now = new Date(); + const h = now.getHours(); + const m = now.getMinutes(); + const ampm = h >= 12 ? 'pm' : 'am'; + const hour = h % 12 || 12; + const min = m < 10 ? `0${m}` : m; + const timeStr = `${hour}:${min} ${ampm}`; + setChatMessages(prev => [...prev, { + message: text, + time: timeStr, + fromUser: true, + avatar: user2 + }]); + setInput(''); + setTimeout(() => { + setChatMessages(prev => [...prev, { + message: text, + time: timeStr, + fromUser: false, + avatar: user5 + }]); + }, 1000); + }; + return + +

Chat

+
+ + + {chatMessages.map((message, idx) =>
+ {!message.fromUser && User} + +
+
{message.message}
+
+ {message.time} +
+
+ + {message.fromUser && User} +
)} +
+ +
+
+
+ setInput(e.target.value)} className="form-control bg-light-subtle border-light" placeholder="Enter message..." /> + +
+ +
+
+
; +}; +export default ChatCard; \ No newline at end of file diff --git a/src/components/cards/ComponentCard.jsx b/src/components/cards/ComponentCard.jsx new file mode 100644 index 0000000..50e1593 --- /dev/null +++ b/src/components/cards/ComponentCard.jsx @@ -0,0 +1,62 @@ +import { useState } from 'react'; +import { Card, CardBody, CardHeader, CardTitle, Collapse } from 'react-bootstrap'; +import { TbChevronDown, TbRefresh, TbX } from 'react-icons/tb'; +import clsx from 'clsx'; +const ComponentCard = ({ + title, + isCloseable, + isCollapsible, + isRefreshable, + className, + bodyClassName, + children, + headerClassName +}) => { + const [isVisible, setIsVisible] = useState(true); + const [isCollapsed, setIsCollapsed] = useState(false); + const [isRefreshing, setIsRefreshing] = useState(false); + const handleClose = () => { + setIsVisible(false); + }; + const handleToggle = () => { + setIsCollapsed(!isCollapsed); + }; + + // Simulate a refresh action + // In a real-world scenario, you would fetch new data here + const handleRefresh = () => { + console.log('Refreshing...'); + setIsRefreshing(true); + setTimeout(() => { + setIsRefreshing(false); + }, 1500); + }; + if (!isVisible) return null; + return + {isRefreshing &&
+
+
} + + + {title} +
+ {isCollapsible && + + } + {isRefreshable && + + } + {isCloseable && + + } +
+
+ + {isCollapsible ? + {children} + : {children}} + ; +}; +export default ComponentCard; \ No newline at end of file diff --git a/src/components/cards/data.js b/src/components/cards/data.js new file mode 100644 index 0000000..3cdfe4c --- /dev/null +++ b/src/components/cards/data.js @@ -0,0 +1,38 @@ +import user5 from '@/assets/images/users/user-5.jpg'; +import user2 from '@/assets/images/users/user-2.jpg'; +export const messages = [{ + message: 'Hey! Are you available for a quick call? 📞', + time: '08:55 am', + fromUser: false, + avatar: user5 +}, { + message: 'Sure, give me 5 minutes. Just wrapping something up.', + time: '08:57 am', + fromUser: true, + avatar: user2 +}, { + message: "Perfect. Let me know when you're ready 👍", + time: '08:58 am', + fromUser: false, + avatar: user5 +}, { + message: 'Ready now. Calling you!', + time: '09:00 am', + fromUser: true, + avatar: user2 +}, { + message: 'Thanks for your time earlier!', + time: '09:45 am', + fromUser: false, + avatar: user5 +}, { + message: 'Of course! It was a productive discussion.', + time: '09:46 am', + fromUser: true, + avatar: user2 +}, { + message: 'I’ll send over the updated files by noon.', + time: '09:50 am', + fromUser: false, + avatar: user5 +}]; \ No newline at end of file diff --git a/src/components/form/BigMultiSelectField.jsx b/src/components/form/BigMultiSelectField.jsx new file mode 100644 index 0000000..9d2ca89 --- /dev/null +++ b/src/components/form/BigMultiSelectField.jsx @@ -0,0 +1,99 @@ +import { useMemo, useState } from 'react'; +import { Controller } from 'react-hook-form'; +import { Form } from 'react-bootstrap'; + +function toOptions(values = {}) { + return Object.entries(values).map(([value, label]) => ({ value: String(value), label })); +} + +function matchesQuery(label, query) { + if (!query) return true; + return String(label).toLowerCase().includes(query.trim().toLowerCase()); +} + +function ListPane({ title, searchPlaceholder, query, onQueryChange, items, onPick }) { + return ( +
+
+ {title} +
+ onQueryChange(event.target.value)} + autoComplete="off" + /> +
    + {items.length === 0 ? ( +
  • No items
  • + ) : ( + items.map((item) => ( +
  • + +
  • + )) + )} +
+
+ ); +} + +export default function BigMultiSelectField({ field, control }) { + const options = useMemo(() => toOptions(field.values), [field.values]); + const [selectableQuery, setSelectableQuery] = useState(''); + const [selectedQuery, setSelectedQuery] = useState(''); + + return ( + { + const selected = (rhf.value || []).map(String); + const selectedSet = new Set(selected); + const selectableItems = options.filter( + (item) => !selectedSet.has(item.value) && matchesQuery(item.label, selectableQuery), + ); + const selectedItems = options.filter( + (item) => selectedSet.has(item.value) && matchesQuery(item.label, selectedQuery), + ); + + const selectValue = (value) => { + if (selectedSet.has(value)) return; + rhf.onChange([...selected, value]); + }; + const deselectValue = (value) => { + rhf.onChange(selected.filter((item) => item !== value)); + }; + + return ( +
+ + + +
+ ); + }} + /> + ); +} diff --git a/src/components/form/DependentSelectField.jsx b/src/components/form/DependentSelectField.jsx new file mode 100644 index 0000000..99e154e --- /dev/null +++ b/src/components/form/DependentSelectField.jsx @@ -0,0 +1,33 @@ +import { Controller } from 'react-hook-form'; +import { Form } from 'react-bootstrap'; + +export default function DependentSelectField({ field, control, watch }) { + const parentValue = watch(field.dependsOn); + const staticOptions = field.staticOptions || {}; + const questions = (field.questions || []).filter((question) => question.entity_id === parentValue); + const options = { ...staticOptions }; + questions.forEach((question) => { + if (question.code) options[question.code] = `${question.question || question.code} (Only Experts)`; + }); + + return ( + ( + rhf.onChange(e.target.value)} + > + + {Object.entries(options).map(([value, label]) => ( + + ))} + + )} + /> + ); +} diff --git a/src/components/form/EmailNotificationRulesField.jsx b/src/components/form/EmailNotificationRulesField.jsx new file mode 100644 index 0000000..1b3a7cb --- /dev/null +++ b/src/components/form/EmailNotificationRulesField.jsx @@ -0,0 +1,168 @@ +import { Controller } from 'react-hook-form'; +import Select from 'react-select'; +import { Button, Col, Form, Row } from 'react-bootstrap'; + +function toOptions(values = {}) { + return Object.entries(values).map(([value, label]) => ({ value, label })); +} + +function patchRow(rows, index, patch) { + const next = [...(rows || [])]; + next[index] = { ...next[index], ...patch }; + return next; +} + +export function emptyEmailRule() { + return { + enabled: 'yes', + manager_levels: [], + role_ids: [], + selected_users: [], + condition: '', + subject: '', + body: '', + }; +} + +function MultiSelect({ options, value, onChange, placeholder }) { + const selected = options.filter((option) => (value || []).includes(option.value)); + return ( + { + const manager = []; + const selected_users = []; + (picked || []).forEach((option) => { + if (['l1', 'l2', 'l3', 'l4'].includes(option.value)) manager.push(option.value); + else selected_users.push(option.value); + }); + rhf.onChange(patchRow(rows, index, { manager, selected_users })); + }} + classNamePrefix="react-select" + /> + + + Check Submission + rhf.onChange(patchRow(rows, index, { checksubmission: e.target.value }))} + > + + + + + + Check Days + rhf.onChange(patchRow(rows, index, { checksubmission_days: e.target.value }))} + /> + + + Message + rhf.onChange(patchRow(rows, index, { message: e.target.value }))} + /> + + + Plan date field + rhf.onChange(patchRow(rows, index, { plan_date_field: e.target.value }))} + /> + + +
+ ); + })} + {rows.length === 0 ?
No reminders. Click Add Reminder.
: null} +
+ ); + }} + /> + ); +} diff --git a/src/components/maps/BaseVectorMap.jsx b/src/components/maps/BaseVectorMap.jsx new file mode 100644 index 0000000..5275f93 --- /dev/null +++ b/src/components/maps/BaseVectorMap.jsx @@ -0,0 +1,22 @@ +import 'jsvectormap'; +import 'jsvectormap/dist/maps/world.js'; +import { useEffect, useState } from 'react'; +const BaseVectorMap = ({ + id, + options, + ...props +}) => { + const [map, setMap] = useState(); + useEffect(() => { + if (!map) { + // create jsvectormap + const map = new window['jsVectorMap']({ + selector: '#' + id, + ...options + }); + setMap(map); + } + }, [id, map, options]); + return
; +}; +export default BaseVectorMap; \ No newline at end of file diff --git a/src/components/metric/MetricFieldControls.jsx b/src/components/metric/MetricFieldControls.jsx new file mode 100644 index 0000000..36175a1 --- /dev/null +++ b/src/components/metric/MetricFieldControls.jsx @@ -0,0 +1,736 @@ +import { useState } from 'react'; +import { Controller } from 'react-hook-form'; +import Select from 'react-select'; +import { Button, Col, Form, Row, Table } from 'react-bootstrap'; +import MetricRulesModal from '@/components/metric/MetricRulesModal'; +import { CAMPAIGN_COMBINED_TYPES, VIEW_COMBINED_TYPES } from '@/helpers/metric'; + +function toOptions(values = {}) { + return Object.entries(values).map(([value, label]) => ({ value, label })); +} + +function patchRow(rows, index, patch) { + const next = [...(rows || [])]; + next[index] = { ...next[index], ...patch }; + return next; +} + +function emptyMappingRow(variant) { + if (variant === 'ingestion') return { metric: '', type: '', attribute: '' }; + if (variant === 'grouped') return { metric: '', display: '', sort_order: 0, weight: 1, list_view: 'yes' }; + if (variant === 'milestone_metrics') return { metric: '', display: '', weight: 1, target: '' }; + if (variant === 'question_options') return { value: '', display: '', cost: 0 }; + if (variant === 'quiz_options') return { option: '', is_correct: false }; + if (variant === 'campaign') { + return { + metric: '', + display: '', + sort: 0, + weight: 1, + label_text: 'units', + unit_type: 'sum', + rules: [], + rules_interval: 'overall', + rules_custom_start: '', + rules_custom_end: '', + }; + } + return { value: '', display: '' }; +} + +function emptyCombinedRow(variant) { + const base = { type: '', title: '', fields: [], list_view: 'yes' }; + if (variant === 'campaign') { + return { + ...base, + weight: 1, + label_text: 'units', + unit_type: 'sum', + rules: [], + rules_interval: 'overall', + rules_custom_start: '', + rules_custom_end: '', + }; + } + return base; +} + +function RulesButton({ row, label, onChange }) { + const [open, setOpen] = useState(false); + const count = Array.isArray(row?.rules) ? row.rules.length : 0; + return ( + <> + + setOpen(false)} + onSave={(next) => { + onChange(next); + setOpen(false); + }} + /> + + ); +} + +export function MappingField({ field, control }) { + const variant = field.variant || 'options'; + const metrics = field.metrics || {}; + const types = field.types || { unit: 'Units', count: 'Count' }; + + return ( + { + const rows = rhf.value || []; + if (variant === 'options') { + return ( +
+ {rows.map((row, index) => ( + + + rhf.onChange(patchRow(rows, index, { value: e.target.value }))} + /> + + + rhf.onChange(patchRow(rows, index, { display: e.target.value }))} + /> + + + + + + ))} + + {rows.length === 0 ?
No options
: null} +
+ ); + } + + if (variant === 'question_options') { + return ( +
+ {rows.map((row, index) => ( + + + rhf.onChange(patchRow(rows, index, { value: e.target.value }))} + /> + + + rhf.onChange(patchRow(rows, index, { display: e.target.value }))} + /> + + + rhf.onChange(patchRow(rows, index, { cost: e.target.value }))} + /> + + + + + + ))} + + {rows.length === 0 ?
No options
: null} +
+ ); + } + + if (variant === 'quiz_options') { + return ( +
+ + + + + + + + + {rows.map((row, index) => ( + + + + + + ))} + +
OptionIs Correct +
+ rhf.onChange(patchRow(rows, index, { option: e.target.value }))} + /> + + + rhf.onChange(rows.map((item, i) => ({ ...item, is_correct: i === index }))) + } + /> + + +
+ + {rows.length === 0 ?
No options
: null} +
+ ); + } + + return ( +
+
+ +
+
+ + + + + {variant === 'ingestion' ? : } + {variant === 'ingestion' ? : null} + {variant === 'grouped' ? ( + <> + + + + + ) : null} + {variant === 'milestone_metrics' ? ( + <> + + + + ) : null} + {variant === 'campaign' ? ( + <> + + + + + + + ) : null} + + + + {rows.map((row, index) => ( + + + {variant === 'ingestion' ? ( + <> + + + + ) : ( + + )} + {variant === 'grouped' ? ( + <> + + + + + ) : null} + {variant === 'milestone_metrics' ? ( + <> + + + + ) : null} + {variant === 'campaign' ? ( + <> + + + + + + + ) : null} + + + ))} + +
MetricInjestion typeDisplayInput attributeSort OrderWeightList View?WeightTargetSortWeightLabel TextUnit TypeRules +
+ rhf.onChange(patchRow(rows, index, { metric: e.target.value }))} + > + + {Object.entries(metrics).map(([value, label]) => ( + + ))} + + + rhf.onChange(patchRow(rows, index, { type: e.target.value }))} + > + + {Object.entries(types).map(([value, label]) => ( + + ))} + + + rhf.onChange(patchRow(rows, index, { attribute: e.target.value }))} + placeholder="Attribute" + /> + + rhf.onChange(patchRow(rows, index, { display: e.target.value }))} + /> + + rhf.onChange(patchRow(rows, index, { sort_order: e.target.value }))} + /> + + rhf.onChange(patchRow(rows, index, { weight: e.target.value }))} + /> + + rhf.onChange(patchRow(rows, index, { list_view: e.target.value }))} + > + + + + + rhf.onChange(patchRow(rows, index, { weight: e.target.value }))} + /> + + rhf.onChange(patchRow(rows, index, { target: e.target.value }))} + /> + + rhf.onChange(patchRow(rows, index, { sort: e.target.value }))} + /> + + rhf.onChange(patchRow(rows, index, { weight: e.target.value }))} + /> + + rhf.onChange(patchRow(rows, index, { label_text: e.target.value }))} + /> + + rhf.onChange(patchRow(rows, index, { unit_type: e.target.value }))} + > + + + + + rhf.onChange(patchRow(rows, index, next))} + /> + + +
+
+ {rows.length === 0 ?
No mappings
: null} +
+ ); + }} + /> + ); +} + +export function CombinedMetricsField({ field, control }) { + const variant = field.variant || 'view'; + const types = field.types || (variant === 'campaign' ? CAMPAIGN_COMBINED_TYPES : VIEW_COMBINED_TYPES); + const metrics = field.metrics || {}; + const metricOptions = toOptions(metrics); + + return ( + { + const rows = rhf.value || []; + return ( +
+
+ +
+
+ + + + + + + {variant === 'campaign' ? ( + <> + + + + + + ) : ( + + )} + + + + {rows.map((row, index) => ( + + + + + {variant === 'campaign' ? ( + <> + + + + + + ) : ( + + )} + + + ))} + +
TypeTitleInclude MetricsWeightLabel TextUnit TypeRulesList View? +
+ rhf.onChange(patchRow(rows, index, { type: e.target.value }))} + > + + {Object.entries(types).map(([value, label]) => ( + + ))} + + + rhf.onChange(patchRow(rows, index, { title: e.target.value }))} + /> + + + rhf.onChange(patchRow(rows, index, { weight: e.target.value }))} + /> + + rhf.onChange(patchRow(rows, index, { label_text: e.target.value }))} + /> + + rhf.onChange(patchRow(rows, index, { unit_type: e.target.value }))} + > + + + + + rhf.onChange(patchRow(rows, index, next))} + /> + + rhf.onChange(patchRow(rows, index, { list_view: e.target.value }))} + > + + + + + +
+
+ {rows.length === 0 ?
No combined metrics
: null} +
+ ); + }} + /> + ); +} + +export function ColorRangesField({ field, control }) { + return ( + { + const rows = rhf.value || []; + return ( +
+
+ +
+ + + + + + + + + + {rows.map((row, index) => ( + + + + + + + ))} + +
Min (%)Max (%)Color +
+ rhf.onChange(patchRow(rows, index, { min: e.target.value }))} + /> + + rhf.onChange(patchRow(rows, index, { max: e.target.value }))} + /> + +
+ rhf.onChange(patchRow(rows, index, { color: e.target.value }))} + style={{ width: 50, padding: 2 }} + /> + rhf.onChange(patchRow(rows, index, { color: e.target.value }))} + placeholder="#RRGGBB" + /> +
+
+ +
+ {rows.length === 0 ?
No color ranges
: null} +
+ ); + }} + /> + ); +} + +const OPTION_ATTR_TYPES = ['select', 'multiselect', 'checkbox', 'radio']; + +export function RankingAttributesField({ field, control }) { + const attributes = field.attributes || {}; + const meta = field.attributesMeta || {}; + + return ( + { + const rows = rhf.value || []; + return ( +
+

+ Filter ranking by user attributes. Add multiple filters; each needs an attribute and value. +

+
+ +
+ {rows.map((row, index) => { + const rowMeta = meta[row.code]; + const useOptions = + rowMeta && OPTION_ATTR_TYPES.includes(rowMeta.type) && rowMeta.options && Object.keys(rowMeta.options).length; + return ( + + + rhf.onChange(patchRow(rows, index, { code: e.target.value, value: '' }))} + > + + {Object.entries(attributes).map(([value, label]) => ( + + ))} + + + + {useOptions ? ( + rhf.onChange(patchRow(rows, index, { value: e.target.value }))} + > + + {Object.entries(rowMeta.options).map(([value, label]) => ( + + ))} + + ) : ( + rhf.onChange(patchRow(rows, index, { value: e.target.value }))} + /> + )} + + + + + + ); + })} + {rows.length === 0 ?
No filters
: null} +
+ ); + }} + /> + ); +} diff --git a/src/components/metric/MetricRulesModal.jsx b/src/components/metric/MetricRulesModal.jsx new file mode 100644 index 0000000..3bf73c2 --- /dev/null +++ b/src/components/metric/MetricRulesModal.jsx @@ -0,0 +1,222 @@ +import { useEffect, useState } from 'react'; +import Flatpickr from 'react-flatpickr'; +import { Button, Form, Modal, Table } from 'react-bootstrap'; + +const RULE_TYPES = ['Linear', 'Staggered', 'Milestone']; + +const RULE_HELP = { + Linear: 'Linear: points = units × weight when units ≥ start', + Staggered: 'Staggered: adds weight when start ≤ units ≤ end', + Milestone: 'Milestone: adds weight when units ≥ start (cumulative)', +}; + +function emptyRange() { + return { start: 0, end: 0, weight: 0 }; +} + +function normalizeRules(raw) { + const list = Array.isArray(raw) ? raw : []; + return RULE_TYPES.map((ruleType) => { + const found = list.find((rule) => (rule?.rule_type || rule?.type) === ruleType); + const ranges = Array.isArray(found?.ranges) ? found.ranges.map((range) => ({ ...emptyRange(), ...range })) : []; + return { + rule_type: ruleType, + enabled: Boolean(found) && ranges.length > 0, + ranges: ranges.length ? ranges : [emptyRange()], + }; + }); +} + +export default function MetricRulesModal({ show, title, value, onClose, onSave }) { + const [interval, setInterval] = useState('overall'); + const [customStart, setCustomStart] = useState(''); + const [customEnd, setCustomEnd] = useState(''); + const [sections, setSections] = useState(normalizeRules([])); + + useEffect(() => { + if (!show) return; + setInterval(value?.rules_interval || 'overall'); + setCustomStart(value?.rules_custom_start || ''); + setCustomEnd(value?.rules_custom_end || ''); + setSections(normalizeRules(value?.rules || [])); + }, [show, value]); + + const updateSection = (ruleType, patch) => { + setSections((prev) => prev.map((section) => (section.rule_type === ruleType ? { ...section, ...patch } : section))); + }; + + const updateRange = (ruleType, index, patch) => { + setSections((prev) => + prev.map((section) => { + if (section.rule_type !== ruleType) return section; + const ranges = [...section.ranges]; + ranges[index] = { ...ranges[index], ...patch }; + return { ...section, ranges }; + }), + ); + }; + + const handleSave = () => { + const rules = sections + .filter((section) => section.enabled) + .map((section) => ({ + rule_type: section.rule_type, + ranges: (section.ranges || []).map((range) => ({ + start: Number(range.start) || 0, + end: Number(range.end) || 0, + weight: Number(range.weight) || 0, + })), + })) + .filter((rule) => rule.ranges.length > 0); + onSave({ + rules, + rules_interval: interval, + rules_custom_start: interval === 'custom' ? customStart : '', + rules_custom_end: interval === 'custom' ? customEnd : '', + }); + }; + + return ( + + + Metric Calculation Rules + + +

+ Metric: {title || 'Metric'} +

+
+
+
+
+ Interval + setInterval(e.target.value)}> + + + + + + +
+ {interval === 'custom' ? ( +
+
+
+ Start Date + setCustomStart(str)} + options={{ dateFormat: 'Y-m-d', allowInput: true }} + /> +
+
+ End Date + setCustomEnd(str)} + options={{ dateFormat: 'Y-m-d', allowInput: true }} + /> +
+
+
+ ) : null} +
+
+
+ {sections.map((section) => ( +
+
+ updateSection(section.rule_type, { enabled: e.target.checked })} + /> +
+ {section.enabled ? ( +
+ + + + + + + + + + {section.ranges.map((range, index) => ( + + + + + + + ))} + +
StartEndWeight +
+ updateRange(section.rule_type, index, { start: e.target.value })} + /> + + updateRange(section.rule_type, index, { end: e.target.value })} + /> + + updateRange(section.rule_type, index, { weight: e.target.value })} + /> + + +
+ + {RULE_HELP[section.rule_type]} +
+ ) : null} +
+ ))} +
+ + + + +
+ ); +} diff --git a/src/components/recognition/MilestoneMappingField.jsx b/src/components/recognition/MilestoneMappingField.jsx new file mode 100644 index 0000000..eae84b9 --- /dev/null +++ b/src/components/recognition/MilestoneMappingField.jsx @@ -0,0 +1,254 @@ +import { Controller } from 'react-hook-form'; +import Select from 'react-select'; +import { Button, Col, Form, Row } from 'react-bootstrap'; + +const MANAGER_OPTIONS = [ + { value: 'l1manager', label: 'L1 Manager' }, + { value: 'l2manager', label: 'L2 Manager' }, +]; + +function toOptions(values = {}) { + return Object.entries(values).map(([value, label]) => ({ value, label })); +} + +function patchRow(rows, index, patch) { + const next = [...(rows || [])]; + next[index] = { ...next[index], ...patch }; + return next; +} + +export function emptyMilestoneRow() { + return { + milestone_id: '', + target_title: '', + target: '', + repeat_target: '0', + roles: [], + reporting_roles: [], + user_notification: false, + user_email: false, + manager_notification: [], + manager_email: [], + send_badge: '', + appreciation_category: '', + appreciation_image: '', + appreciation_message: '', + }; +} + +function MultiSelect({ options, value, onChange, placeholder }) { + const selected = options.filter((option) => (value || []).includes(option.value)); + return ( + changeSkin(item.skin)} /> + +
+
{toPascalCase(item.skin)}
+ )} + +
+ +
+
Color Scheme
+ + {themeOptions.map((item, idx) => +
+ changeTheme(item.theme)} /> + +
+
{toPascalCase(item.theme)}
+ )} +
+
+ +
+
Topbar Color
+ + {topBarColorOptions.map((item, idx) => +
+ changeTopBarColor(item.color)} /> + +
+
{toPascalCase(item.color)}
+ )} +
+
+ +
+
Orientation
+ + {orientationOptions.map((item, idx) => +
+ changeOrientation(item.orientation)} /> + +
+
{toPascalCase(item.orientation)}
+ )} +
+
+ +
+
Sidenav Color
+ + {sidenavColorOptions.map((item, idx) => +
+ changeSideNavColor(item.color)} /> + +
+
{toPascalCase(item.color)}
+ )} +
+
+ + {orientation !== 'horizontal' && <> +
+
Sidebar Size
+ + {sidenavSizeOptions.map((item, idx) => +
+ changeSideNavSize(item.size)} /> + +
+
{item.label}
+ )} +
+
+ +
+
+
Layout Position
+ +
+ {layoutPositionOptions.map((item, idx) => + changeLayoutPosition(item.position)} /> + + )} +
+
+
+ +
+
+
+ +
+ +
+ +
+
+
+ } + + +
+ + + + + + + Buy Now + + + +
+ ; +}; +export default Customizer; \ No newline at end of file diff --git a/src/layouts/components/data.js b/src/layouts/components/data.js new file mode 100644 index 0000000..8bfa800 --- /dev/null +++ b/src/layouts/components/data.js @@ -0,0 +1,1858 @@ +import { TbApps, TbBasket, TbBellRinging, TbCalendar, TbComponents, TbCreditCard, TbFolder, TbHeadset, TbLayoutDashboard, TbLock, TbLogout2, TbMessageDots, TbSettings2, TbUserCircle, TbUserHexagon, TbUsers } from 'react-icons/tb'; +import { LuCalendar, LuChartNoAxesCombined, LuCircleGauge, LuDessert, LuEarth, LuEyeOff, LuFileInput, LuFingerprint, LuFolderOpenDot, LuHandshake, LuHousePlug, LuInbox, LuKey, LuLifeBuoy, LuListTree, LuMapPinned, LuMessageSquareDot, LuNotebookText, LuPanelRightClose, LuPanelTop, LuPencilRuler, LuProportions, LuReceiptText, LuRss, LuShieldAlert, LuShieldBan, LuShoppingBag, LuSparkles, LuTable, LuUsers } from 'react-icons/lu'; +export const userDropdownItems = [{ + label: 'Welcome back!', + isHeader: true +}, { + label: 'Profile', + icon: TbUserCircle, + url: '/users/profile' +}, { + label: 'Notifications', + icon: TbBellRinging, + url: '#' +}, { + label: 'Balance: $985.25', + icon: TbCreditCard, + url: '#' +}, { + label: 'Account Settings', + icon: TbSettings2, + url: '#' +}, { + label: 'Support Center', + icon: TbHeadset, + url: '#' +}, { + isDivider: true +}, { + label: 'Lock Screen', + icon: TbLock, + url: '/auth-1/lock-screen' +}, { + label: 'Log Out', + icon: TbLogout2, + url: '#', + class: 'text-danger fw-semibold' +}]; +export const menuItems = [{ + key: 'navigation', + label: 'Navigation', + isTitle: true +}, { + key: 'dashboards', + label: 'Dashboards', + icon: LuCircleGauge, + badge: { + variant: 'success', + text: '02' + }, + children: [{ + key: 'dashboard-v1', + label: 'Dashboard 1', + url: '/dashboard' + }, { + key: 'dashboard-v2', + label: 'Dashboard 2', + url: '/dashboard2' + }] +}, { + key: 'landing', + label: 'Landing Page', + icon: LuEarth, + url: '/landing' +}, { + key: 'apps', + label: 'Apps', + isTitle: true +}, { + key: 'chat', + label: 'Chat', + icon: LuMessageSquareDot, + url: '/chat' +}, { + key: 'calendar', + label: 'Calendar', + icon: LuCalendar, + url: '/calendar' +}, { + key: 'file-manager', + label: 'File Manager', + icon: LuFolderOpenDot, + url: '/file-manager' +}, { + key: 'ecommerce', + label: 'Ecommerce', + icon: LuShoppingBag, + children: [{ + key: 'products', + label: 'Products', + children: [{ + key: 'product-list', + label: 'Listing', + url: '/products' + }, { + key: 'product-grid', + label: 'Product Grid', + url: '/products-grid' + }, { + key: 'product-details', + label: 'Product Details', + url: '/products/1' + }, { + key: 'add-product', + label: 'Add Product', + url: '/add-product' + }] + }, { + key: 'categories', + label: 'Categories', + url: '/categories' + }, { + key: 'orders', + label: 'Orders', + children: [{ + key: 'orders-list', + label: 'Orders', + url: '/orders' + }, { + key: 'order-details', + label: 'Order Details', + url: '/orders/1' + }] + }, { + key: 'customers', + label: 'Customers', + url: '/customers' + }, { + key: 'sellers', + label: 'Sellers', + children: [{ + key: 'sellers-list', + label: 'Sellers', + url: '/sellers' + }, { + key: 'seller-details', + label: 'Seller Details', + url: '/sellers/1' + }] + }, { + key: 'reviews', + label: 'Reviews', + url: '/reviews' + }] +}, { + key: 'email', + label: 'Email', + icon: LuInbox, + badge: { + variant: 'danger', + text: 'New' + }, + children: [{ + key: 'inbox', + label: 'Inbox', + url: '/inbox' + }, { + key: 'inbox-details', + label: 'Details', + url: '/inbox/1' + }, { + key: 'email-compose', + label: 'Compose', + url: '/email-compose' + }, { + key: 'email-templates', + label: 'Email Templates', + url: '/email-templates' + }] +}, { + key: 'crm', + label: 'CRM', + icon: LuHandshake, + children: [{ + key: 'crm-contacts', + label: 'Contacts', + url: '/crm/contacts' + }, { + key: 'crm-opportunities', + label: 'Opportunities', + url: '/crm/opportunities' + }, { + key: 'crm-deals', + label: 'Deals', + url: '/crm/deals' + }, { + key: 'crm-leads', + label: 'Leads', + url: '/crm/leads' + }, { + key: 'crm-pipeline', + label: 'Pipeline', + url: '/crm/pipeline' + }, { + key: 'crm-campaign', + label: 'Campaign', + url: '/crm/campaign' + }, { + key: 'crm-proposals', + label: 'Proposals', + url: '/crm/proposals' + }, { + key: 'crm-estimations', + label: 'Estimations', + url: '/crm/estimations' + }, { + key: 'crm-customers', + label: 'Customers', + url: '/crm/customers' + }, { + key: 'crm-activities', + label: 'Activities', + url: '/crm/activities' + }] +}, { + key: 'users', + label: 'Users', + icon: TbUsers, + children: [{ + key: 'contacts', + label: 'Contacts', + url: '/users/contacts' + }, { + key: 'profile', + label: 'Profile', + url: '/users/profile' + }, { + key: 'roles', + label: 'Roles', + url: '/users/roles' + }, { + key: 'roles-details', + label: 'Roles Details', + url: '/users/roles-details' + }, { + key: 'permissions', + label: 'Permissions', + url: '/users/permissions' + }] +}, { + key: 'invoice', + label: 'Invoice', + icon: LuReceiptText, + children: [{ + key: 'invoice-list', + label: 'Invoice', + url: '/invoices' + }, { + key: 'invoice-details', + label: 'Single Invoice', + url: '/invoices/1' + }, { + key: 'add-invoice', + label: 'New Invoice', + url: '/add-invoice' + }] +}, { + key: 'social-feed', + label: 'Social Feed', + icon: LuRss, + url: '/social-feed' +}, { + key: 'support-center', + label: 'Support Center', + icon: LuLifeBuoy, + children: [{ + key: 'tickets-list', + label: 'Tickets List', + url: '/tickets-list' + }, { + key: 'ticket-details', + label: 'Ticket Details', + url: '/ticket-details' + }, { + key: 'ticket-create', + label: 'Ticket Create', + url: '/ticket-create' + }] +}, { + key: 'api-key', + label: 'API Keys', + url: '/api-key', + icon: LuKey +}, { + key: 'custom', + label: 'Custom Pages', + isTitle: true +}, { + key: 'pages', + label: 'Pages', + icon: LuNotebookText, + children: [{ + key: 'faq', + label: 'FAQ', + url: '/pages/faq' + }, { + key: 'pricing', + label: 'Pricing', + url: '/pages/pricing' + }, { + key: 'empty-page', + label: 'Empty Page', + url: '/pages/empty-page' + }, { + key: 'timeline', + label: 'Timeline', + url: '/pages/timeline' + }, { + key: 'sitemap', + label: 'Sitemap', + url: '/pages/sitemap' + }, { + key: 'search-results', + label: 'Search Results', + url: '/pages/search-results' + }, { + key: 'coming-soon', + label: 'Coming Soon', + url: '/coming-soon' + }, { + key: 'terms-conditions', + label: 'Terms & Conditions', + url: '/pages/terms-conditions' + }] +}, { + key: 'auth', + label: 'Authentication', + icon: LuFingerprint, + children: [{ + key: 'version-1', + label: 'Basic', + parentKey: 'auth', + children: [{ + key: 'sign-in', + label: 'Sign In', + url: '/auth-1/sign-in' + }, { + key: 'sign-up', + label: 'Sign Up', + url: '/auth-1/sign-up' + }, { + key: 'reset-pass', + label: 'Reset Password', + url: '/auth-1/reset-password' + }, { + key: 'new-pass', + label: 'New Password', + url: '/auth-1/new-password' + }, { + key: 'two-factor', + label: 'Two Factor', + url: '/auth-1/two-factor' + }, { + key: 'lock-screen', + label: 'Lock Screen', + url: '/auth-1/lock-screen' + }, { + key: 'success-mail', + label: 'Success Mail', + url: '/auth-1/success-mail' + }, { + key: 'login-pin', + label: 'Login with PIN', + url: '/auth-1/login-pin' + }, { + key: 'delete-account', + label: 'Delete Account', + url: '/auth-1/delete-account' + }] + }, { + key: 'version-2', + label: 'Cover', + parentKey: 'auth', + children: [{ + key: 'sign-in-2', + label: 'Sign In', + url: '/auth-2/sign-in' + }, { + key: 'sign-up-2', + label: 'Sign Up', + url: '/auth-2/sign-up' + }, { + key: 'reset-pass-2', + label: 'Reset Password', + url: '/auth-2/reset-password' + }, { + key: 'new-pass-2', + label: 'New Password', + url: '/auth-2/new-password' + }, { + key: 'two-factor-2', + label: 'Two Factor', + url: '/auth-2/two-factor' + }, { + key: 'lock-screen-2', + label: 'Lock Screen', + url: '/auth-2/lock-screen' + }, { + key: 'success-mail-2', + label: 'Success Mail', + url: '/auth-2/success-mail' + }, { + key: 'login-pin-2', + label: 'Login with PIN', + url: '/auth-2/login-pin' + }, { + key: 'delete-account-2', + label: 'Delete Account', + url: '/auth-2/delete-account' + }] + }] +}, { + key: 'error', + label: 'Error Pages', + icon: LuShieldAlert, + children: [{ + key: 'error-400', + label: '400', + url: '/error/400' + }, { + key: 'error-401', + label: '401', + url: '/error/401' + }, { + key: 'error-403', + label: '403', + url: '/error/403' + }, { + key: 'error-404', + label: '404', + url: '/error/404' + }, { + key: 'error-408', + label: '408', + url: '/error/408' + }, { + key: 'error-500', + label: '500', + url: '/error/500' + }, { + key: 'maintenance', + label: 'Maintenance', + url: '/maintenance' + }] +}, { + key: 'layouts', + label: 'Layouts', + isTitle: true +}, { + key: 'layout-options', + label: 'Layout Options', + icon: LuProportions, + children: [{ + key: 'scrollable', + label: 'Scrollable', + url: '/layouts/scrollable' + }, { + key: 'compact', + label: 'Compact', + url: '/layouts/compact' + }, { + key: 'boxed', + label: 'Boxed', + url: '/layouts/boxed' + }, { + key: 'horizontal', + label: 'Horizontal', + url: '/layouts/horizontal' + }] +}, { + key: 'sidebars', + label: 'Sidebars', + icon: LuPanelRightClose, + children: [{ + key: 'compact-menu', + label: 'Compact Menu', + url: '/layouts/sidebars/compact' + }, { + key: 'icon-view-menu', + label: 'Icon View Menu', + url: '/layouts/sidebars/icon-view' + }, { + key: 'on-hover-menu', + label: 'On Hover Menu', + url: '/layouts/sidebars/on-hover' + }, { + key: 'on-hover-active-menu', + label: 'On Hover Active Menu', + url: '/layouts/sidebars/on-hover-active' + }, { + key: 'offcanvas-menu', + label: 'Offcanvas Menu', + url: '/layouts/sidebars/offcanvas' + }, { + key: 'no-icons-with-lines-menu', + label: 'No Icons With Lines', + url: '/layouts/sidebars/no-icons-with-lines' + }, { + key: 'with-lines-menu', + label: 'Sidebar With Lines', + url: '/layouts/sidebars/with-lines' + }, { + key: 'light-menu', + label: 'Light Menu', + url: '/layouts/sidebars/light' + }, { + key: 'gradient-menu', + label: 'Gradient Menu', + url: '/layouts/sidebars/gradient' + }, { + key: 'gray-menu', + label: 'Gray Menu', + url: '/layouts/sidebars/gray' + }, { + key: 'image-menu', + label: 'Image Menu', + url: '/layouts/sidebars/image' + }] +}, { + key: 'topbars', + label: 'Topbars', + icon: LuPanelTop, + children: [{ + key: 'dark-topbar', + label: 'Dark Topbar', + url: '/layouts/topbars/dark' + }, { + key: 'gray-topbar', + label: 'Gray Topbar', + url: '/layouts/topbars/gray' + }, { + key: 'gradient-topbar', + label: 'Gradient Topbar', + url: '/layouts/topbars/gradient' + }] +}, { + key: 'components', + label: 'Components', + isTitle: true +}, { + key: 'ui', + label: 'Base UI', + icon: LuPencilRuler, + children: [{ + key: 'accordions', + label: 'Accordions', + url: '/ui/accordions' + }, { + key: 'alerts', + label: 'Alerts', + url: '/ui/alerts' + }, { + key: 'images', + label: 'Images', + url: '/ui/images' + }, { + key: 'badges', + label: 'Badges', + url: '/ui/badges' + }, { + key: 'breadcrumb', + label: 'Breadcrumb', + url: '/ui/breadcrumb' + }, { + key: 'buttons', + label: 'Buttons', + url: '/ui/buttons' + }, { + key: 'cards', + label: 'Cards', + url: '/ui/cards' + }, { + key: 'carousel', + label: 'Carousel', + url: '/ui/carousel' + }, { + key: 'collapse', + label: 'Collapse', + url: '/ui/collapse' + }, { + key: 'colors', + label: 'Colors', + url: '/ui/colors' + }, { + key: 'dropdowns', + label: 'Dropdowns', + url: '/ui/dropdowns' + }, { + key: 'videos', + label: 'Videos', + url: '/ui/videos' + }, { + key: 'grid', + label: 'Grid Options', + url: '/ui/grid' + }, { + key: 'links', + label: 'Links', + url: '/ui/links' + }, { + key: 'list-group', + label: 'List Group', + url: '/ui/list-group' + }, { + key: 'modals', + label: 'Modals', + url: '/ui/modals' + }, { + key: 'notifications', + label: 'Notifications', + url: '/ui/notifications' + }, { + key: 'offcanvas', + label: 'Offcanvas', + url: '/ui/offcanvas' + }, { + key: 'placeholders', + label: 'Placeholders', + url: '/ui/placeholders' + }, { + key: 'pagination', + label: 'Pagination', + url: '/ui/pagination' + }, { + key: 'popovers', + label: 'Popovers', + url: '/ui/popovers' + }, { + key: 'progress', + label: 'Progress', + url: '/ui/progress' + }, { + key: 'spinners', + label: 'Spinners', + url: '/ui/spinners' + }, { + key: 'tabs', + label: 'Tabs', + url: '/ui/tabs' + }, { + key: 'tooltips', + label: 'Tooltips', + url: '/ui/tooltips' + }, { + key: 'typography', + label: 'Typography', + url: '/ui/typography' + }, { + key: 'utilities', + label: 'Utilities', + url: '/ui/utilities' + }] +}, { + key: 'miscellaneous', + label: 'Miscellaneous', + icon: LuHousePlug, + children: [{ + key: 'nestable-list', + label: 'Nestable List', + url: '/miscellaneous/nestable-list' + }, { + key: 'pdf-viewer', + label: 'PDF Viewer', + url: '/miscellaneous/pdf-viewer' + }, { + key: 'sweet-alert', + label: 'Sweet Alert', + url: '/miscellaneous/sweet-alert' + }, { + key: 'password-meter', + label: 'Password Meter', + url: '/miscellaneous/password-meter' + }, { + key: 'clipboard', + label: 'Clipboard', + url: '/miscellaneous/clipboard' + }, { + key: 'tree-view', + label: 'Tree View', + url: '/miscellaneous/tree-view' + }, { + key: 'tour', + label: 'Tour', + url: '/miscellaneous/tour' + }] +}, { + key: 'widgets', + label: 'Widgets', + icon: LuDessert, + url: '/widgets' +}, { + key: 'charts', + label: 'Charts', + icon: LuChartNoAxesCombined, + children: [{ + key: 'apexchart', + label: 'Apex Charts', + children: [{ + key: 'apex-area-chart', + label: 'Area', + url: '/charts/apex/area' + }, { + key: 'apex-bar-chart', + label: 'Bar', + url: '/charts/apex/bar' + }, { + key: 'apex-bubble-chart', + label: 'Bubble', + url: '/charts/apex/bubble' + }, { + key: 'apex-candlestick-chart', + label: 'Candlestick', + url: '/charts/apex/candlestick' + }, { + key: 'apex-column-chart', + label: 'Column', + url: '/charts/apex/column' + }, { + key: 'apex-heatmap-chart', + label: 'Heatmap', + url: '/charts/apex/heatmap' + }, { + key: 'apex-line-chart', + label: 'Line', + url: '/charts/apex/line' + }, { + key: 'apex-mixed-chart', + label: 'Mixed', + url: '/charts/apex/mixed' + }, { + key: 'apex-timeline-chart', + label: 'Timeline', + url: '/charts/apex/timeline' + }, { + key: 'apex-boxplot-chart', + label: 'Boxplot', + url: '/charts/apex/boxplot' + }, { + key: 'apex-treemap-chart', + label: 'Treemap', + url: '/charts/apex/treemap' + }, { + key: 'apex-pie-chart', + label: 'Pie', + url: '/charts/apex/pie' + }, { + key: 'apex-radar-chart', + label: 'Radar', + url: '/charts/apex/radar' + }, { + key: 'apex-radialbar-chart', + label: 'Radialbar', + url: '/charts/apex/radialbar' + }, { + key: 'apex-scatter-chart', + label: 'Scatter', + url: '/charts/apex/scatter' + }, { + key: 'apex-polar-area-chart', + label: 'Polar Area', + url: '/charts/apex/polar-area' + }, { + key: 'apex-sparkline-chart', + label: 'Sparklines', + url: '/charts/apex/sparklines' + }, { + key: 'apex-range-chart', + label: 'Range', + url: '/charts/apex/range' + }, { + key: 'apex-funnel-chart', + label: 'Funnel', + url: '/charts/apex/funnel' + }, { + key: 'apex-slope-chart', + label: 'Slope', + url: '/charts/apex/slope' + }] + }, { + key: 'Chartjs', + label: 'Chart JS', + children: [{ + key: 'area', + label: 'Area', + url: '/charts/chartjs/area' + }, { + key: 'bar', + label: 'Bar', + url: '/charts/chartjs/bar' + }, { + key: 'line', + label: 'Line', + url: '/charts/chartjs/line' + }, { + key: 'other', + label: 'Other', + url: '/charts/chartjs/other' + }] + }, { + key: 'apex-tree', + label: 'Apex Tree', + url: '/charts/apex-tree' + }] +}, { + key: 'forms', + label: 'Forms', + icon: LuFileInput, + children: [{ + key: 'form-basic-elements', + label: 'Basic Elements', + url: '/forms/basic' + }, { + key: 'form-pickers', + label: 'Pickers', + url: '/forms/pickers' + }, { + key: 'form-select', + label: 'Select', + url: '/forms/select' + }, { + key: 'form-validation', + label: 'Validation', + url: '/forms/validation' + }, { + key: 'form-wizard', + label: 'Wizard', + url: '/forms/wizard' + }, { + key: 'form-file-uploads', + label: 'File Uploads', + url: '/forms/file-uploads' + }, { + key: 'form-text-editors', + label: 'Text Editors', + url: '/forms/editors' + }, { + key: 'form-slider', + label: 'Slider', + url: '/forms/slider' + }, { + key: 'form-layouts', + label: 'Layouts', + url: '/forms/layouts' + }, { + key: 'form-other-plugins', + label: 'Other Plugins', + url: '/forms/other-plugins' + }] +}, { + key: 'tables', + label: 'Tables', + icon: LuTable, + children: [{ + key: 'static-tables', + label: 'Static Tables', + url: '/tables/static' + }, { + key: 'tanstack-tables', + label: 'Tanstack Tables', + url: '/tables/tanstack' + }, { + key: 'data-tables', + label: 'DataTables', + badge: { + variant: 'success', + text: '13' + }, + children: [{ + key: 'data-tables-basic', + label: 'Basic', + url: '/tables/data-tables/basic' + }, { + key: 'data-tables-export-data', + label: 'Export Data', + url: '/tables/data-tables/export-data' + }, { + key: 'data-tables-select', + label: 'Select', + url: '/tables/data-tables/select' + }, { + key: 'data-tables-ajax', + label: 'Ajax', + url: '/tables/data-tables/ajax' + }, { + key: 'data-tables-javascript-source', + label: 'Javascript Source', + url: '/tables/data-tables/javascript-source' + }, { + key: 'data-tables-data-rendering', + label: 'Data Rendering', + url: '/tables/data-tables/data-rendering' + }, { + key: 'data-tables-scroll', + label: 'Scroll', + url: '/tables/data-tables/scroll' + }, { + key: 'data-tables-columns', + label: 'Show & Hide Column', + url: '/tables/data-tables/columns' + }, { + key: 'data-tables-child-rows', + label: 'Child Rows', + url: '/tables/data-tables/child-rows' + }, { + key: 'data-tables-column-searching', + label: 'Column Searching', + url: '/tables/data-tables/column-searching' + }, { + key: 'data-tables-fixed-header', + label: 'Fixed Header', + url: '/tables/data-tables/fixed-header' + }, { + key: 'data-tables-add-rows', + label: 'Add Rows', + url: '/tables/data-tables/add-rows' + }, { + key: 'data-tables-checkbox-select', + label: 'Checkbox Select', + url: '/tables/data-tables/checkbox-select' + }] + }] +}, { + key: 'icons', + label: 'Icons', + icon: LuSparkles, + children: [{ + key: 'tabler-icons', + label: 'Tabler', + url: '/icons/tabler' + }, { + key: 'lucide-icons', + label: 'Lucide', + url: '/icons/lucide' + }, { + key: 'flags', + label: 'Flags', + url: '/icons/flags' + }] +}, { + key: 'maps', + label: 'Maps', + icon: LuMapPinned, + children: [{ + key: 'vector-maps', + label: 'Vector Maps', + url: '/maps/vector' + }, { + key: 'leaflet-maps', + label: 'Leaflet Maps', + url: '/maps/leaflet' + }] +}, { + key: 'items', + label: 'Menu Items', + isTitle: true +}, { + key: 'menu-levels', + label: 'Menu Levels', + icon: LuListTree, + children: [{ + key: 'second-level', + label: 'Second Level', + children: [{ + key: 'item-2-1', + label: 'Item 2.1', + url: '' + }, { + key: 'item-2-2', + label: 'Item 2.2', + url: '' + }] + }, { + key: 'third-level', + label: 'Third Level', + children: [{ + key: 'item-3-1', + label: 'Item 1', + url: '' + }, { + key: 'fourth-level', + label: 'Item 2', + children: [{ + key: 'item-4-1', + label: 'Item 3.1', + url: '' + }, { + key: 'item-4-2', + label: 'Item 3.2', + url: '' + }] + }] + }] +}, { + key: 'disabled-menu', + label: 'Disabled Menu', + icon: LuEyeOff, + url: '#!', + isDisabled: true +}]; +export const horizontalMenuItems = [{ + key: 'dashboards', + label: 'Dashboards', + icon: TbLayoutDashboard, + children: [{ + key: 'dashboard-v1', + label: 'Dashboard 1', + url: '/dashboard' + }, { + key: 'dashboard-v2', + label: 'Dashboard 2', + url: '/dashboard2' + }] +}, { + key: 'apps', + label: 'Apps', + icon: TbApps, + children: [{ + key: 'calendar', + label: 'Calendar', + icon: TbCalendar, + url: '/calendar' + }, { + key: 'chat', + label: 'Chat', + icon: TbMessageDots, + url: '/chat' + }, { + key: 'file-manager', + label: 'File Manager', + icon: TbFolder, + url: '/file-manager' + }, { + key: 'ecommerce', + label: 'Ecommerce', + icon: TbBasket, + children: [{ + key: 'products', + label: 'Products', + children: [{ + key: 'product-list', + label: 'Listing', + url: '/products' + }, { + key: 'product-grid', + label: 'Product Grid', + url: '/products-grid' + }, { + key: 'product-details', + label: 'Product Details', + url: '/products/1' + }, { + key: 'add-product', + label: 'Add Product', + url: '/add-product' + }] + }, { + key: 'categories', + label: 'Categories', + url: '/categories' + }, { + key: 'orders', + label: 'Orders', + children: [{ + key: 'orders-list', + label: 'Orders', + url: '/orders' + }, { + key: 'order-details', + label: 'Order Details', + url: '/orders/1' + }] + }, { + key: 'customers', + label: 'Customers', + url: '/customers' + }, { + key: 'sellers', + label: 'Sellers', + children: [{ + key: 'sellers-list', + label: 'Sellers', + url: '/sellers' + }, { + key: 'seller-details', + label: 'Seller Details', + url: '/sellers/1' + }] + }, { + key: 'reviews', + label: 'Reviews', + url: '/reviews' + }] + }, { + key: 'email', + label: 'Email', + icon: LuInbox, + badge: { + variant: 'danger', + text: 'New' + }, + children: [{ + key: 'inbox', + label: 'Inbox', + url: '/inbox' + }, { + key: 'inbox-details', + label: 'Details', + url: '/inbox/1' + }, { + key: 'email-compose', + label: 'Compose', + url: '/email-compose' + }, { + key: 'email-templates', + label: 'Email Templates', + url: '/email-templates' + }] + }, { + key: 'crm', + label: 'CRM', + icon: LuHandshake, + children: [{ + key: 'crm-contacts', + label: 'Contacts', + url: '/crm/contacts' + }, { + key: 'crm-opportunities', + label: 'Opportunities', + url: '/crm/opportunities' + }, { + key: 'crm-deals', + label: 'Deals', + url: '/crm/deals' + }, { + key: 'crm-leads', + label: 'Leads', + url: '/crm/leads' + }, { + key: 'crm-campaign', + label: 'Campaign', + url: '/crm/campaign' + }, { + key: 'crm-proposals', + label: 'Proposals', + url: '/crm/proposals' + }, { + key: 'crm-estimations', + label: 'Estimations', + url: '/crm/estimations' + }, { + key: 'crm-customers', + label: 'Customers', + url: '/crm/customers' + }, { + key: 'crm-activities', + label: 'Activities', + url: '/crm/activities' + }] + }, { + key: 'users', + label: 'Users', + icon: LuUsers, + children: [{ + key: 'contacts', + label: 'Contacts', + url: '/users/contacts' + }, { + key: 'profile', + label: 'Profile', + url: '/users/profile' + }, { + key: 'roles', + label: 'Roles', + url: '/users/roles' + }, { + key: 'roles-details', + label: 'Roles Details', + url: '/users/roles-details' + }, { + key: 'permissions', + label: 'Permissions', + url: '/users/permissions' + }] + }, { + key: 'invoice', + label: 'Invoice', + icon: LuReceiptText, + children: [{ + key: 'invoice-list', + label: 'Invoice', + url: '/invoices' + }, { + key: 'invoice-details', + label: 'Single Invoice', + url: '/invoices/1' + }, { + key: 'add-invoice', + label: 'New Invoice', + url: '/add-invoice' + }] + }] +}, { + key: 'pages', + label: 'Pages', + icon: LuNotebookText, + children: [{ + key: 'general-pages', + label: 'General Pages', + icon: LuNotebookText, + children: [{ + key: 'faq', + label: 'FAQ', + url: '/pages/faq' + }, { + key: 'pricing', + label: 'Pricing', + url: '/pages/pricing' + }, { + key: 'empty-page', + label: 'Empty Page', + url: '/pages/empty-page' + }, { + key: 'timeline', + label: 'Timeline', + url: '/pages/timeline' + }, { + key: 'sitemap', + label: 'Sitemap', + url: '/pages/sitemap' + }, { + key: 'search-results', + label: 'Search Results', + url: '/pages/search-results' + }, { + key: 'coming-soon', + label: 'Coming Soon', + url: '/coming-soon' + }, { + key: 'terms-conditions', + label: 'Terms & Conditions', + url: '/pages/terms-conditions' + }] + }, { + key: 'version-1', + label: 'Basic', + icon: LuShieldBan, + children: [{ + key: 'sign-in', + label: 'Sign In', + url: '/auth-1/sign-in' + }, { + key: 'sign-up', + label: 'Sign Up', + url: '/auth-1/sign-up' + }, { + key: 'reset-pass', + label: 'Reset Password', + url: '/auth-1/reset-password' + }, { + key: 'new-pass', + label: 'New Password', + url: '/auth-1/new-password' + }, { + key: 'two-factor', + label: 'Two Factor', + url: '/auth-1/two-factor' + }, { + key: 'lock-screen', + label: 'Lock Screen', + url: '/auth-1/lock-screen' + }, { + key: 'success-mail', + label: 'Success Mail', + url: '/auth-1/success-mail' + }, { + key: 'login-pin', + label: 'Login with PIN', + url: '/auth-1/login-pin' + }, { + key: 'delete-account', + label: 'Delete Account', + url: '/auth-1/delete-account' + }] + }, { + key: 'version-2', + label: 'Cover', + icon: TbUserHexagon, + children: [{ + key: 'sign-in-2', + label: 'Sign In', + url: '/auth-2/sign-in' + }, { + key: 'sign-up-2', + label: 'Sign Up', + url: '/auth-2/sign-up' + }, { + key: 'reset-pass-2', + label: 'Reset Password', + url: '/auth-2/reset-password' + }, { + key: 'new-pass-2', + label: 'New Password', + url: '/auth-2/new-password' + }, { + key: 'two-factor-2', + label: 'Two Factor', + url: '/auth-2/two-factor' + }, { + key: 'lock-screen-2', + label: 'Lock Screen', + url: '/auth-2/lock-screen' + }, { + key: 'success-mail-2', + label: 'Success Mail', + url: '/auth-2/success-mail' + }, { + key: 'login-pin-2', + label: 'Login with PIN', + url: '/auth-2/login-pin' + }, { + key: 'delete-account-2', + label: 'Delete Account', + url: '/auth-2/delete-account' + }] + }, { + key: 'error', + label: 'Error Pages', + icon: LuShieldAlert, + children: [{ + key: 'error-400', + label: '400', + url: '/error/400' + }, { + key: 'error-401', + label: '401', + url: '/error/401' + }, { + key: 'error-403', + label: '403', + url: '/error/403' + }, { + key: 'error-404', + label: '404', + url: '/error/404' + }, { + key: 'error-408', + label: '408', + url: '/error/408' + }, { + key: 'error-500', + label: '500', + url: '/error/500' + }, { + key: 'maintenance', + label: 'Maintenance', + url: '/maintenance' + }] + }] +}, { + key: 'components', + label: 'Components', + icon: TbComponents, + children: [{ + key: 'ui-one', + label: 'Base UI One', + icon: LuPencilRuler, + children: [{ + key: 'accordions', + label: 'Accordions', + url: '/ui/accordions' + }, { + key: 'alerts', + label: 'Alerts', + url: '/ui/alerts' + }, { + key: 'images', + label: 'Images', + url: '/ui/images' + }, { + key: 'badges', + label: 'Badges', + url: '/ui/badges' + }, { + key: 'breadcrumb', + label: 'Breadcrumb', + url: '/ui/breadcrumb' + }, { + key: 'buttons', + label: 'Buttons', + url: '/ui/buttons' + }, { + key: 'cards', + label: 'Cards', + url: '/ui/cards' + }, { + key: 'carousel', + label: 'Carousel', + url: '/ui/carousel' + }, { + key: 'collapse', + label: 'Collapse', + url: '/ui/collapse' + }, { + key: 'colors', + label: 'Colors', + url: '/ui/colors' + }, { + key: 'dropdowns', + label: 'Dropdowns', + url: '/ui/dropdowns' + }, { + key: 'videos', + label: 'Videos', + url: '/ui/videos' + }, { + key: 'grid', + label: 'Grid Options', + url: '/ui/grid' + }] + }, { + key: 'ui-two', + label: 'Base UI Two', + icon: LuPencilRuler, + children: [{ + key: 'links', + label: 'Links', + url: '/ui/links' + }, { + key: 'list-group', + label: 'List Group', + url: '/ui/list-group' + }, { + key: 'modals', + label: 'Modals', + url: '/ui/modals' + }, { + key: 'notifications', + label: 'Notifications', + url: '/ui/notifications' + }, { + key: 'offcanvas', + label: 'Offcanvas', + url: '/ui/offcanvas' + }, { + key: 'placeholders', + label: 'Placeholders', + url: '/ui/placeholders' + }, { + key: 'pagination', + label: 'Pagination', + url: '/ui/pagination' + }, { + key: 'popovers', + label: 'Popovers', + url: '/ui/popovers' + }, { + key: 'progress', + label: 'Progress', + url: '/ui/progress' + }, { + key: 'spinners', + label: 'Spinners', + url: '/ui/spinners' + }, { + key: 'tabs', + label: 'Tabs', + url: '/ui/tabs' + }, { + key: 'tooltips', + label: 'Tooltips', + url: '/ui/tooltips' + }, { + key: 'typography', + label: 'Typography', + url: '/ui/typography' + }, { + key: 'utilities', + label: 'Utilities', + url: '/ui/utilities' + }] + }, { + key: 'widgets', + label: 'Widgets', + icon: LuDessert, + url: '/widgets' + }, { + key: 'apexchart-1', + label: 'Apex Charts 1', + icon: LuChartNoAxesCombined, + children: [{ + key: 'apex-area-chart', + label: 'Area', + url: '/charts/apex/area' + }, { + key: 'apex-bar-chart', + label: 'Bar', + url: '/charts/apex/bar' + }, { + key: 'apex-bubble-chart', + label: 'Bubble', + url: '/charts/apex/bubble' + }, { + key: 'apex-candlestick-chart', + label: 'Candlestick', + url: '/charts/apex/candlestick' + }, { + key: 'apex-column-chart', + label: 'Column', + url: '/charts/apex/column' + }, { + key: 'apex-heatmap-chart', + label: 'Heatmap', + url: '/charts/apex/heatmap' + }, { + key: 'apex-line-chart', + label: 'Line', + url: '/charts/apex/line' + }, { + key: 'apex-mixed-chart', + label: 'Mixed', + url: '/charts/apex/mixed' + }, { + key: 'apex-timeline-chart', + label: 'Timeline', + url: '/charts/apex/timeline' + }, { + key: 'apex-boxplot-chart', + label: 'Boxplot', + url: '/charts/apex/boxplot' + }, { + key: 'apex-treemap-chart', + label: 'Treemap', + url: '/charts/apex/treemap' + }] + }, { + key: 'apexchart-2', + label: 'Apex Charts 2', + icon: LuChartNoAxesCombined, + children: [{ + key: 'apex-pie-chart', + label: 'Pie', + url: '/charts/apex/pie' + }, { + key: 'apex-radar-chart', + label: 'Radar', + url: '/charts/apex/radar' + }, { + key: 'apex-radialbar-chart', + label: 'Radialbar', + url: '/charts/apex/radialbar' + }, { + key: 'apex-scatter-chart', + label: 'Scatter', + url: '/charts/apex/scatter' + }, { + key: 'apex-polar-area-chart', + label: 'Polar Area', + url: '/charts/apex/polar-area' + }, { + key: 'apex-sparkline-chart', + label: 'Sparklines', + url: '/charts/apex/sparklines' + }, { + key: 'apex-range-chart', + label: 'Range', + url: '/charts/apex/range' + }, { + key: 'apex-funnel-chart', + label: 'Funnel', + url: '/charts/apex/funnel' + }, { + key: 'apex-slope-chart', + label: 'Slope', + url: '/charts/apex/slope' + }, { + key: 'apex-tree', + label: 'Apex Tree', + url: '/charts/apex-tree' + }] + }, { + key: 'forms', + label: 'Forms', + icon: LuFileInput, + children: [{ + key: 'form-basic-elements', + label: 'Basic Elements', + url: '/forms/basic' + }, { + key: 'form-pickers', + label: 'Pickers', + url: '/forms/pickers' + }, { + key: 'form-select', + label: 'Select', + url: '/forms/select' + }, { + key: 'form-validation', + label: 'Validation', + url: '/forms/validation' + }, { + key: 'form-wizard', + label: 'Wizard', + url: '/forms/wizard' + }, { + key: 'form-file-uploads', + label: 'File Uploads', + url: '/forms/file-uploads' + }, { + key: 'form-text-editors', + label: 'Text Editors', + url: '/forms/editors' + }, { + key: 'form-slider', + label: 'Slider', + url: '/forms/slider' + }, { + key: 'form-layouts', + label: 'Layouts', + url: '/forms/layouts' + }, { + key: 'form-other-plugins', + label: 'Other Plugins', + url: '/forms/other-plugins' + }] + }, { + key: 'icons', + label: 'Icons', + icon: LuSparkles, + children: [{ + key: 'tabler-icons', + label: 'Tabler', + url: '/icons/tabler' + }, { + key: 'lucide-icons', + label: 'Lucide', + url: '/icons/lucide' + }, { + key: 'flags', + label: 'Flags', + url: '/icons/flags' + }] + }, { + key: 'maps', + label: 'Maps', + icon: LuMapPinned, + children: [{ + key: 'vector-maps', + label: 'Vector Maps', + url: '/maps/vector' + }, { + key: 'leaflet-maps', + label: 'Leaflet Maps', + url: '/maps/leaflet' + }] + }] +}, { + key: 'miscellaneous', + label: 'Miscellaneous', + icon: LuHousePlug, + children: [{ + key: 'nestable-list', + label: 'Nestable List', + url: '/miscellaneous/nestable-list' + }, { + key: 'pdf-viewer', + label: 'PDF Viewer', + url: '/miscellaneous/pdf-viewer' + }, { + key: 'sweet-alert', + label: 'Sweet Alert', + url: '/miscellaneous/sweet-alert' + }, { + key: 'password-meter', + label: 'Password Meter', + url: '/miscellaneous/password-meter' + }, { + key: 'clipboard', + label: 'Clipboard', + url: '/miscellaneous/clipboard' + }, { + key: 'tree-view', + label: 'Tree View', + url: '/miscellaneous/tree-view' + }, { + key: 'tour', + label: 'Tour', + url: '/miscellaneous/tour' + }] +}, { + key: 'tables', + label: 'Tables', + icon: LuTable, + children: [{ + key: 'static-tables', + label: 'Static Tables', + url: '/tables/static' + }, { + key: 'tanstack-tables', + label: 'Tanstack Tables', + url: '/tables/tanstack' + }, { + key: 'data-tables', + label: 'DataTables', + badge: { + variant: 'success', + text: '13' + }, + children: [{ + key: 'data-tables-basic', + label: 'Basic', + url: '/tables/data-tables/basic' + }, { + key: 'data-tables-export-data', + label: 'Export Data', + url: '/tables/data-tables/export-data' + }, { + key: 'data-tables-select', + label: 'Select', + url: '/tables/data-tables/select' + }, { + key: 'data-tables-ajax', + label: 'Ajax', + url: '/tables/data-tables/ajax' + }, { + key: 'data-tables-javascript-source', + label: 'Javascript Source', + url: '/tables/data-tables/javascript-source' + }, { + key: 'data-tables-data-rendering', + label: 'Data Rendering', + url: '/tables/data-tables/data-rendering' + }, { + key: 'data-tables-scroll', + label: 'Scroll', + url: '/tables/data-tables/scroll' + }, { + key: 'data-tables-columns', + label: 'Show & Hide Column', + url: '/tables/data-tables/columns' + }, { + key: 'data-tables-child-rows', + label: 'Child Rows', + url: '/tables/data-tables/child-rows' + }, { + key: 'data-tables-column-searching', + label: 'Column Searching', + url: '/tables/data-tables/column-searching' + }, { + key: 'data-tables-fixed-header', + label: 'Fixed Header', + url: '/tables/data-tables/fixed-header' + }, { + key: 'data-tables-add-rows', + label: 'Add Rows', + url: '/tables/data-tables/add-rows' + }, { + key: 'data-tables-checkbox-select', + label: 'Checkbox Select', + url: '/tables/data-tables/checkbox-select' + }] + }] +}, { + key: 'layouts', + label: 'Layouts', + icon: LuProportions, + children: [{ + key: 'layout-options', + label: 'Layout Options', + icon: LuProportions, + children: [{ + key: 'scrollable', + label: 'Scrollable', + url: '/layouts/scrollable' + }, { + key: 'compact', + label: 'Compact', + url: '/layouts/compact' + }, { + key: 'boxed', + label: 'Boxed', + url: '/layouts/boxed' + }, { + key: 'horizontal', + label: 'Horizontal', + url: '/layouts/horizontal' + }] + }, { + key: 'sidebars', + label: 'Sidebars', + icon: LuPanelRightClose, + children: [{ + key: 'compact-menu', + label: 'Compact Menu', + url: '/layouts/sidebars/compact' + }, { + key: 'icon-view-menu', + label: 'Icon View Menu', + url: '/layouts/sidebars/icon-view' + }, { + key: 'on-hover-menu', + label: 'On Hover Menu', + url: '/layouts/sidebars/on-hover' + }, { + key: 'on-hover-active-menu', + label: 'On Hover Active Menu', + url: '/layouts/sidebars/on-hover-active' + }, { + key: 'offcanvas-menu', + label: 'Offcanvas Menu', + url: '/layouts/sidebars/offcanvas' + }, { + key: 'no-icons-with-lines-menu', + label: 'No Icons With Lines', + url: '/layouts/sidebars/no-icons-with-lines' + }, { + key: 'with-lines-menu', + label: 'Sidebar With Lines', + url: '/layouts/sidebars/with-lines' + }, { + key: 'light-menu', + label: 'Light Menu', + url: '/layouts/sidebars/light' + }, { + key: 'gradient-menu', + label: 'Gradient Menu', + url: '/layouts/sidebars/gradient' + }, { + key: 'gray-menu', + label: 'Gray Menu', + url: '/layouts/sidebars/gray' + }, { + key: 'image-menu', + label: 'Image Menu', + url: '/layouts/sidebars/image' + }] + }, { + key: 'topbars', + label: 'Topbar', + icon: LuPanelTop, + children: [{ + key: 'dark-topbar', + label: 'Dark Topbar', + url: '/layouts/topbars/dark' + }, { + key: 'gray-topbar', + label: 'Gray Topbar', + url: '/layouts/topbars/gray' + }, { + key: 'gradient-topbar', + label: 'Gradient Topbar', + url: '/layouts/topbars/gradient' + }] + }] +}, { + key: 'landing', + label: 'Landing', + icon: LuEarth, + url: '/landing' +}]; \ No newline at end of file diff --git a/src/layouts/components/footer/index.jsx b/src/layouts/components/footer/index.jsx new file mode 100644 index 0000000..7dcd25f --- /dev/null +++ b/src/layouts/components/footer/index.jsx @@ -0,0 +1,18 @@ +import { appName, currentYear } from '@/helpers'; +import { Col, Container, Row } from 'react-bootstrap'; + +const Footer = () => { + return ( +
+ + + + © {currentYear} {appName} + + + +
+ ); +}; + +export default Footer; diff --git a/src/layouts/components/navbar/components/AppMenu.jsx b/src/layouts/components/navbar/components/AppMenu.jsx new file mode 100644 index 0000000..4d0b74e --- /dev/null +++ b/src/layouts/components/navbar/components/AppMenu.jsx @@ -0,0 +1,67 @@ +import { horizontalMenuItems } from '@/layouts/components/data'; +import { Link, useLocation } from "react-router"; +import { Fragment } from 'react'; +import { Dropdown, DropdownMenu, DropdownToggle } from 'react-bootstrap'; +import { TbChevronDown } from 'react-icons/tb'; +const MenuItemWithChildren = ({ + item, + wrapperClass, + togglerClass, + level +}) => { + const menuLevel = level ?? 1; + const { + pathname + } = useLocation(); + const isChildActive = items => items.some(child => { + if (child.url && pathname.endsWith(child.url)) return true; + if (child.children) return isChildActive(child.children); + return false; + }); + const isActive = isChildActive(item.children || []); + return 1 ? 'div' : 'li'} drop={menuLevel > 1 ? 'end' : 'down'} className={`${wrapperClass ?? ''} ${isActive ? 'active' : ''}`}> + + {item.icon && + + } + {item.label} + {item.badge && {item.badge.text}} + + + + {(item.children || []).map((child, idx) => + {child.children ? : } + )} + + ; +}; +const MenuItem = ({ + item, + linkClass, + wrapperClass, + level +}) => { + const menuLevel = level ?? 1; + const { + pathname + } = useLocation(); + const isActive = item.url && pathname.endsWith(item.url); + const link = + {item.icon && + + } + {item.label} + {item.badge && {item.badge.text}} + ; + return menuLevel > 1 ? link :
  • {link}
  • ; +}; +const AppMenu = () => { + return
    +
      + {horizontalMenuItems.map((item, idx) => + {item.children ? : } + )} +
    +
    ; +}; +export default AppMenu; \ No newline at end of file diff --git a/src/layouts/components/navbar/index.jsx b/src/layouts/components/navbar/index.jsx new file mode 100644 index 0000000..d2c2db1 --- /dev/null +++ b/src/layouts/components/navbar/index.jsx @@ -0,0 +1,11 @@ +import AppMenu from '@/layouts/components/navbar/components/AppMenu'; +const Navbar = () => { + return
    + +
    ; +}; +export default Navbar; \ No newline at end of file diff --git a/src/layouts/components/responsive-navbar/index.jsx b/src/layouts/components/responsive-navbar/index.jsx new file mode 100644 index 0000000..2c59b19 --- /dev/null +++ b/src/layouts/components/responsive-navbar/index.jsx @@ -0,0 +1,15 @@ +import Navbar from '@/layouts/components/navbar'; +import Sidenav from '@/layouts/components/sidenav'; +import { useEffect, useState } from 'react'; +const ResponsiveNavbar = () => { + const [isMobile, setIsMobile] = useState(null); + useEffect(() => { + const checkScreen = () => setIsMobile(window.innerWidth < 992); + checkScreen(); + window.addEventListener('resize', checkScreen); + return () => window.removeEventListener('resize', checkScreen); + }, []); + if (isMobile === null) return null; + return isMobile ? : ; +}; +export default ResponsiveNavbar; \ No newline at end of file diff --git a/src/layouts/components/sidenav/components/AppMenu.jsx b/src/layouts/components/sidenav/components/AppMenu.jsx new file mode 100644 index 0000000..0cd79ad --- /dev/null +++ b/src/layouts/components/sidenav/components/AppMenu.jsx @@ -0,0 +1,138 @@ +import { useLayoutContext } from '@/context/useLayoutContext'; +import { scrollToElement } from '@/helpers/layout'; +import { getMenuItems } from '@/layouts/menu'; +import { useAuth } from '@/auth/AuthProvider'; +import { Link, useLocation } from 'react-router'; +import { useEffect, useMemo, useState } from 'react'; +import { Collapse } from 'react-bootstrap'; +import { TbChevronDown } from 'react-icons/tb'; + +const MenuItemWithChildren = ({ item, openMenuKey, setOpenMenuKey, level = 0 }) => { + const { pathname } = useLocation(); + const isTopLevel = level === 0; + const [localOpen, setLocalOpen] = useState(false); + const [didAutoOpen, setDidAutoOpen] = useState(false); + const isChildActive = (children) => + children.some( + (child) => (child.url && pathname.endsWith(child.url.split('?')[0])) || (child.children && isChildActive(child.children)), + ); + const isActive = isChildActive(item.children || []); + const isOpen = isTopLevel ? openMenuKey === item.key : localOpen; + useEffect(() => { + if (isTopLevel && isActive && !didAutoOpen) { + setOpenMenuKey(item.key); + setDidAutoOpen(true); + } + if (!isTopLevel && isActive && !didAutoOpen) { + setLocalOpen(true); + setDidAutoOpen(true); + } + }, [isActive, isTopLevel, item.key, setOpenMenuKey, didAutoOpen]); + const toggleOpen = () => { + if (isTopLevel) { + setOpenMenuKey(isOpen ? null : item.key); + } else { + setLocalOpen((prev) => !prev); + } + }; + return ( +
  • + + +
    +
      + {(item.children || []).map((child) => + child.children ? ( + + ) : ( + + ), + )} +
    +
    +
    +
  • + ); +}; + +const MenuItem = ({ item }) => { + const { pathname } = useLocation(); + const path = (item.url || '/').split('?')[0]; + const isActive = item.url && (pathname === path || pathname.endsWith(path)); + const { sidenav, hideBackdrop } = useLayoutContext(); + const toggleBackdrop = () => { + if (sidenav.size === 'offcanvas') { + hideBackdrop(); + } + }; + return ( +
  • + + {item.icon && ( + + + + )} + {item.label} + {item.badge && {item.badge.text}} + +
  • + ); +}; + +const AppMenu = () => { + const [openMenuKey, setOpenMenuKey] = useState(null); + const { permissions, roles, domain, user } = useAuth(); + const menuItems = useMemo( + () => getMenuItems({ permissions, roles, domain, email: user?.email }), + [permissions, roles, domain, user?.email], + ); + const scrollToActiveLink = () => { + const activeItem = document.querySelector('.side-nav-link.active'); + if (activeItem) { + const simpleBarContent = document.querySelector('#sidenav .simplebar-content-wrapper'); + if (simpleBarContent) { + const offset = activeItem.offsetTop - window.innerHeight * 0.4; + scrollToElement(simpleBarContent, offset, 500); + } + } + }; + useEffect(() => { + setTimeout(() => scrollToActiveLink(), 100); + }, []); + return ( +
      + {menuItems.map((item) => + item.isTitle ? ( +
    • + {item.label} +
    • + ) : item.children ? ( + + ) : ( + + ), + )} +
    + ); +}; + +export default AppMenu; diff --git a/src/layouts/components/sidenav/components/UserProfile.jsx b/src/layouts/components/sidenav/components/UserProfile.jsx new file mode 100644 index 0000000..efe2300 --- /dev/null +++ b/src/layouts/components/sidenav/components/UserProfile.jsx @@ -0,0 +1,45 @@ +import { Link } from 'react-router'; +import { Dropdown, DropdownDivider, DropdownItem, DropdownMenu, DropdownToggle } from 'react-bootstrap'; +import { TbLogout2, TbSettings, TbUserCircle } from 'react-icons/tb'; +import { useAuth } from '@/auth/AuthProvider'; + +const fallbackAvatar = (name) => + `https://ui-avatars.com/api/?background=random&name=${encodeURIComponent(name || 'User')}`; + +const UserProfile = () => { + const { user, domain, logout } = useAuth(); + const name = user?.name || [user?.firstname, user?.lastname].filter(Boolean).join(' ') || 'User'; + const avatar = user?.avatar || fallbackAvatar(name); + + return ( +
    +
    +
    + + user-image + {name} + {domain || 'Rapport'} + +
    + + + + + + + + My Account + + + + + Log Out + + + +
    +
    + ); +}; + +export default UserProfile; diff --git a/src/layouts/components/sidenav/index.jsx b/src/layouts/components/sidenav/index.jsx new file mode 100644 index 0000000..b62639c --- /dev/null +++ b/src/layouts/components/sidenav/index.jsx @@ -0,0 +1,57 @@ +import logo from '@/assets/images/rapport-logo.png'; +import { useLayoutContext } from '@/context/useLayoutContext'; +import AppMenu from '@/layouts/components/sidenav/components/AppMenu'; +import UserProfile from '@/layouts/components/sidenav/components/UserProfile'; +import { Link } from "react-router"; +import { TbMenu4, TbX } from 'react-icons/tb'; +import SimpleBar from "simplebar-react"; +const Sidenav = () => { + const { + sidenav, + hideBackdrop, + changeSideNavSize + } = useLayoutContext(); + const toggleSidebar = () => { + changeSideNavSize(sidenav.size === 'on-hover-active' ? 'on-hover' : 'on-hover-active'); + }; + const closeSidebar = () => { + const html = document.documentElement; + html.classList.toggle('sidebar-enable'); + hideBackdrop(); + }; + return
    + + + + Rapport + + + Rapport + + + + + + Rapport + + + Rapport + + + + + + + + + + {sidenav.user && } + + +
    ; +}; +export default Sidenav; \ No newline at end of file diff --git a/src/layouts/components/topbar/components/ApplicationMenu.jsx b/src/layouts/components/topbar/components/ApplicationMenu.jsx new file mode 100644 index 0000000..70434ca --- /dev/null +++ b/src/layouts/components/topbar/components/ApplicationMenu.jsx @@ -0,0 +1,113 @@ +import { Dropdown, Row, Col, Button, DropdownToggle, DropdownMenu } from 'react-bootstrap'; +import { LuCalendar, LuCirclePlus, LuFolder, LuLayoutGrid, LuMessageCircle, LuUsers } from 'react-icons/lu'; +import googleLogo from "@/assets/images/logos/google.svg"; +import figmaLogo from "@/assets/images/logos/figma.svg"; +import slackLogo from "@/assets/images/logos/slack.svg"; +import dropboxLogo from "@/assets/images/logos/dropbox.svg"; +export default function ApplicationMenu() { + return ; +} \ No newline at end of file diff --git a/src/layouts/components/topbar/components/CustomizerToggler.jsx b/src/layouts/components/topbar/components/CustomizerToggler.jsx new file mode 100644 index 0000000..486521d --- /dev/null +++ b/src/layouts/components/topbar/components/CustomizerToggler.jsx @@ -0,0 +1,13 @@ +import { useLayoutContext } from '@/context/useLayoutContext'; +import { TbSettings } from 'react-icons/tb'; +const CustomizerToggler = () => { + const { + customizer + } = useLayoutContext(); + return
    + +
    ; +}; +export default CustomizerToggler; \ No newline at end of file diff --git a/src/layouts/components/topbar/components/FullscreenToggle.jsx b/src/layouts/components/topbar/components/FullscreenToggle.jsx new file mode 100644 index 0000000..f22c774 --- /dev/null +++ b/src/layouts/components/topbar/components/FullscreenToggle.jsx @@ -0,0 +1,34 @@ +import { LuMaximize, LuMinimize } from 'react-icons/lu'; +import { useState } from 'react'; +const FullscreenToggle = () => { + const [fullScreenOn, setFullScreenOn] = useState(false); + const toggleFullScreen = () => { + const document = window.document; + if (!document.fullscreenElement && /* alternative standard method */!document.mozFullScreenElement && !document.webkitFullscreenElement) { + // current working methods + if (document.documentElement.requestFullscreen) { + document.documentElement.requestFullscreen(); + } else if (document.documentElement.mozRequestFullScreen) { + document.documentElement.mozRequestFullScreen(); + } else if (document.documentElement.webkitRequestFullscreen) { + document.documentElement.webkitRequestFullscreen(); + } + setFullScreenOn(true); + } else { + if (document.cancelFullScreen) { + document.cancelFullScreen(); + } else if (document.mozCancelFullScreen) { + document.mozCancelFullScreen(); + } else if (document.webkitCancelFullScreen) { + document.webkitCancelFullScreen(); + } + setFullScreenOn(false); + } + }; + return
    + +
    ; +}; +export default FullscreenToggle; \ No newline at end of file diff --git a/src/layouts/components/topbar/components/LanguageDropdown.jsx b/src/layouts/components/topbar/components/LanguageDropdown.jsx new file mode 100644 index 0000000..5c51434 --- /dev/null +++ b/src/layouts/components/topbar/components/LanguageDropdown.jsx @@ -0,0 +1,56 @@ +import { useState } from 'react'; +import { Dropdown, DropdownItem, DropdownMenu, DropdownToggle } from 'react-bootstrap'; +import flagDE from '@/assets/images/flags/de.svg'; +import flagES from '@/assets/images/flags/es.svg'; +import flagIN from '@/assets/images/flags/in.svg'; +import flagIT from '@/assets/images/flags/it.svg'; +import flagRU from '@/assets/images/flags/ru.svg'; +import flagUS from '@/assets/images/flags/us.svg'; +const availableLanguages = [{ + code: 'en', + name: 'English', + nativeName: 'English', + flag: flagUS +}, { + code: 'de', + name: 'German', + nativeName: 'Deutsch', + flag: flagDE +}, { + code: 'it', + name: 'Italian', + nativeName: 'Italiano', + flag: flagIT +}, { + code: 'es', + name: 'Spanish', + nativeName: 'Español', + flag: flagES +}, { + code: 'ru', + name: 'Russian', + nativeName: 'Русский', + flag: flagRU +}, { + code: 'hi', + name: 'Hindi', + nativeName: 'हिन्दी', + flag: flagIN +}]; +const LanguageDropdown = () => { + const [language, setLanguage] = useState(availableLanguages[0]); + return
    + + + user-image + + + {availableLanguages.map(lang => setLanguage(lang)}> + English + {lang.nativeName} + )} + + +
    ; +}; +export default LanguageDropdown; \ No newline at end of file diff --git a/src/layouts/components/topbar/components/MegaMenu.jsx b/src/layouts/components/topbar/components/MegaMenu.jsx new file mode 100644 index 0000000..004c597 --- /dev/null +++ b/src/layouts/components/topbar/components/MegaMenu.jsx @@ -0,0 +1,130 @@ +import { Link } from "react-router"; +import { Col, Dropdown, DropdownMenu, DropdownToggle, Row } from 'react-bootstrap'; +import { TbActivity, TbBulb, TbCalendarStats, TbChartLine, TbChartPie, TbChevronDown, TbClipboardList, TbCurrencyDollar, TbFileInvoice, TbGauge, TbKey, TbLayoutKanban, TbListCheck, TbLock, TbNotes, TbSettings, TbShieldLock, TbUserCircle, TbUsers, TbUsersGroup, TbZoomCheck } from 'react-icons/tb'; +import SimpleBar from "simplebar-react"; +const megaMenuItems = [{ + title: 'Dashboard & Analytics', + links: [{ + label: 'Sales Dashboard', + url: '', + icon: TbChartLine + }, { + label: 'Marketing Dashboard', + url: '', + icon: TbBulb + }, { + label: 'Finance Overview', + url: '', + icon: TbCurrencyDollar + }, { + label: 'User Analytics', + url: '', + icon: TbUsers + }, { + label: 'Traffic Insights', + url: '', + icon: TbActivity + }, { + label: 'Performance Metrics', + url: '', + icon: TbGauge + }, { + label: 'Conversion Tracking', + url: '', + icon: TbZoomCheck + }] +}, { + title: 'Project Management', + links: [{ + label: 'Kanban Workflow', + url: '', + icon: TbLayoutKanban + }, { + label: 'Project Timeline', + url: '', + icon: TbCalendarStats + }, { + label: 'Task Management', + url: '', + icon: TbListCheck + }, { + label: 'Team Members', + url: '', + icon: TbUsersGroup + }, { + label: 'Assignments', + url: '', + icon: TbClipboardList + }, { + label: 'Resource Allocation', + url: '', + icon: TbChartPie + }, { + label: 'Project Reports', + url: '', + icon: TbFileInvoice + }] +}, { + title: 'User Management', + links: [{ + label: 'User Profiles', + url: '', + icon: TbUserCircle + }, { + label: 'Access Control', + url: '', + icon: TbLock + }, { + label: 'Role Permissions', + url: '', + icon: TbShieldLock + }, { + label: 'Activity Logs', + url: '', + icon: TbNotes + }, { + label: 'Security Settings', + url: '', + icon: TbSettings + }, { + label: 'User Groups', + url: '', + icon: TbUsers + }, { + label: 'Authentication', + url: '', + icon: TbKey + }] +}]; +const MegaMenu = () => { + return
    + + + Mega Menu + + + + + + {megaMenuItems.map((item, idx) => +
    +
    {item.title}
    +
      + {item.links.map((link, index) =>
    • + + + {link.label} + +
    • )} +
    +
    + )} +
    +
    +
    +
    +
    ; +}; +export default MegaMenu; \ No newline at end of file diff --git a/src/layouts/components/topbar/components/MessageDropdown.jsx b/src/layouts/components/topbar/components/MessageDropdown.jsx new file mode 100644 index 0000000..6af4a25 --- /dev/null +++ b/src/layouts/components/topbar/components/MessageDropdown.jsx @@ -0,0 +1,169 @@ +import { Button, Col, Dropdown, DropdownItem, DropdownMenu, DropdownToggle, Row } from 'react-bootstrap'; +import { LuBell } from 'react-icons/lu'; +import { TbAlertCircle, TbAlertTriangle, TbBell, TbCalendarEvent, TbCheck, TbCloudUpload, TbEditCircle, TbRocket, TbServerBolt, TbXboxXFilled } from 'react-icons/tb'; +import user1 from '@/assets/images/users/user-1.jpg'; +import user2 from '@/assets/images/users/user-2.jpg'; +import user4 from '@/assets/images/users/user-4.jpg'; +import user5 from '@/assets/images/users/user-5.jpg'; +import user6 from '@/assets/images/users/user-6.jpg'; +import SimpleBar from "simplebar-react"; +import { Link } from "react-router"; +const messages = [{ + id: 'message-1', + user: { + name: 'Emily Johnson', + avatar: user1 + }, + action: 'commented on a task in', + context: 'Design Sprint', + timestamp: '12 minutes ago', + active: true, + badge: { + icon: TbBell, + variant: 'success' + } +}, { + id: 'message-2', + user: { + name: 'Ava Mitchell', + avatar: user2 + }, + action: 'commented on', + context: 'Marketing Campaign Q3', + timestamp: '12 minutes ago', + badge: { + icon: TbCloudUpload, + variant: 'info' + } +}, { + id: 'message-4', + user: { + name: 'Sophia Taylor', + avatar: user4 + }, + action: 'sent an invoice for', + context: 'Service Renewal', + timestamp: '1 hour ago', + badge: { + icon: TbAlertTriangle, + variant: 'success' + } +}, { + id: 'message-5', + user: { + name: 'Ethan Moore', + avatar: user5 + }, + action: 'completed the task', + context: 'UI Review', + timestamp: '2 hours ago', + badge: { + icon: TbCalendarEvent, + variant: 'primary' + } +}, { + id: 'message-6', + user: { + name: 'Olivia White', + avatar: user6 + }, + action: 'assigned you a task in', + context: 'Sales Pipeline', + timestamp: 'Yesterday', + badge: { + icon: TbEditCircle, + variant: 'secondary' + } +}, { + id: 'message-7', + user: { + name: 'Server #3', + icon: TbServerBolt, + bgClass: 'bg-light' + }, + action: 'CPU usage exceeded 90%', + context: '', + timestamp: 'Just Now', + badge: { + icon: TbAlertCircle, + variant: 'danger' + } +}, { + id: 'message-8', + user: { + name: 'Product Server', + icon: TbRocket, + bgClass: 'bg-light' + }, + action: 'assigned you a task in', + context: 'Sales Pipeline', + timestamp: 'Yesterday', + badge: { + icon: TbCheck, + variant: 'success' + } +}]; +const MessageDropdown = () => { + return
    + + + + 7 + + + +
    + + +
    Notifications
    + + + + 07 Notifications + + +
    +
    + + + {messages.map(message => + + {message.user.icon && + + + + + + unread notification + + } + {message.user.avatar && + User Avatar + + + unread notification + + } + + {message.user.name} {message.action} + {message.context} +
    + {message.timestamp} +
    + +
    +
    )} +
    + + + Read All Messages + +
    +
    +
    ; +}; +export default MessageDropdown; \ No newline at end of file diff --git a/src/layouts/components/topbar/components/MonochromeThemeModeToggler.jsx b/src/layouts/components/topbar/components/MonochromeThemeModeToggler.jsx new file mode 100644 index 0000000..86efd43 --- /dev/null +++ b/src/layouts/components/topbar/components/MonochromeThemeModeToggler.jsx @@ -0,0 +1,13 @@ +import { LuPalette } from 'react-icons/lu'; +import { useLayoutContext } from '@/context/useLayoutContext'; +const MonochromeThemeModeToggler = () => { + const { + toggleMonochromeMode + } = useLayoutContext(); + return
    + +
    ; +}; +export default MonochromeThemeModeToggler; \ No newline at end of file diff --git a/src/layouts/components/topbar/components/ThemeToggler.jsx b/src/layouts/components/topbar/components/ThemeToggler.jsx new file mode 100644 index 0000000..d7f669c --- /dev/null +++ b/src/layouts/components/topbar/components/ThemeToggler.jsx @@ -0,0 +1,53 @@ +import { useEffect, useState } from 'react'; +import { useLayoutContext } from '@/context/useLayoutContext'; +import { Dropdown, DropdownItem, DropdownMenu, DropdownToggle } from 'react-bootstrap'; +import { LuMonitorCog, LuMoon, LuSun } from 'react-icons/lu'; +import { toPascalCase } from '@/helpers/casing'; +import clsx from 'clsx'; +const ThemeToggler = () => { + const { + theme, + changeTheme + } = useLayoutContext(); + const [mounted, setMounted] = useState(false); + useEffect(() => { + setMounted(true); + }, []); + if (!mounted) return null; + const themeOptions = [{ + layoutTheme: 'light', + icon: LuSun + }, { + layoutTheme: 'dark', + icon: LuMoon + }, { + layoutTheme: 'system', + icon: LuMonitorCog + }]; + + // Pick toggle icon based on current theme + const ActiveIcon = theme === 'dark' ? LuMoon : theme === 'system' ? LuMonitorCog : LuSun; + return
    + + + + + + + {themeOptions.map(({ + layoutTheme, + icon: Icon + }) =>
  • + + + {toPascalCase(layoutTheme)} + changeTheme(layoutTheme)} /> + +
  • )} +
    +
    +
    ; +}; +export default ThemeToggler; \ No newline at end of file diff --git a/src/layouts/components/topbar/components/UserProfile.jsx b/src/layouts/components/topbar/components/UserProfile.jsx new file mode 100644 index 0000000..5a072c9 --- /dev/null +++ b/src/layouts/components/topbar/components/UserProfile.jsx @@ -0,0 +1,43 @@ +import { Link } from 'react-router'; +import { Dropdown, DropdownDivider, DropdownItem, DropdownMenu, DropdownToggle } from 'react-bootstrap'; +import { TbChevronDown, TbLogout2, TbUserCircle } from 'react-icons/tb'; +import { useAuth } from '@/auth/AuthProvider'; + +const fallbackAvatar = (name) => + `https://ui-avatars.com/api/?background=random&name=${encodeURIComponent(name || 'User')}`; + +const UserProfile = () => { + const { user, domain, logout } = useAuth(); + const name = user?.name || [user?.firstname, user?.lastname].filter(Boolean).join(' ') || 'User'; + const avatar = user?.avatar || fallbackAvatar(name); + + return ( +
    + + + user-image +
    +
    {name}
    + +
    +
    + +
    +
    {domain || 'Rapport'}
    +
    + + + My Account + + + + + Log Out + +
    +
    +
    + ); +}; + +export default UserProfile; diff --git a/src/layouts/components/topbar/index.jsx b/src/layouts/components/topbar/index.jsx new file mode 100644 index 0000000..c5823e0 --- /dev/null +++ b/src/layouts/components/topbar/index.jsx @@ -0,0 +1,60 @@ +import { useLayoutContext } from '@/context/useLayoutContext'; +import ThemeToggler from '@/layouts/components/topbar/components/ThemeToggler'; +import UserProfile from '@/layouts/components/topbar/components/UserProfile'; +import FullscreenToggle from '@/layouts/components/topbar/components/FullscreenToggle'; +import { Link } from 'react-router'; +import { Container } from 'react-bootstrap'; +import { TbMenu4 } from 'react-icons/tb'; +import logo from '@/assets/images/rapport-logo.png'; + +const Topbar = () => { + const { sidenav, changeSideNavSize, showBackdrop } = useLayoutContext(); + const toggleSideNav = () => { + const html = document.documentElement; + const currentSize = html.getAttribute('data-sidenav-size'); + if (currentSize === 'offcanvas') { + html.classList.toggle('sidebar-enable'); + showBackdrop(); + } else if (sidenav.size === 'compact') { + changeSideNavSize(currentSize === 'compact' ? 'condensed' : 'compact', false); + } else { + changeSideNavSize(currentSize === 'condensed' ? 'default' : 'condensed'); + } + }; + return ( +
    + +
    +
    + + + Rapport + + + Rapport + + + + + Rapport + + + Rapport + + +
    + +
    +
    + + + +
    +
    +
    + ); +}; + +export default Topbar; diff --git a/src/layouts/menu.js b/src/layouts/menu.js new file mode 100644 index 0000000..edb1466 --- /dev/null +++ b/src/layouts/menu.js @@ -0,0 +1,291 @@ +import { + LuAirplay, + LuAward, + LuChartNoAxesCombined, + LuBookOpen, + LuBriefcase, + LuFileText, + LuTruck, + LuUsers, +} from 'react-icons/lu'; + +const hasAny = (permissions, keys) => keys.some((key) => permissions.includes(key)); + +const child = (key, label, url, permission, extra = {}) => ({ + key, + label, + url, + permission, + ...extra, +}); + +export function getMenuItems({ permissions = [], roles = [], domain = '', email = '' } = {}) { + const items = [ + { + key: 'domain-title', + label: `Domain: ${domain || '-'}`, + isTitle: true, + }, + { + key: 'dashboard', + label: 'Dashboard', + icon: LuAirplay, + url: '/', + }, + { + key: 'quick-actions', + label: 'Quick Actions', + icon: LuFileText, + url: '/formaction/consolelist', + }, + ]; + + if ( + hasAny(permissions, [ + 'users_get_all', + 'userattribute_get_all', + 'roles_get_all', + 'hierarchy_get_all', + 'team_get_all', + 'group_get_all', + 'channel_get_all', + 'domain_get_one', + ]) + ) { + items.push({ + key: 'organisation', + label: 'Organisation', + icon: LuBriefcase, + children: [ + child('users', 'Users', '/users', 'users_get_all'), + child('userattributes', 'User Attributes', '/userattributes', 'userattribute_get_all'), + child('roles', 'Roles', '/roles', 'roles_get_all'), + child('hierarchys', 'Hierarchy', '/hierarchys', 'hierarchy_get_all'), + child('positions', 'Positions', '/positions', 'all_data_access'), + child('teams', 'Teams', '/teams', 'team_get_all'), + child('groups', 'Groups', '/groups', 'group_get_all'), + child('channels', 'Channels', '/channels', 'channel_get_all'), + child('domain', 'Domain', '/domain/edit', 'domain_get_one'), + child('apps', 'Apps', '/apps', 'app_get_all'), + ].filter((item) => !item.permission || permissions.includes(item.permission)), + }); + } + + if (permissions.includes('maxterneo_ho')) { + items.push({ + key: 'special-price', + label: 'Special Price Request Approvals', + url: '/form/allsubmissions?partition=rapport-maxterneo&form_id=1745393615-b4248b7a-b416-42ce-bf7a-9e76fae07cad', + }); + } + + if (hasAny(permissions, ['contact_get_all', 'contactattribute_get_all'])) { + items.push({ + key: 'contacts', + label: 'Contact Management', + icon: LuUsers, + children: [ + child('contact-list', 'Contacts', '/contacts', 'contact_get_all'), + child('contact-export', 'Contact Export', '/contactexports', 'contact_get_all'), + child('contact-attrs', 'Attributes', '/contactattributes', 'contactattribute_get_all'), + ].filter((item) => !item.permission || permissions.includes(item.permission)), + }); + } + + if (domain === 'team2') { + items.push({ + key: 'chemist', + label: 'Chemist Availability', + icon: LuFileText, + url: '/foracortchemistavailabilitys', + }); + } + + if (domain === 'gennovadc') { + items.push({ + key: 'mydtx', + label: 'MYDTx Dashboard', + icon: LuFileText, + url: '/gennovadcreport/dashboard', + }); + } + + if (domain === 'pulmocare' && roles.includes('1650360330-5bf35594-674a-4f31-HO_Audit-47738d2151ab')) { + items.push({ + key: 'healthy-lung', + label: 'Healthy Lung Educator Daily reporting (Camp/ Clinic)', + icon: LuFileText, + url: '/form/allsubmissions?partition=rapport-pulmocare&form_id=1713351143-9afc68f4-653f-491a-9e0e-a27d61ed1e07', + }); + } + + if (permissions.includes('team3_nebmitra_ho')) { + items.push({ + key: 'neb-mitra', + label: 'Neb Mitra Verification', + icon: LuFileText, + url: '/form/nebmitraverification', + }); + } + + if (domain === 'pulmocare') { + items.push({ + key: 'coaching', + label: 'Coaching Tool Reports', + icon: LuBookOpen, + children: [ + child('sbm-me-action', 'SBM/ME Action Plan Timeline', '/coachingtooldashboard/sbmandmeactionplanreport'), + child('rm-action', 'RM Action Plan Timeline', '/coachingtooldashboard/rmactionplanreport'), + child('sbm-goal', 'SBM/ME Goal & Proficiency Tracking', '/coachingtooldashboard/sbmandmegoalandproficiencytrackingreport'), + child('rm-goal', 'RM Goal & Proficiency Tracking', '/coachingtooldashboard/rmgoalandproficiencytracking'), + child('sbm-coachee', 'SBM/ME Coachee Report', '/coachingtooldashboard/sbmcoacheereport'), + child('rm-coachee', 'RM Coachee Report', '/coachingtooldashboard/rmcoacheereport'), + ], + }); + } + + if (hasAny(permissions, ['magazine_get_all', 'wallmessage_get_all', 'wallbanner_get_all', 'widgets_get_all'])) { + items.push({ + key: 'content', + label: 'Content', + icon: LuBookOpen, + children: [ + child('magazines', 'Magazine', '/magazines', 'magazine_get_all'), + child('walls', 'Wall', '/walls', 'wallmessage_get_all'), + child('banners', 'Banner', '/banners', 'wallbanner_get_all'), + child('widgets', 'Widgets', '/widgets', 'widgets_get_all'), + child('forums', 'Forums', '/forums', 'forum_get_all'), + ].filter((item) => !item.permission || permissions.includes(item.permission)), + }); + } + + const nebRoles = [ + '1733912682-7c353bf8-c309-49b3-93e7-superdepotmanager', + '1733912682-7c353bf8-c309-49b3-93e7-depotmanager', + '1733912682-7c353bf8-c309-49b3-93e7-0ee3024c01fe', + '1655447696-148e5dc2-3983-4ec6-9ea3-a52c494a9209', + ]; + if (domain === 'team3' && roles.some((role) => nebRoles.includes(role))) { + const nebChildren = [child('neb-report', 'Report', '/neblogisticreports')]; + if (!roles.includes('1733912682-7c353bf8-c309-49b3-93e7-depotmanager')) { + nebChildren.push( + child('neb-depot', 'Add Depot', '/neblogisticreport/depot'), + child('neb-mapping', 'Depot & TM Mapping', '/depotwithtmmappings'), + ); + } + items.push({ + key: 'neb-logistics', + label: 'Neb Logistics', + icon: LuTruck, + children: nebChildren, + }); + } + + if (hasAny(permissions, ['rcpa_product_get_all', 'rcpa_reports'])) { + items.push({ + key: 'rcpa', + label: 'RCPA', + icon: LuUsers, + children: [ + child('rcpa-products', 'Products', '/rcpaproducts', 'rcpa_product_get_all'), + child('rcpa-tm', 'TM Wise Report', '/rcpareport/tmwise', 'rcpa_reports'), + child('rcpa-month', 'Month Wise Report', '/rcpareport/monthwise', 'rcpa_reports'), + child('rcpa-form', 'Form Wise Report', '/rcpareport/formwise', 'rcpa_reports'), + child('rcpa-forms', 'Forms', '/rcpaforms', 'rcpa_form_get_all'), + ].filter((item) => !item.permission || permissions.includes(item.permission)), + }); + } + + if (hasAny(permissions, ['metric_get_all', 'injestion_mapping_get_all', 'metric_view_get_all'])) { + items.push({ + key: 'metric', + label: 'Metric', + icon: LuChartNoAxesCombined, + children: [ + child('metrics', 'Metric', '/metrics', 'metric_get_all'), + child('metricmappings', 'Injestion Mapping', '/metricmappings', 'injestion_mapping_get_all'), + child('metricviews', 'Metric Views', '/metricviews', 'metric_view_get_all'), + child('metricreports', 'Metric Reports', '/metricreports', 'metric_view_get_all'), + child('metricdataimports', 'Metric Data Import', '/metricdataimports', 'metric_view_get_all'), + child('metriccampaigns', 'Metric Campaigns', '/metriccampaigns', 'campaign_view_get_all'), + ].filter((item) => !item.permission || permissions.includes(item.permission)), + }); + } + + if ( + hasAny(permissions, [ + 'appreciation_category_get_all', + 'appreciation_image_get_all', + 'badge_list_get_all', + 'reward_category_get_all', + 'reward_get_all', + ]) + ) { + items.push({ + key: 'recognition', + label: 'Recognition', + icon: LuAward, + children: [ + child('appcats', 'Appreciation Category', '/appcategorys', 'appreciation_category_get_all'), + child('appimages', 'Appreciation Images', '/appimages', 'appreciation_image_get_all'), + child('badges', 'Badge List', '/badgelists', 'badge_list_get_all'), + child('rewardcats', 'Reward Category', '/rewardcategorys', 'reward_category_get_all'), + child('rewards', 'Rewards', '/rewards', 'reward_get_all'), + child('milestones', 'Milestones', '/milestones', 'milestones_get_all'), + ].filter((item) => !item.permission || permissions.includes(item.permission)), + }); + } + + if ( + hasAny(permissions, [ + 'formentity_get_all', + 'formaction_get_all', + 'all_data_access', + 'formexports_get_all', + 'quiz_get_all', + 'roles_leaderboard_get_all', + ]) + ) { + const formChildren = [ + child('forms', 'Forms', '/formentitys', 'formentity_get_all'), + child('formhooks', 'Form Hook', '/formhooks', 'form_hooks_get_all'), + child('surveys', 'Survey', '/surveys', 'survey_get_all'), + child('quizs', 'Quiz', '/quizs', 'quiz_get_all'), + child('formactions', 'Quick Action', '/formactions', 'formaction_get_all'), + child('formexports', 'Form Data Export', '/formexports', 'formexports_get_all'), + child('reminders', 'Reminders', '/reminders', 'reminder_get_all'), + child('leaderboards', 'Leaderboard', '/leaderboards', 'roles_leaderboard_get_all'), + ].filter((item) => !item.permission || permissions.includes(item.permission)); + + if (domain === 'titans' && permissions.includes('all_data_access')) { + formChildren.push(child('titans-hcp', 'Titans HCP Data Upload', '/titanshcpgatheringreports')); + } + if ( + ['titans', 'team2'].includes(domain) && + (permissions.includes('all_data_access') || permissions.includes('formexports_get_all')) + ) { + formChildren.push(child('monsoon', 'Monsoon Yatra Activity List', '/monsoonyatraactivitylist/import')); + } + + items.push({ + key: 'data-gathering', + label: 'Data Gathering', + icon: LuFileText, + children: formChildren, + }); + } + + if (permissions.includes('injestion_mapping_get_all') && ['pulmocare', 'breathefree'].includes(domain)) { + items.push({ + key: 'aibot', + label: 'AI Bot', + icon: LuFileText, + children: [ + child('metricdetails', 'Metric Detail', '/metricdetails'), + child('definations', 'Defination', '/definations'), + ], + }); + } + + return items.filter((item) => !item.children || item.children.length > 0); +} diff --git a/src/main.jsx b/src/main.jsx new file mode 100644 index 0000000..c84d292 --- /dev/null +++ b/src/main.jsx @@ -0,0 +1,33 @@ +import '@/assets/scss/app.scss'; +import 'datatables.net-buttons-bs5/css/buttons.bootstrap5.min.css'; +import 'datatables.net-fixedheader-bs5/css/fixedHeader.bootstrap5.min.css'; +import 'datatables.net-responsive-bs5/css/responsive.bootstrap5.min.css'; +import 'datatables.net-select-bs5/css/select.bootstrap5.min.css'; +import 'filepond-plugin-image-preview/dist/filepond-plugin-image-preview.css'; +import 'filepond/dist/filepond.min.css'; +import 'flatpickr/dist/flatpickr.min.css'; +import 'jsvectormap/dist/css/jsvectormap.min.css'; +import 'ladda/dist/ladda.min.css'; +import 'leaflet/dist/leaflet.css'; +import { StrictMode } from 'react'; +import 'react-bootstrap-typeahead/css/Typeahead.css'; +import 'react-datepicker/dist/react-datepicker.min.css'; +import 'react-day-picker/style.css'; +import { createRoot } from 'react-dom/client'; +import 'react-pdf/dist/Page/AnnotationLayer.css'; +import 'react-pdf/dist/Page/TextLayer.css'; +import 'react-quill-new/dist/quill.bubble.css'; +import 'react-quill-new/dist/quill.core.css'; +import 'react-quill-new/dist/quill.snow.css'; +import { BrowserRouter } from "react-router"; +import 'simplebar-react/dist/simplebar.min.css'; +import 'sweetalert2/dist/sweetalert2.min.css'; +import App from './App'; +import AppWrapper from "./components/AppWrapper"; +createRoot(document.getElementById('root')).render( + + + + + + ); \ No newline at end of file diff --git a/src/modules/appcategorys.js b/src/modules/appcategorys.js new file mode 100644 index 0000000..1cc8df6 --- /dev/null +++ b/src/modules/appcategorys.js @@ -0,0 +1,63 @@ +import { dropdownMap } from '@/api/dropdowns'; +import { metricOptions, splitHash, splitTilde } from '@/helpers/metric'; + +const STATUS = { active: 'Active', disabled: 'Disabled' }; + +const appcategorys = { + service: 'recognition', + module: 'appreciation_category', + title: 'Appreciation Category', + subtitle: 'Recognition', + baseUrl: '/appcategory', + listPath: '/appcategorys', + listFields: [ + { key: 'actions', title: 'Actions', buttons: ['edit', 'delete'] }, + { key: 'title', title: 'Title', type: 'text' }, + { key: 'reason', title: 'Type', type: 'text' }, + { key: 'roles', title: 'Roles', type: 'text' }, + { key: 'icon', title: 'Icon', type: 'image' }, + { key: 'points', title: 'Points', type: 'text' }, + { key: 'status', title: 'Status', type: 'select' }, + ], + formFields: async () => { + const [groups, roles, metrics] = await Promise.all([ + dropdownMap('ums', 'group', (item) => item.name), + dropdownMap('ums', 'roles', (item) => item.name), + metricOptions(), + ]); + return [ + { key: 'title', title: 'Title', type: 'text', required: true }, + { key: 'status', title: 'Status', type: 'select', required: true, values: STATUS }, + { key: 'reason', title: 'Resaon', type: 'textarea', required: true, fullwidth: true }, + { key: 'points', title: 'Points', type: 'text', required: true }, + { + key: 'notification_type', + title: 'Notification Type', + type: 'select', + required: true, + values: { overlay: 'Overlay', normal: 'Normal' }, + }, + { key: 'groups', title: 'Groups', type: 'multiselect', required: true, values: groups }, + { key: 'roles', title: 'Roles', type: 'multiselect', required: true, values: roles }, + { key: 'who_can_send', title: 'Who can send', type: 'multiselect', values: roles }, + { key: 'icon', title: 'Icon', type: 'image', required: true }, + { key: 'mapped_metric', title: 'Point Metric', type: 'select', values: metrics }, + { key: 'count_metric', title: 'Count Metric', type: 'select', values: metrics }, + ]; + }, + beforeForm: (item) => ({ + ...item, + groups: splitHash(item.groups), + roles: splitHash(item.roles), + who_can_send: splitTilde(item.who_can_send), + }), + beforeSave: (data) => ({ + ...data, + groups: splitHash(data.groups), + roles: splitHash(data.roles), + who_can_send: splitTilde(data.who_can_send), + mapped_metric: data.mapped_metric || '', + }), +}; + +export default appcategorys; diff --git a/src/modules/appimages.js b/src/modules/appimages.js new file mode 100644 index 0000000..b774b4c --- /dev/null +++ b/src/modules/appimages.js @@ -0,0 +1,45 @@ +import { dropdownMap } from '@/api/dropdowns'; +import { splitHash } from '@/helpers/metric'; + +const STATUS = { active: 'Active', disabled: 'Disabled' }; + +const appimages = { + service: 'recognition', + module: 'appreciation_image', + title: 'Appreciation Image', + subtitle: 'Recognition', + baseUrl: '/appimage', + listPath: '/appimages', + listFields: [ + { key: 'actions', title: 'Actions', buttons: ['edit', 'delete'] }, + { key: 'title', title: 'Title', type: 'text' }, + { key: 'roles', title: 'Roles', type: 'text' }, + { key: 'image', title: 'Image', type: 'image' }, + { key: 'status', title: 'Status', type: 'select' }, + ], + formFields: async () => { + const [groups, roles] = await Promise.all([ + dropdownMap('ums', 'group', (item) => item.name), + dropdownMap('ums', 'roles', (item) => item.name), + ]); + return [ + { key: 'title', title: 'Title', type: 'text', required: true }, + { key: 'status', title: 'Status', type: 'select', required: true, values: STATUS }, + { key: 'groups', title: 'Groups', type: 'multiselect', required: true, values: groups }, + { key: 'roles', title: 'Roles', type: 'multiselect', required: true, values: roles }, + { key: 'image', title: 'Image', type: 'image', required: true }, + ]; + }, + beforeForm: (item) => ({ + ...item, + groups: splitHash(item.groups), + roles: splitHash(item.roles), + }), + beforeSave: (data) => ({ + ...data, + groups: splitHash(data.groups), + roles: splitHash(data.roles), + }), +}; + +export default appimages; diff --git a/src/modules/apps.js b/src/modules/apps.js new file mode 100644 index 0000000..600354b --- /dev/null +++ b/src/modules/apps.js @@ -0,0 +1,26 @@ +const apps = { + service: 'detailing', + module: 'app', + title: 'App', + baseUrl: '/app', + listPath: '/apps', + listFields: [ + { key: 'actions', title: 'Actions', buttons: ['edit', 'delete'] }, + { key: 'name', title: 'Name', type: 'text' }, + { key: 'android_min_version', title: 'Android Min Version', type: 'text' }, + { key: 'ios_min_version', title: 'IOS Min Version', type: 'text' }, + { key: 'status', title: 'Status', type: 'select' }, + ], + formFields: () => [ + { key: 'name', title: 'Name', type: 'text', required: true }, + { key: 'status', title: 'Status', type: 'select', required: true, values: { active: 'Active', disabled: 'Disabled' } }, + { key: 'android_package', title: 'Android Package', type: 'text', required: true }, + { key: 'ios_package', title: 'IOS Package', type: 'text', required: true }, + { key: 'android_min_version', title: 'Android Min Version', type: 'text', required: true }, + { key: 'ios_min_version', title: 'IOS Min Version', type: 'text', required: true }, + { key: 'android_store_link', title: 'Android Store Link', type: 'text', required: true }, + { key: 'ios_store_link', title: 'IOS Store Link', type: 'text', required: true }, + ], +}; + +export default apps; diff --git a/src/modules/badgelists.js b/src/modules/badgelists.js new file mode 100644 index 0000000..0b6f223 --- /dev/null +++ b/src/modules/badgelists.js @@ -0,0 +1,67 @@ +import { dropdownMap } from '@/api/dropdowns'; +import { metricOptions, splitHash, splitTilde } from '@/helpers/metric'; + +const STATUS = { active: 'Active', disabled: 'Disabled' }; + +function conditionsText(value) { + if (Array.isArray(value)) return value.filter(Boolean).join('#'); + return value || ''; +} + +const badgelists = { + service: 'recognition', + module: 'badge_list', + title: 'Badge List', + subtitle: 'Recognition', + baseUrl: '/badgelist', + listPath: '/badgelists', + listFields: [ + { key: 'actions', title: 'Actions', buttons: ['edit', 'delete'] }, + { key: 'title', title: 'Title', type: 'text' }, + { key: 'roles', title: 'Roles', type: 'text' }, + { key: 'points', title: 'Points', type: 'text' }, + { key: 'status', title: 'Status', type: 'select' }, + ], + formFields: async () => { + const [groups, roles, metrics] = await Promise.all([ + dropdownMap('ums', 'group', (item) => item.name), + dropdownMap('ums', 'roles', (item) => item.name), + metricOptions(), + ]); + return [ + { key: 'title', title: 'Title', type: 'text', required: true }, + { key: 'status', title: 'Status', type: 'select', required: true, values: STATUS }, + { key: 'points', title: 'Points', type: 'text', required: true }, + { + key: 'notification_type', + title: 'Notification Type', + type: 'select', + required: true, + values: { overlay: 'Overlay', normal: 'Normal' }, + }, + { key: 'groups', title: 'Groups', type: 'multiselect', required: true, values: groups }, + { key: 'roles', title: 'Roles', type: 'multiselect', required: true, values: roles }, + { key: 'who_can_send', title: 'Who can send', type: 'multiselect', values: roles }, + { key: 'image', title: 'Image', type: 'image', required: true }, + { key: 'conditions', title: 'Conditions', type: 'text', required: true }, + { key: 'mapped_metric', title: 'Point Metric', type: 'select', values: metrics }, + { key: 'count_metric', title: 'Count Metric', type: 'select', values: metrics }, + ]; + }, + beforeForm: (item) => ({ + ...item, + groups: splitHash(item.groups), + roles: splitHash(item.roles), + who_can_send: splitTilde(item.who_can_send), + conditions: conditionsText(item.conditions), + }), + beforeSave: (data) => ({ + ...data, + groups: splitHash(data.groups), + roles: splitHash(data.roles), + who_can_send: splitTilde(data.who_can_send), + mapped_metric: data.mapped_metric || '', + }), +}; + +export default badgelists; diff --git a/src/modules/banners.js b/src/modules/banners.js new file mode 100644 index 0000000..78eb7f4 --- /dev/null +++ b/src/modules/banners.js @@ -0,0 +1,105 @@ +import { dropdownMap } from '@/api/dropdowns'; + +function splitHash(value) { + if (Array.isArray(value)) return value.filter(Boolean); + if (typeof value === 'string' && value.trim()) return value.split('#').filter(Boolean); + return []; +} + +async function formOptions() { + const values = {}; + const [forms, surveys, quizzes] = await Promise.all([ + dropdownMap('form', 'formentity', (item) => item.title || item.name), + dropdownMap('form', 'survey', (item) => `${item.title || item.name} (Survey)`), + dropdownMap('form', 'quiz', (item) => `${item.name || item.title} (Quiz)`), + ]); + Object.assign(values, forms, surveys, quizzes); + return values; +} + +const banners = { + service: 'wall', + module: 'wallbanner', + title: 'Banner', + subtitle: 'Content', + baseUrl: '/banner', + listPath: '/banners', + listFields: [ + { key: 'actions', title: 'Actions', buttons: ['edit', 'delete'] }, + { key: 'media_url', title: 'Media', type: 'image' }, + { key: 'title', title: 'Title', type: 'text' }, + { key: 'status', title: 'Status', type: 'select' }, + ], + formFields: async () => { + const [channels, groups, roles, forms] = await Promise.all([ + dropdownMap('ums', 'channel', (item) => item.name), + dropdownMap('ums', 'group', (item) => item.name), + dropdownMap('ums', 'roles', (item) => item.name), + formOptions(), + ]); + return [ + { key: 'title', title: 'Title', type: 'text', required: true }, + { key: 'channels', title: 'Channels', type: 'multiselect', required: true, values: channels }, + { key: 'groups', title: 'Groups', type: 'multiselect', required: true, values: groups }, + { key: 'roles', title: 'Roles', type: 'multiselect', required: true, values: roles }, + { key: 'scheduled', title: 'Scheduled', type: 'yesno', required: true }, + { + key: 'position', + title: 'Position', + type: 'select', + required: true, + values: { + default: 'Default', + below_stats: 'Below Stats', + below_stats_buttons: 'Below Stats Buttons', + popup: 'Pop Up', + }, + }, + { key: 'schedule_start_date', title: 'Schedule start date', type: 'date' }, + { key: 'schedule_end_date', title: 'Schedule end date', type: 'date' }, + { key: 'media_url', title: 'Banner Image', type: 'image', required: true }, + { key: 'status', title: 'Status', type: 'select', required: true, values: { active: 'Active', disabled: 'Disabled' } }, + { key: 'has_cta', title: 'Has CTA', type: 'yesno', required: true, fullwidth: true }, + { + key: 'target_type', + title: 'Target Type', + type: 'select', + showIf: { has_cta: 'yes' }, + values: { + internal_action: 'Internal Action', + form: 'Web Form', + survey: 'Surveys', + quiz: 'Quizs', + doctorlist: 'Doctor List', + external: 'External Webpage', + external_with_token: 'External Webpage with Token', + }, + }, + { key: 'form_id', title: 'Form', type: 'select', values: forms, showIf: { has_cta: 'yes' } }, + { key: 'external_url', title: 'External Url / Internal Action', type: 'text', showIf: { has_cta: 'yes' } }, + ]; + }, + beforeForm: (item) => ({ + ...item, + channels: splitHash(item.channels), + groups: splitHash(item.groups), + roles: splitHash(item.roles), + }), + beforeSave: (data) => { + const payload = { ...data }; + payload.channels = Array.isArray(payload.channels) ? payload.channels : []; + payload.groups = Array.isArray(payload.groups) ? payload.groups.filter(Boolean).join('#') : payload.groups || ''; + payload.roles = Array.isArray(payload.roles) ? payload.roles.filter(Boolean).join('#') : payload.roles || ''; + payload.form_id = payload.form_id || 'none'; + payload.target_type = payload.target_type || '.'; + payload.external_url = payload.external_url || '.'; + if (payload.has_cta !== 'yes') { + payload.target_type = '.'; + payload.form_id = 'none'; + payload.external_url = '.'; + } + return payload; + }, +}; + +export default banners; diff --git a/src/modules/channels.js b/src/modules/channels.js new file mode 100644 index 0000000..978da4d --- /dev/null +++ b/src/modules/channels.js @@ -0,0 +1,26 @@ +const channels = { + service: 'ums', + module: 'channel', + title: 'Channels', + baseUrl: '/channel', + listPath: '/channels', + listFields: [ + { key: 'actions', title: 'Actions', buttons: ['edit', 'delete'] }, + { key: 'code', title: 'Channel Code', type: 'text' }, + { key: 'name', title: 'Channel Name', type: 'text' }, + { key: 'status', title: 'Status', type: 'select' }, + ], + formFields: () => [ + { key: 'code', title: 'Channel code', type: 'text', required: true }, + { key: 'name', title: 'Channel Name', type: 'text', required: true }, + { + key: 'status', + title: 'Status', + type: 'select', + required: true, + values: { active: 'Active', disabled: 'Disabled' }, + }, + ], +}; + +export default channels; diff --git a/src/modules/contactattributes.js b/src/modules/contactattributes.js new file mode 100644 index 0000000..788088c --- /dev/null +++ b/src/modules/contactattributes.js @@ -0,0 +1,196 @@ +import { signedGet, isSuccess } from '@/api/client'; +import { dropdownMap } from '@/api/dropdowns'; + +function splitCodes(value) { + if (Array.isArray(value)) return value.filter(Boolean); + if (typeof value === 'string' && value.trim()) { + return value + .split(',') + .map((part) => part.trim()) + .filter(Boolean); + } + return []; +} + +const OPTION_TYPES = ['select', 'multiselect', 'checkbox', 'radio']; + +const contactattributes = { + service: 'contact', + module: 'contactattribute', + title: 'Contact Attributes', + subtitle: 'Contact Management', + baseUrl: '/contactattribute', + listPath: '/contactattributes', + listFields: [ + { key: 'actions', title: 'Actions', buttons: ['edit', 'delete'] }, + { key: 'attribute', title: 'Attribute', type: 'text' }, + { key: 'sort_order', title: 'Sort Order', type: 'number' }, + { key: 'workflow', title: 'Workflow', type: 'text' }, + { key: 'status', title: 'Status', type: 'select' }, + ], + formFields: async ({ item, mode } = {}) => { + const [listRes, users] = await Promise.all([ + signedGet('contact', 'contactattribute/get_all'), + dropdownMap('ums', 'users', (user) => `${user.firstname || ''} ${user.lastname || ''} (${user.employee_code || ''})`), + ]); + const exclusionOptions = {}; + const tabOptions = {}; + const items = isSuccess(listRes) ? listRes.data?.items || [] : []; + items.forEach((attr) => { + const tabName = typeof attr.tab === 'string' ? attr.tab.trim() : ''; + if (tabName) tabOptions[tabName] = tabName; + if (!attr.code) return; + if (mode === 'edit' && item?.code && attr.code === item.code) return; + exclusionOptions[attr.code] = attr.attribute || attr.code; + }); + const currentTab = typeof item?.tab === 'string' ? item.tab.trim() : ''; + if (currentTab && !tabOptions[currentTab]) tabOptions[currentTab] = currentTab; + + const approvers = { + l1manager: 'L1 Manager', + l2manager: 'L2 Manager', + l3manager: 'L3 Manager', + l4manager: 'L4 Manager', + ...users, + }; + + return [ + { key: 'attribute', title: 'Attribute', type: 'text', required: true }, + { + key: 'code', + title: 'Code (small caps without spaces and special chars except "_")', + type: 'text', + required: true, + }, + { key: 'required', title: 'Is Required', type: 'yesno', required: true, default: 'yes' }, + { key: 'editable', title: 'Is Editable', type: 'yesno', required: true, default: 'yes' }, + { key: 'is_tag', title: 'Is Tag', type: 'yesno', required: true, default: 'no' }, + { key: 'tag_instructions', title: 'Tag Instructions', type: 'textarea', fullwidth: true }, + { + key: 'tab', + title: 'Tab', + type: 'datalist', + values: tabOptions, + placeholder: 'Choose an existing tab or type a new name', + }, + { + key: 'type', + title: 'Attribute Type', + type: 'select', + required: true, + values: { + text: 'Text', + number: 'Number', + date: 'Date', + email: 'Email', + url: 'Url', + select: 'Dropdown', + multiselect: 'Multi Select', + checkbox: 'Checkbox', + radio: 'Radio', + image: 'Image', + }, + }, + { key: 'sort_order', title: 'Sort Order', type: 'number', required: true, default: 0 }, + { key: 'max_count', title: 'Max no of Contacts per position', type: 'number', default: 0 }, + { key: 'min_count', title: 'Min no of Contacts per position', type: 'number', default: 0 }, + { key: 'exclusions', title: 'Exclusions', type: 'multiselect', values: exclusionOptions }, + { key: 'inclusions', title: 'Inclusions', type: 'multiselect', values: exclusionOptions }, + { key: 'status', title: 'Status', type: 'select', required: true, values: { active: 'Active', disabled: 'Disabled' } }, + { key: 'workflow', title: 'Enable Workflow', type: 'yesno', required: true, default: 'no' }, + { + key: 'send_approval_to_manager_if_approver_vacant', + title: 'Send Approval Notification to Manager if Approver is Vacant', + type: 'yesno', + required: true, + default: 'no', + workflowOnly: true, + }, + { + key: 'workflow_type', + title: 'Workflow Type', + type: 'select', + required: true, + default: 'single', + workflowOnly: true, + values: { single: 'Single', multiple: 'Multiple', sequencial: 'Sequential' }, + }, + { + key: 'workflow_approvers', + title: 'Workflow Approvers', + type: 'approverlist', + approvers, + fullwidth: true, + workflowOnly: true, + }, + { + key: 'options', + title: 'Options', + type: 'mapping', + fullwidth: true, + showIf: { type: OPTION_TYPES }, + }, + ]; + }, + beforeForm: (item, mode) => ({ + ...item, + exclusions: splitCodes(item.exclusions), + inclusions: splitCodes(item.inclusions), + max_count: item.max_count ?? 0, + min_count: item.min_count ?? 0, + is_tab: item.is_tab || 'no', + tab: item.tab || '', + tag_instructions: item.tag_instructions || '', + workflow: item.workflow || 'no', + send_approval_to_manager_if_approver_vacant: item.send_approval_to_manager_if_approver_vacant || 'no', + workflow_type: item.workflow_type || 'single', + workflow_approvers: + Array.isArray(item.workflow_approvers) && item.workflow_approvers.length + ? item.workflow_approvers + : item.workflow === 'yes' || mode !== 'edit' + ? ['l1manager'] + : [], + sort_order: item.sort_order ?? 0, + is_tag: item.is_tag || 'no', + required: item.required || 'yes', + editable: item.editable || 'yes', + options: Array.isArray(item.options) ? item.options : [], + }), + beforeSave: (data) => { + const payload = { ...data }; + payload.exclusions = Array.isArray(payload.exclusions) + ? payload.exclusions.filter(Boolean).map(String).join(',') + : ''; + payload.inclusions = Array.isArray(payload.inclusions) + ? payload.inclusions.filter(Boolean).map(String).join(',') + : ''; + payload.max_count = payload.max_count === '' || payload.max_count == null ? 0 : Number.parseInt(payload.max_count, 10) || 0; + payload.min_count = payload.min_count === '' || payload.min_count == null ? 0 : Number.parseInt(payload.min_count, 10) || 0; + payload.sort_order = payload.sort_order === '' || payload.sort_order == null ? 0 : Number.parseInt(payload.sort_order, 10) || 0; + payload.is_tab = payload.is_tab === 'yes' || payload.is_tab === 'no' ? payload.is_tab : 'no'; + payload.tab = typeof payload.tab === 'string' ? payload.tab.trim() : ''; + payload.workflow = payload.workflow === 'yes' || payload.workflow === 'no' ? payload.workflow : 'no'; + payload.send_approval_to_manager_if_approver_vacant = + payload.send_approval_to_manager_if_approver_vacant === 'yes' || + payload.send_approval_to_manager_if_approver_vacant === 'no' + ? payload.send_approval_to_manager_if_approver_vacant + : 'no'; + if (payload.workflow_type !== 'single' && payload.workflow_type !== 'sequencial') { + payload.workflow_type = 'single'; + } + payload.workflow_approvers = Array.isArray(payload.workflow_approvers) + ? payload.workflow_approvers.filter(Boolean) + : []; + if (payload.workflow !== 'yes') { + payload.workflow_type = 'single'; + payload.workflow_approvers = []; + payload.send_approval_to_manager_if_approver_vacant = 'no'; + } else if (!payload.workflow_approvers.length) { + payload.workflow_approvers = ['l1manager']; + } + payload.options = OPTION_TYPES.includes(payload.type) ? payload.options || [] : []; + return payload; + }, +}; + +export default contactattributes; diff --git a/src/modules/contactexports.js b/src/modules/contactexports.js new file mode 100644 index 0000000..9699f8c --- /dev/null +++ b/src/modules/contactexports.js @@ -0,0 +1,75 @@ +import { dropdownMap } from '@/api/dropdowns'; + +function positionCodesLabel(codes) { + if (Array.isArray(codes)) return codes.join(', '); + if (codes && typeof codes === 'object') return Object.values(codes).join(', '); + if (codes == null) return ''; + return String(codes); +} + +const contactexports = { + service: 'contact', + module: 'contact_exports', + title: 'Contact Exports', + subtitle: 'Contact Management', + baseUrl: '/contactexport', + listPath: '/contactexports', + skipEdit: true, + deleteMethod: 'post', + afterSaveMessage: 'Export request created. Refresh the list in a few moments to download the file when ready.', + listNotice: 'Exports run in the background. Refresh the list in a few moments to download the file when ready.', + listFields: [ + { + key: 'actions', + title: 'Actions', + buttons: ['delete', { name: 'download', hrefKey: 'download_url' }], + }, + { key: 'position_codes', title: 'Position(s)', type: 'text' }, + { key: 'export_status', title: 'Contact Status', type: 'text' }, + { key: 'file_status', title: 'File Status', type: 'text' }, + { key: 'createdAt', title: 'Created Date', type: 'datetime' }, + ], + listButtons: [ + { title: 'Add New', to: '/contactexport/addnew' }, + { title: 'Refresh', action: 'reload' }, + ], + mapItems: (items) => + (items || []).map((item) => ({ + ...item, + position_codes: positionCodesLabel(item.position_code), + })), + formFields: async () => { + const positions = await dropdownMap( + 'ums', + 'hierarchy', + (item) => `${item.name} (${item.code})`, + (item) => item.code, + ); + return [ + { + key: 'position_code', + title: 'Position(s)', + type: 'multiselect', + required: true, + exclusiveValue: 'all', + fullwidth: true, + values: { all: 'All positions', ...positions }, + }, + { + key: 'export_status', + title: 'Contact Status', + type: 'select', + required: true, + values: { active: 'Active', disabled: 'Disabled' }, + }, + ]; + }, + beforeSave: (data) => { + let positionCodes = Array.isArray(data.position_code) ? data.position_code : data.position_code ? [data.position_code] : []; + positionCodes = positionCodes.filter((code) => code !== null && code !== undefined && code !== ''); + if (positionCodes.includes('all')) positionCodes = ['all']; + return { ...data, position_code: positionCodes }; + }, +}; + +export default contactexports; diff --git a/src/modules/contacts.js b/src/modules/contacts.js new file mode 100644 index 0000000..cd60898 --- /dev/null +++ b/src/modules/contacts.js @@ -0,0 +1,68 @@ +import { signedGet, isSuccess } from '@/api/client'; +import { dropdownMap } from '@/api/dropdowns'; + +function optionValues(item) { + const values = {}; + (item.options || []).forEach((option) => { + if (option && option.value !== undefined && option.value !== null) { + values[option.value] = option.display ?? option.value; + } + }); + return values; +} + +const contacts = { + service: 'contact', + module: 'contact', + title: 'Contact', + subtitle: 'Contact Management', + baseUrl: '/contact', + listPath: '/contacts', + listType: 'ajaxlist', + saveSelected: true, + listFields: [ + { key: 'actions', title: 'Actions', buttons: ['edit', 'delete'] }, + { key: 'name', title: 'Name', type: 'text' }, + { key: 'msl_code', title: 'MSL Code', type: 'text' }, + { key: 'position_name', title: 'Position', type: 'text' }, + { key: 'user_name', title: 'Rep Name', type: 'text' }, + { key: 'status', title: 'Status', type: 'select' }, + ], + listButtons: [ + { title: 'Add New', to: '/contact/addnew' }, + { title: 'Import Contacts', to: '/contact/import' }, + { title: 'Export', to: '/contactexports' }, + ], + formFields: async () => { + const [attributesRes, positions] = await Promise.all([ + signedGet('contact', 'contactattribute/get_all'), + dropdownMap('ums', 'hierarchy', (item) => `${item.name} (${item.code})`, (item) => item.code), + ]); + const fields = [ + { key: 'name', title: 'Name', type: 'text', required: true }, + { key: 'email', title: 'Email', type: 'email', required: true }, + { key: 'phone', title: 'Phone', type: 'text', required: true }, + { key: 'msl_code', title: 'MSL Code', type: 'text' }, + { key: 'position', title: 'Position', type: 'select', required: true, values: positions }, + { key: 'status', title: 'Status', type: 'select', required: true, values: { active: 'Active', disabled: 'Disabled' } }, + ]; + const attributes = isSuccess(attributesRes) ? attributesRes.data?.items || [] : []; + attributes.forEach((item) => { + const needsOptions = ['select', 'radio', 'checkbox', 'multiselect'].includes(item.type); + fields.push({ + key: item.code, + title: item.attribute, + type: item.type || 'text', + required: item.required === 'yes', + values: needsOptions ? optionValues(item) : {}, + }); + }); + return fields; + }, + beforeForm: (item) => ({ + ...item, + position: item.position || item.hierarchy_info?.code || '', + }), +}; + +export default contacts; diff --git a/src/modules/domain.js b/src/modules/domain.js new file mode 100644 index 0000000..cefed5b --- /dev/null +++ b/src/modules/domain.js @@ -0,0 +1,184 @@ +import { dropdownMap } from '@/api/dropdowns'; + +const DESIGNATIONS = { + PM: 'PM', + MM: 'MM', + BH: 'BH', + HO: 'HO', + DSH: 'DSH', + NSM: 'NSM', + ZBM: 'ZBM', + RBM: 'RBM', + SBM: 'SBM', + ABM: 'ABM', + STM: 'Sr. TM', + TM: 'TM', +}; + +const TERRITORIES = { + Country: 'Country', + Zone: 'Zone', + State: 'State', + Region: 'Region', + Area: 'Area', + 'Pool Territory': 'Pool Territory', + Territory: 'Territory', +}; + +const MONTHS = { + 0: 'January', + 1: 'February', + 2: 'March', + 3: 'April', + 4: 'May', + 5: 'June', + 6: 'July', + 7: 'August', + 8: 'September', + 9: 'October', + 10: 'November', + 11: 'December', +}; + +const RECIPIENT_LIST = { + show_all_users: 'Show all users', + show_users_under_hierarchy: 'Show users under hierarchy', + show_users_under_hierarchy_and_peers: 'Show users under hierarchy & peers', + show_users_under_hierarchy_same_level: 'Show users under hierarchy & at same level', +}; + +function asList(value) { + if (Array.isArray(value)) return value; + if (typeof value === 'string' && value) return value.split(/[#~,]/).filter(Boolean); + return []; +} + +function parseStaticOtp(value) { + if (!value) return {}; + if (typeof value === 'object' && !Array.isArray(value)) return value; + let parsed = value; + if (typeof value === 'string') { + try { + parsed = JSON.parse(value); + } catch { + return {}; + } + } + if (Array.isArray(parsed)) { + return parsed.reduce((acc, row) => { + if (row?.role) acc[row.role] = row.otp || ''; + return acc; + }, {}); + } + return {}; +} + +const domain = { + service: 'ums', + module: 'domain', + title: 'Domain', + baseUrl: '/domain', + listPath: '/domain/edit', + singleton: true, + formFields: async () => { + const [roles, groups] = await Promise.all([ + dropdownMap('ums', 'roles', (item) => item.name), + dropdownMap('ums', 'group', (item) => item.name), + ]); + return [ + { key: 'id', title: '', type: 'hidden' }, + { key: 'name', title: 'Domain Name', type: 'text', required: true }, + { key: 'status', title: 'Status', type: 'select', required: true, values: { active: 'Active', disabled: 'Disabled' } }, + { key: 'designations', title: 'Designations', type: 'multiselect', required: true, values: DESIGNATIONS }, + { key: 'territory_types', title: 'Territory Types', type: 'multiselect', required: true, values: TERRITORIES }, + { key: 'logo', title: 'Group Image or Icon', type: 'image', required: true }, + { key: 'description', title: 'Description', type: 'textarea', required: true }, + { key: 'year_start_month', title: 'Year start month', type: 'select', required: true, values: MONTHS }, + { key: 'login_scheme', title: 'login Scheme', type: 'select', required: true, values: { OTP: 'OTP', Password: 'Password' } }, + { + key: 'otp_scheme', + title: 'OTP Scheme', + type: 'select', + required: true, + values: { + email: 'Email Only', + email_wa_pull: 'Email + Whatsapp Request', + email_wa_push: 'Email + Whatsapp Push', + wa_pull: 'Whatsapp Request Only', + wa_push: 'Whatsapp Push Only', + }, + }, + { key: 'force_change_password', title: 'Force Change Password', type: 'select', required: true, values: { Yes: 'Yes', No: 'No' } }, + { key: 'enable_registration', title: 'Enable Registration', type: 'select', required: true, values: { Yes: 'Yes', No: 'No' } }, + { key: 'registration_default_role', title: 'Registration default Role', type: 'select', values: roles }, + { key: 'registration_default_designation', title: 'Registration default Designation', type: 'text' }, + { + key: 'registration_default_status', + title: 'Registration default Status', + type: 'select', + required: true, + values: { active: 'Active', disabled: 'Disabled' }, + }, + { + key: 'registration_enable_verification', + title: 'Registration Enable Verification', + type: 'select', + required: true, + values: { yes: 'Yes', no: 'No' }, + }, + { + key: 'registration_verification_methods', + title: 'Registration Verification Methods', + type: 'multiselect', + required: true, + values: { whatsapp: 'Whatsapp', email_otp: 'Email OTP', email_link: 'Email link', sms_otp: 'SMS OTP' }, + }, + { key: 'use_default_otp', title: 'Use Default OTP', type: 'select', required: true, values: { Yes: 'Yes', No: 'No' } }, + { key: 'default_otp', title: 'Default OTP to be used', type: 'number', required: true }, + { key: 'default_password', title: 'Default Password to be used', type: 'text' }, + { key: 'static_otp_for_roles', title: 'Use Statis OTP for Roles', type: 'multitextbox', values: roles, fullwidth: true }, + { key: 'dynamic_otp_for_roles', title: 'Use Dynamic OTP for Roles', type: 'multiselect', values: roles, fullwidth: true }, + { key: 'message_sending_roles', title: 'Messages Send Enabled For', type: 'multiselect', required: true, values: roles }, + { key: 'message_recipient_list', title: 'Messages Recipient List', type: 'select', required: true, values: RECIPIENT_LIST }, + { key: 'message_recipient_groups_enabled_for', title: 'Messages Recipient Groups Show to', type: 'multiselect', required: true, values: groups }, + { key: 'message_recipient_roles_enabled_for', title: 'Messages Recipient Roles Show to', type: 'multiselect', required: true, values: roles }, + { key: 'appreciation_sending_roles', title: 'Appreciation Send Enabled For', type: 'multiselect', required: true, values: roles }, + { key: 'appreciation_recipient_list', title: 'Appreciation Recipient List', type: 'select', required: true, values: RECIPIENT_LIST }, + { key: 'badges_sending_roles', title: 'Badges Send Enabled For', type: 'multiselect', required: true, values: roles }, + { key: 'badges_recipient_list', title: 'Badges Recipient List', type: 'select', required: true, values: RECIPIENT_LIST }, + { key: 'users_extra_profile_fields', title: 'Extra Profile Fields(comma seperated)', type: 'textarea', fullwidth: true }, + { key: 'doctor_tags_roles', title: 'Doctor Tags Roles', type: 'multiselect', values: roles, fullwidth: true }, + { key: 'terms_text', title: 'Login Terms & Conditions Text', type: 'textarea', required: true, fullwidth: true }, + { key: 'android_server_key', title: 'Android Server Key', type: 'textarea', fullwidth: true }, + { key: 'ios_server_key', title: 'IOS Server Key', type: 'textarea', fullwidth: true }, + ]; + }, + beforeForm: (item) => ({ + ...item, + designations: asList(item.designations), + territory_types: asList(item.territory_types), + year_start_month: item.year_start_month == null ? '' : String(item.year_start_month), + registration_verification_methods: asList(item.registration_verification_methods), + dynamic_otp_for_roles: asList(item.dynamic_otp_for_roles), + message_sending_roles: asList(item.message_sending_roles), + message_recipient_groups_enabled_for: asList(item.message_recipient_groups_enabled_for), + message_recipient_roles_enabled_for: asList(item.message_recipient_roles_enabled_for), + appreciation_sending_roles: asList(item.appreciation_sending_roles), + badges_sending_roles: asList(item.badges_sending_roles), + doctor_tags_roles: asList(item.doctor_tags_roles), + static_otp_for_roles: parseStaticOtp(item.static_otp_for_roles), + }), + beforeSave: (data) => { + const staticOtp = Object.entries(data.static_otp_for_roles || {}) + .filter(([, otp]) => otp) + .map(([role, otp]) => ({ role, otp })); + return { + ...data, + year_start_month: data.year_start_month === '' ? data.year_start_month : Number(data.year_start_month), + static_otp_for_roles: JSON.stringify(staticOtp), + doctor_tags_roles: Array.isArray(data.doctor_tags_roles) ? data.doctor_tags_roles : [], + }; + }, +}; + +export default domain; diff --git a/src/modules/formactions.js b/src/modules/formactions.js new file mode 100644 index 0000000..fe87cd2 --- /dev/null +++ b/src/modules/formactions.js @@ -0,0 +1,96 @@ +import { dropdownMap } from '@/api/dropdowns'; +import { splitHash } from '@/helpers/metric'; + +const STATUS = { active: 'Active', disabled: 'Disabled' }; + +async function formOptions() { + const values = {}; + const [forms, surveys, quizzes] = await Promise.all([ + dropdownMap('form', 'formentity', (item) => item.title || item.name), + dropdownMap('form', 'survey', (item) => `${item.title || item.name} (Survey)`), + dropdownMap('form', 'quiz', (item) => `${item.name || item.title} (Quiz)`), + ]); + Object.assign(values, forms, surveys, quizzes); + return values; +} + +function joinHash(value) { + if (Array.isArray(value)) return value.filter(Boolean).join('#'); + return value || ''; +} + +const formactions = { + service: 'form', + module: 'formaction', + title: 'Quick Actions', + subtitle: 'Data Gathering', + baseUrl: '/formaction', + listPath: '/formactions', + listFields: [ + { key: 'actions', title: 'Actions', buttons: ['edit', 'delete'] }, + { key: 'name', title: 'Name', type: 'text' }, + { key: 'target_type', title: 'Target', type: 'text' }, + { key: 'roles', title: 'Roles', type: 'text' }, + { key: 'sort_order', title: 'Sort Order', type: 'number' }, + { key: 'status', title: 'Status', type: 'select' }, + ], + formFields: async () => { + const [groups, roles, forms] = await Promise.all([ + dropdownMap('ums', 'group', (item) => item.name), + dropdownMap('ums', 'roles', (item) => item.name), + formOptions(), + ]); + return [ + { key: 'name', title: 'Title', type: 'text', required: true }, + { key: 'status', title: 'Status', type: 'select', required: true, values: STATUS }, + { key: 'groups', title: 'Groups', type: 'multiselect', required: true, values: groups }, + { key: 'roles', title: 'Roles', type: 'multiselect', required: true, values: roles }, + { + key: 'target_type', + title: 'Target Type', + type: 'select', + required: true, + values: { + form: 'Web Form', + survey: 'Surveys', + quiz: 'Quizs', + doctorlist: 'Doctor List', + external: 'External Webpage', + internal_action: 'Internal Action', + external_with_token: 'External Webpage with Token', + }, + }, + { key: 'form_id', title: 'Form', type: 'select', values: forms }, + { + key: 'link_type', + title: 'Menu Type (valid of forms only)', + type: 'select', + required: true, + values: { formic: 'Serverless Form', form: 'Web Form', list: 'Submitted Data' }, + }, + { key: 'external_url', title: 'External Url / Internal Action', type: 'text' }, + { key: 'visiblity_check', title: 'Enable Schedule', type: 'yesno', required: true }, + { key: 'geolocation', title: 'Enable Geolocation', type: 'yesno', required: true }, + { key: 'validity_start', title: 'Schedule Start Date', type: 'datetime', required: true }, + { key: 'validity_end', title: 'Schedule End Date', type: 'datetime', required: true }, + { key: 'sort_order', title: 'Sort Order', type: 'number' }, + { key: 'icon', title: 'Action Icon', type: 'image', required: true }, + ]; + }, + beforeForm: (item) => ({ + ...item, + groups: splitHash(item.groups), + roles: splitHash(item.roles), + geolocation: item.geolocation || 'no', + sort_order: item.sort_order ?? 0, + }), + beforeSave: (data) => ({ + ...data, + groups: joinHash(data.groups), + roles: joinHash(data.roles), + sort_order: data.sort_order === '' || data.sort_order == null ? 0 : Number(data.sort_order), + external_url: data.external_url || '', + }), +}; + +export default formactions; diff --git a/src/modules/formentitys.js b/src/modules/formentitys.js new file mode 100644 index 0000000..52c67eb --- /dev/null +++ b/src/modules/formentitys.js @@ -0,0 +1,241 @@ +import { signedGet, signedPost, isSuccess } from '@/api/client'; +import { dropdownMap } from '@/api/dropdowns'; +import { splitHash } from '@/helpers/metric'; + +const STATUS = { active: 'Active', disabled: 'Disabled' }; + +function asArray(value) { + if (Array.isArray(value)) return value.filter((part) => part !== null && part !== undefined && part !== ''); + return splitHash(value); +} + +function normalizeEmailRules(raw) { + let rules = raw; + if (typeof raw === 'string' && raw.trim()) { + try { + rules = JSON.parse(raw); + } catch { + rules = []; + } + } + if (!Array.isArray(rules)) return []; + return rules.map((rule) => { + const row = rule && typeof rule === 'object' ? rule : {}; + return { + enabled: row.enabled === 'no' ? 'no' : 'yes', + manager_levels: asArray(row.manager_levels), + role_ids: asArray(row.role_ids), + selected_users: asArray(row.selected_users), + condition: typeof row.condition === 'string' ? row.condition : row.condition ? JSON.stringify(row.condition) : '', + subject: row.subject || '', + body: row.body || '', + }; + }); +} + +const formentitys = { + service: 'form', + module: 'formentity', + title: 'Form', + subtitle: 'Data Gathering', + baseUrl: '/formentity', + listPath: '/formentitys', + listFields: [ + { + key: 'actions', + title: 'Actions', + buttons: [ + 'edit', + 'delete', + { name: 'questions', to: (row) => `/formquestions?id=${row.id}`, title: 'Questions' }, + ], + }, + { key: 'title', title: 'Title', type: 'text' }, + { key: 'workflow', title: 'Workflow', type: 'text' }, + { key: 'status', title: 'Status', type: 'select' }, + ], + formFields: async () => { + const [usersRes, roles, contactRes] = await Promise.all([ + signedGet('ums', 'users/dropdown'), + dropdownMap('ums', 'roles', (item) => item.name), + signedGet('contact', 'contactattribute/get_all'), + ]); + const approvers = { + l1manager: 'L1 Manager', + l2manager: 'L2 Manager', + l3manager: 'L3 Manager', + l4manager: 'L4 Manager', + }; + const notifyUsers = {}; + const userItems = isSuccess(usersRes) ? usersRes.data?.items || [] : []; + userItems.forEach((user) => { + if (!user?.id) return; + const label = `${user.firstname || ''} ${user.lastname || ''} (${user.employee_code || ''})`.trim(); + approvers[user.id] = label; + notifyUsers[user.id] = label; + }); + const contactAttributes = {}; + const contactItems = isSuccess(contactRes) ? contactRes.data?.items || [] : []; + contactItems.forEach((attr) => { + if (attr?.code) contactAttributes[attr.code] = attr.attribute || attr.code; + }); + return [ + { key: 'title', title: 'Title', type: 'text', required: true }, + { key: 'status', title: 'Status', type: 'select', required: true, values: STATUS }, + { key: 'metric_submission', title: 'Metric Submission', type: 'yesno', required: true }, + { key: 'metric_authkey', title: 'Auth Key', type: 'text', required: true }, + { key: 'manager_de_roles', title: 'Manager Data Entry Roles', type: 'multiselect', values: roles }, + { + key: 'manager_data_child_type', + title: 'Manager Data Child Type', + type: 'multiselect', + values: { Territory: 'Territory', Area: 'Area', Region: 'Region', Zone: 'Zone', Country: 'Country' }, + }, + { + key: 'export_manager_levels', + title: 'Export Manager Levels', + type: 'multiselect', + required: true, + values: { l1manager: 'L1 Manager', l2manager: 'L2 Manager', l3manager: 'L3Manager', l4manager: 'L4 Manager' }, + }, + { key: 'contact_attributes', title: 'Include Doctor Attributes in Export', type: 'multiselect', values: contactAttributes }, + { + key: 'form_type', + title: 'Enter From Type', + type: 'select', + values: { plan_vs_execution: 'Plan vs Execution', enrollment_form: 'Enrollment Form' }, + }, + { + key: 'enrollment_form_attributes', + title: 'Enter Attributes for Enrollment Form', + type: 'multiselect', + values: contactAttributes, + showIf: { form_type: 'enrollment_form' }, + }, + { key: 'self_notification', title: 'Self Email Notification', type: 'yesno', required: true, fullwidth: true }, + { key: 'manager1_email_notification', title: '1st Level Manager Email Notification', type: 'yesno', required: true }, + { key: 'manager1_push_notification', title: '1st Level Manager Mobile Notification', type: 'yesno', required: true }, + { key: 'manager2_email_notification', title: '2nd Level Manager Email Notification', type: 'yesno', required: true }, + { key: 'manager2_push_notification', title: '2nd Level Manager Mobile Notification', type: 'yesno', required: true }, + { key: 'roles_email_notification', title: 'Email Notification to Roles', type: 'multiselect', values: roles }, + { key: 'roles_push_notification', title: 'Push Notification to Roles', type: 'multiselect', values: roles }, + { key: 'show_positions', title: 'Show Positions on Submitted Data', type: 'yesno', required: true, default: 'no' }, + { + key: 'show_positions_type', + title: 'Show Positions Type', + type: 'select', + required: true, + values: { all: 'All', loggedin: 'Logged In' }, + default: 'all', + }, + { key: 'show_manager_details', title: 'Show Managers details on Submitted Data', type: 'yesno', required: true, default: 'no' }, + { key: 'roles_info', title: 'Roles Info', type: 'yesno', required: true, default: 'no' }, + { key: 'allow_non_hierarchy_submission', title: 'Allow Non Hierarchy Submission', type: 'yesno', required: true }, + { key: 'workflow', title: 'Enable Workflow', type: 'yesno', required: true }, + { + key: 'workflow_type', + title: 'Workflow type', + type: 'select', + required: true, + values: { single: 'Single Persoon', multiple: 'Multiple person', sequencial: 'Sequencial' }, + }, + { key: 'retain_status_on_resubmit', title: 'Retain workflow status on resubmit', type: 'yesno', required: true }, + { key: 'approver_can_edit', title: 'Approver can edit entry', type: 'yesno', required: true }, + { key: 'send_email_workflow_notification', title: 'Send Email Workflow Notification', type: 'yesno', required: true }, + { + key: 'send_approval_to_manager_if_approver_vacant', + title: 'Send Approval Notification to Manager if Approver is Vacant', + type: 'yesno', + required: true, + }, + { key: 'is_personalized', title: 'Is Personalization Needed', type: 'yesno', required: true }, + { key: 'allow_delete_by_user', title: 'Allow Submission Delete by User', type: 'yesno', required: true }, + { key: 'auto_approve', title: 'Want To Auto Approve', type: 'yesno', required: true }, + { key: 'auto_approve_condition', title: 'Auto Approve Condition If Any', type: 'textarea', fullwidth: true }, + { key: 'export_fields', title: 'Export Fields', type: 'textarea', fullwidth: true }, + { key: 'workflow_approvers', title: 'Metric', type: 'mapping', required: true, approvers, fullwidth: true }, + { key: 'email_notification', title: 'Email Notification', type: 'yesno', required: true, default: 'no', fullwidth: true }, + { + key: 'email_notification_rules', + title: 'Email Notification Rules', + type: 'email_notifications', + fullwidth: true, + hide_label: true, + showIf: { email_notification: 'yes' }, + manager_levels: { + l1manager: 'L1 Manager', + l2manager: 'L2 Manager', + l3manager: 'L3 Manager', + l4manager: 'L4 Manager', + }, + roles, + users: notifyUsers, + }, + ]; + }, + beforeForm: (item) => { + const next = { ...item }; + const yesno = (value, fallback = 'no') => (value ? String(value).toLowerCase() : fallback); + next.self_notification = yesno(next.self_notification); + next.manager1_email_notification = yesno(next.manager1_email_notification); + next.manager1_push_notification = yesno(next.manager1_push_notification); + next.manager2_email_notification = yesno(next.manager2_email_notification); + next.manager2_push_notification = yesno(next.manager2_push_notification); + next.send_approval_to_manager_if_approver_vacant = yesno(next.send_approval_to_manager_if_approver_vacant); + next.export_fields = next.export_fields || ''; + next.email_notification_rules = normalizeEmailRules(next.email_notification_rules); + next.email_notification = next.email_notification || (next.email_notification_rules.length ? 'yes' : 'no'); + next.form_type = next.form_type || ''; + next.enrollment_form_attributes = asArray(next.enrollment_form_attributes); + next.auto_approve = yesno(next.auto_approve); + next.auto_approve_condition = next.auto_approve_condition || ''; + next.roles_info = yesno(next.roles_info); + if (!next.show_positions) next.show_positions = next.show_position || 'no'; + next.show_positions = String(next.show_positions).toLowerCase(); + if (!next.show_positions_type) next.show_positions_type = next.show_position_type || 'all'; + next.show_positions_type = String(next.show_positions_type).toLowerCase(); + if (!['all', 'loggedin'].includes(next.show_positions_type)) next.show_positions_type = 'all'; + next.show_manager_details = yesno(next.show_manager_details); + next.manager_de_roles = asArray(next.manager_de_roles); + next.manager_data_child_type = asArray(next.manager_data_child_type); + next.export_manager_levels = asArray(next.export_manager_levels); + next.contact_attributes = asArray(next.contact_attributes); + next.roles_email_notification = asArray(next.roles_email_notification); + next.roles_push_notification = asArray(next.roles_push_notification); + next.workflow_approvers = Array.isArray(next.workflow_approvers) && next.workflow_approvers.length ? next.workflow_approvers : ['l1manager']; + return next; + }, + beforeSave: async (data, mode) => { + const payload = { ...data }; + payload.manager_data_child_type = asArray(payload.manager_data_child_type); + payload.export_manager_levels = asArray(payload.export_manager_levels); + payload.manager_de_roles = asArray(payload.manager_de_roles); + payload.contact_attributes = asArray(payload.contact_attributes); + payload.enrollment_form_attributes = asArray(payload.enrollment_form_attributes); + payload.roles_email_notification = asArray(payload.roles_email_notification); + payload.roles_push_notification = asArray(payload.roles_push_notification); + payload.workflow_approvers = Array.isArray(payload.workflow_approvers) + ? payload.workflow_approvers.filter(Boolean) + : []; + payload.email_notification = payload.email_notification === 'yes' ? 'yes' : 'no'; + payload.roles_info = payload.roles_info === 'yes' ? 'yes' : 'no'; + if (payload.email_notification === 'no') { + payload.email_notification_rules = []; + } else { + payload.email_notification_rules = normalizeEmailRules(payload.email_notification_rules); + } + if (mode === 'new') { + const mapping = await signedPost('metric', 'injestion_mapping/create', { + name: payload.title, + status: 'active', + }); + if (isSuccess(mapping) && mapping.data?.item?.id) { + payload.map_auth_key = mapping.data.item.id; + } + payload.metric_submission = 'yes'; + } + return payload; + }, +}; + +export default formentitys; diff --git a/src/modules/formexports.js b/src/modules/formexports.js new file mode 100644 index 0000000..1f75284 --- /dev/null +++ b/src/modules/formexports.js @@ -0,0 +1,63 @@ +import { signedGet, isSuccess } from '@/api/client'; +import { dropdownMap } from '@/api/dropdowns'; + +const STATUS = { active: 'Active', disabled: 'Disabled' }; + +const formexports = { + service: 'form', + module: 'formexports', + title: 'Form Exports', + subtitle: 'Data Gathering', + baseUrl: '/formexport', + listPath: '/formexports', + skipEdit: true, + afterSaveMessage: 'Export request created. Refresh the list in a few moments to download the file when ready.', + listNotice: 'Exports run in the background. Refresh the list in a few moments to download the file when ready.', + listFields: [ + { + key: 'actions', + title: 'Actions', + buttons: ['delete', { name: 'download', hrefKey: 'download_url', requireReady: false }], + }, + { key: 'form_name', title: 'Form Name', type: 'text' }, + { key: 'start_date', title: 'Start Date', type: 'text' }, + { key: 'end_date', title: 'End Date', type: 'text' }, + { key: 'state', title: 'Status', type: 'text' }, + { key: 'createdAt', title: 'Created Date', type: 'text' }, + ], + listButtons: [ + { title: 'Add New', to: '/formexport/addnew' }, + { title: 'Refresh', action: 'reload' }, + ], + formFields: async () => { + const [forms, dropdown] = await Promise.all([ + dropdownMap('form', 'formentity', (item) => item.title), + signedGet('form', 'formentity/dropdown'), + ]); + const questions = isSuccess(dropdown) ? dropdown.data?.questions || [] : []; + return [ + { key: 'form_id', title: 'Select Form', type: 'select', required: true, values: forms }, + { + key: 'date_field', + title: 'Select Date Field', + type: 'dependent_select', + required: true, + dependsOn: 'form_id', + questions, + staticOptions: { record_date: 'Default Date (Recommended)' }, + }, + { key: 'start_date', title: 'Start Date', type: 'date', required: true }, + { key: 'end_date', title: 'End Date', type: 'date', required: true }, + { key: 'status', title: 'Status', type: 'select', required: true, values: STATUS }, + ]; + }, + beforeSave: async (data) => { + const forms = await dropdownMap('form', 'formentity', (item) => item.title); + return { + ...data, + form_name: forms[data.form_id] || data.form_name || '', + }; + }, +}; + +export default formexports; diff --git a/src/modules/formhooks.js b/src/modules/formhooks.js new file mode 100644 index 0000000..5c01ac0 --- /dev/null +++ b/src/modules/formhooks.js @@ -0,0 +1,51 @@ +import { dropdownMap } from '@/api/dropdowns'; + +const STATUS = { active: 'Active', disabled: 'Disabled' }; + +const formhooks = { + service: 'metric', + module: 'form_hooks', + title: 'Form Hook', + subtitle: 'Data Gathering', + baseUrl: '/formhook', + listPath: '/formhooks', + listFields: [ + { key: 'actions', title: 'Actions', buttons: ['edit', 'delete'] }, + { key: 'title', title: 'Title', type: 'text' }, + { key: 'status', title: 'Status', type: 'select' }, + ], + formFields: async () => { + const forms = await dropdownMap('form', 'formentity', (item) => item.title || item.name); + return [ + { key: 'title', title: 'Title', type: 'text', required: true }, + { key: 'form_id', title: 'Form', type: 'select', required: true, values: forms }, + { key: 'function_name', title: 'Function Name', type: 'text', required: true }, + { key: 'status', title: 'Status', type: 'select', required: true, values: STATUS }, + { key: 'conditions', title: 'Conditions', type: 'textarea', fullwidth: true }, + ]; + }, + beforeForm: (item) => ({ + ...item, + conditions: + item.conditions && typeof item.conditions === 'object' + ? JSON.stringify(item.conditions, null, 2) + : item.conditions || '', + }), + beforeSave: (data) => { + const payload = { ...data }; + const raw = String(payload.conditions || '').trim(); + if (!raw) { + payload.conditions = ''; + } else { + try { + payload.conditions = JSON.parse(raw); + } catch { + payload.conditions = raw; + } + } + if (!payload.id && payload.form_id) payload.id = payload.form_id; + return payload; + }, +}; + +export default formhooks; diff --git a/src/modules/formquestions.js b/src/modules/formquestions.js new file mode 100644 index 0000000..fb5c714 --- /dev/null +++ b/src/modules/formquestions.js @@ -0,0 +1,67 @@ +const FORM_QUESTION_TYPES = { + text: 'Text', + textarea: 'Textarea', + number: 'Number', + date: 'Date', + time: 'Time', + email: 'Email', + url: 'Url', + dropdown: 'Dropdown', + checkbox: 'Checkbox', + radio: 'Radio', + radiometrix: 'RadioMetrix', + multitextbox: 'Multi Text Boxes', + contacts: 'Contacts', + file: 'File Upload', +}; + +const STATUS = { active: 'Active', disabled: 'Disabled' }; + +const formquestions = { + service: 'form', + module: 'formquestion', + title: 'Form Questions', + subtitle: 'Data Gathering', + baseUrl: '/formquestion', + listPath: '/formquestions', + missingParentMessage: 'Form not found', + parentParam: { urlKey: 'id', apiKey: 'entity_id' }, + parentField: { urlKey: 'id', field: 'entity_id' }, + listFields: [ + { key: 'actions', title: 'Actions', buttons: ['edit', 'delete'] }, + { key: 'question', title: 'Question', type: 'text' }, + { key: 'sort_order', title: 'Sort Order', type: 'text' }, + { key: 'status', title: 'Status', type: 'select' }, + ], + listButtons: [ + { title: 'Add New', to: '/formquestion/addnew' }, + { title: 'Back to Forms', to: '/formentitys' }, + ], + formFields: () => [ + { key: 'question', title: 'Question', type: 'text', required: true, fullwidth: true }, + { + key: 'code', + title: 'Code (small caps without spaces and special chars except "_")', + type: 'text', + required: true, + }, + { key: 'type', title: 'Question Type', type: 'select', required: true, values: FORM_QUESTION_TYPES }, + { key: 'required', title: 'Is Required', type: 'yesno', required: true }, + { key: 'sort_order', title: 'Sort Order', type: 'number' }, + { key: 'status', title: 'Status', type: 'select', required: true, values: STATUS }, + { key: 'options', title: 'Options', type: 'mapping', variant: 'question_options', fullwidth: true }, + ], + beforeForm: (item) => ({ + ...item, + sort_order: item.sort_order ?? 0, + options: Array.isArray(item.options) ? item.options : [], + }), + beforeSave: (data) => ({ + ...data, + sort_order: data.sort_order === '' || data.sort_order == null ? 0 : Number(data.sort_order), + options: Array.isArray(data.options) ? data.options : [], + }), +}; + +export default formquestions; +export { FORM_QUESTION_TYPES, STATUS as FORM_STATUS }; diff --git a/src/modules/forums.js b/src/modules/forums.js new file mode 100644 index 0000000..b151155 --- /dev/null +++ b/src/modules/forums.js @@ -0,0 +1,57 @@ +import { dropdownMap } from '@/api/dropdowns'; + +function splitHash(value) { + if (Array.isArray(value)) return value.filter(Boolean); + if (typeof value === 'string' && value.trim()) return value.split('#').filter(Boolean); + return []; +} + +const forums = { + service: 'forum', + module: 'forum', + title: 'Forums', + subtitle: 'Content', + baseUrl: '/forum', + listPath: '/forums', + listFields: [ + { + key: 'actions', + title: 'Actions', + buttons: [ + 'edit', + 'delete', + { name: 'topic', to: (row) => `/forumtopics?id=${row.id}`, title: 'Topics' }, + ], + }, + { key: 'thumbnail', title: 'Thumbnail', type: 'image' }, + { key: 'name', title: 'Forum Name', type: 'text' }, + { key: 'sort_order', title: 'Sort Order', type: 'text' }, + { key: 'status', title: 'Status', type: 'select' }, + ], + formFields: async () => { + const [groups, roles] = await Promise.all([ + dropdownMap('ums', 'group', (item) => item.name), + dropdownMap('ums', 'roles', (item) => item.name), + ]); + return [ + { key: 'name', title: 'Forum Name', type: 'text', required: true }, + { key: 'groups', title: 'Groups', type: 'multiselect', required: true, values: groups }, + { key: 'roles', title: 'Roles', type: 'multiselect', required: true, values: roles }, + { key: 'description', title: 'Forum Description', type: 'textarea', required: true, fullwidth: true }, + { key: 'thumbnail', title: 'Forum Thumbnail for Dashboard', type: 'image', required: true }, + { key: 'status', title: 'Status', type: 'select', required: true, values: { active: 'Active', disabled: 'Disabled' } }, + ]; + }, + beforeForm: (item) => ({ + ...item, + groups: splitHash(item.groups), + roles: splitHash(item.roles), + }), + beforeSave: (data) => ({ + ...data, + groups: Array.isArray(data.groups) ? data.groups.filter(Boolean) : [], + roles: Array.isArray(data.roles) ? data.roles.filter(Boolean) : [], + }), +}; + +export default forums; diff --git a/src/modules/forumtopics.js b/src/modules/forumtopics.js new file mode 100644 index 0000000..df78e2f --- /dev/null +++ b/src/modules/forumtopics.js @@ -0,0 +1,31 @@ +const forumtopics = { + service: 'forum', + module: 'forumtopic', + title: 'Forum Topics', + subtitle: 'Content', + baseUrl: '/forumtopic', + listPath: '/forumtopics', + missingParentMessage: 'Forum not found', + parentParam: { urlKey: 'id', apiKey: 'forum_id' }, + parentField: { urlKey: 'id', field: 'forum_id' }, + listFields: [ + { key: 'actions', title: 'Actions', buttons: ['edit', 'delete'] }, + { key: 'title', title: 'Topic Name', type: 'text' }, + { key: 'description', title: 'Topic Description', type: 'text' }, + { key: 'up_votes', title: 'Up votes', type: 'text' }, + { key: 'down_votes', title: 'Down votes', type: 'text' }, + { key: 'status', title: 'Status', type: 'select' }, + ], + listButtons: [ + { title: 'Add New', to: '/forumtopic/addnew' }, + { title: 'Back to Forums', to: '/forums' }, + ], + formFields: () => [ + { key: 'title', title: 'Topic Name', type: 'text', required: true }, + { key: 'description', title: 'Topic Description', type: 'textarea', required: true, fullwidth: true }, + { key: 'status', title: 'Status', type: 'select', required: true, values: { active: 'Active', disabled: 'Disabled' } }, + { key: 'attachment', title: 'Attachment', type: 'text' }, + ], +}; + +export default forumtopics; diff --git a/src/modules/groups.js b/src/modules/groups.js new file mode 100644 index 0000000..571a288 --- /dev/null +++ b/src/modules/groups.js @@ -0,0 +1,42 @@ +import { dropdownMap } from '@/api/dropdowns'; + +const groups = { + service: 'detailing', + module: 'group', + title: 'Groups', + baseUrl: '/group', + listPath: '/groups', + listFields: [ + { key: 'actions', title: 'Actions', buttons: ['edit', 'delete'] }, + { key: 'name', title: 'Group Name', type: 'text' }, + { key: 'visiblity', title: 'Visiblity', type: 'select' }, + { key: 'status', title: 'Status', type: 'select' }, + ], + formFields: async () => { + const [channels, users] = await Promise.all([ + dropdownMap('ums', 'channel', (item) => item.name), + dropdownMap('ums', 'users', (item) => `${item.firstname || ''} ${item.lastname || ''} (${item.employee_code || ''})`), + ]); + return [ + { key: 'name', title: 'Group Name', type: 'text', required: true }, + { key: 'visiblity', title: 'Visiblity', type: 'select', required: true, values: { public: 'Public', private: 'Private' } }, + { key: 'channel', title: 'Channel', type: 'select', required: true, values: channels }, + { key: 'status', title: 'Status', type: 'select', required: true, values: { active: 'Active', disabled: 'Disabled' } }, + { key: 'image', title: 'Group Image or Icon', type: 'image' }, + { key: 'managers', title: 'Managers', type: 'multiselect', required: true, values: users, fullwidth: true }, + { key: 'members', title: 'Members', type: 'bigmultiselect', required: true, values: users, fullwidth: true }, + ]; + }, + beforeForm: (item) => ({ + ...item, + managers: typeof item.managers === 'string' ? item.managers.split('#').filter(Boolean) : item.managers || [], + members: typeof item.members === 'string' ? item.members.split('#').filter(Boolean) : item.members || [], + }), + beforeSave: (data) => ({ + ...data, + managers: Array.isArray(data.managers) ? data.managers.join('#') : data.managers, + members: Array.isArray(data.members) ? data.members.join('#') : data.members, + }), +}; + +export default groups; diff --git a/src/modules/leaderboards.js b/src/modules/leaderboards.js new file mode 100644 index 0000000..97fd655 --- /dev/null +++ b/src/modules/leaderboards.js @@ -0,0 +1,126 @@ +import { dropdownMap } from '@/api/dropdowns'; +import { + DEFAULT_INTERVAL_VALUES, + INTERVAL_VALUES, + metricOptions, + parseCombinedMetrics, + splitHash, + toDateInput, +} from '@/helpers/metric'; + +const STATUS = { active: 'Active', disabled: 'Disabled' }; +const YES_NO = { yes: 'Yes', no: 'No' }; + +function asArray(value) { + if (Array.isArray(value)) return value.filter((part) => part !== null && part !== undefined && part !== ''); + return splitHash(value); +} + +const leaderboards = { + service: 'reports', + module: 'roles_leaderboard', + title: 'Leaderboard', + subtitle: 'Data Gathering', + baseUrl: '/leaderboard', + listPath: '/leaderboards', + listFields: [ + { key: 'actions', title: 'Actions', buttons: ['edit', 'delete'] }, + { key: 'name', title: 'Name', type: 'text' }, + { key: 'sort_order', title: 'Sort Order', type: 'number' }, + { key: 'visible_roles_label', title: 'Visible Roles', type: 'text' }, + { key: 'validity_start', title: 'Validity start', type: 'text' }, + { key: 'validity_end', title: 'Validity end', type: 'text' }, + { key: 'status', title: 'Status', type: 'select' }, + ], + mapItems: (items) => + (items || []).map((item) => ({ + ...item, + visible_roles_label: asArray(item.visible_roles).join(', '), + sort_order: item.sort_order ?? 0, + })), + formFields: async () => { + const [metrics, roles] = await Promise.all([metricOptions(), dropdownMap('ums', 'roles', (item) => item.name)]); + return [ + { key: 'name', title: 'Name', type: 'text', required: true }, + { key: 'sort_order', title: 'Sort Order', type: 'number', required: true }, + { key: 'validity_start', title: 'Validity start', type: 'date', required: true }, + { key: 'validity_end', title: 'Validity end', type: 'date', required: true }, + { key: 'visible_roles', title: 'Visible Roles', type: 'multiselect', values: roles, required: true }, + { key: 'reporting_roles', title: 'Reporting Roles', type: 'multiselect', values: roles, required: true }, + { key: 'rank_roles', title: 'Rank Roles', type: 'rank_roles', roles, required: true, fullwidth: true }, + { + key: 'metrics', + title: 'Choose Metric', + type: 'mapping', + variant: 'grouped', + required: true, + metrics, + fullwidth: true, + }, + { key: 'combined_metrics', title: 'Combined Metrics (if any)', type: 'combined_metrics', fullwidth: true }, + { key: 'intervals', title: 'Intervals', type: 'multiselect', required: true, values: INTERVAL_VALUES }, + { key: 'default_interval', title: 'Default Interval', type: 'select', values: { '': 'Overall / All', all: 'Overall', ...DEFAULT_INTERVAL_VALUES } }, + { key: 'show_positions', title: 'Show Positions', type: 'select', required: true, values: YES_NO }, + { + key: 'show_positions_type', + title: 'Show Positions Type', + type: 'select', + required: true, + values: { all: 'All', loggedin: 'Logged In' }, + }, + { key: 'status', title: 'Status', type: 'select', required: true, values: STATUS }, + ]; + }, + beforeForm: (item) => { + const next = { ...item }; + next.sort_order = next.sort_order ?? 0; + next.show_positions = next.show_positions || 'no'; + next.show_positions_type = next.show_positions_type || 'all'; + next.status = next.status || 'active'; + next.default_interval = next.default_interval ?? ''; + next.validity_start = toDateInput(next.validity_start); + next.validity_end = toDateInput(next.validity_end); + next.visible_roles = asArray(next.visible_roles); + next.reporting_roles = asArray(next.reporting_roles); + next.intervals = asArray(next.intervals); + next.rank_roles = Array.isArray(next.rank_roles) ? next.rank_roles : []; + next.metrics = Array.isArray(next.metrics) + ? next.metrics.map((row) => ({ + metric: row.metric || '', + display: row.display || '', + sort_order: row.sort_order ?? 0, + weight: row.weight ?? 1, + list_view: row.list_view || 'yes', + })) + : []; + next.combined_metrics = parseCombinedMetrics(next.combined_metrics); + return next; + }, + beforeSave: (data) => { + const payload = { ...data }; + payload.sort_order = payload.sort_order === '' || payload.sort_order == null ? 0 : Number(payload.sort_order); + payload.visible_roles = asArray(payload.visible_roles); + payload.reporting_roles = asArray(payload.reporting_roles); + payload.intervals = asArray(payload.intervals); + payload.rank_roles = (Array.isArray(payload.rank_roles) ? payload.rank_roles : []) + .filter((row) => row.title || row.role) + .map((row) => ({ + title: row.title || '', + role: row.role || '', + limit: row.limit === '' || row.limit == null ? 10 : Number(row.limit), + sort_order: row.sort_order === '' || row.sort_order == null ? 0 : Number(row.sort_order), + })); + payload.metrics = (Array.isArray(payload.metrics) ? payload.metrics : []) + .filter((row) => row.metric) + .map((row) => ({ + metric: row.metric, + display: row.display || '', + sort_order: row.sort_order === '' || row.sort_order == null ? 0 : Number(row.sort_order), + weight: row.weight === '' || row.weight == null ? '1' : String(row.weight), + })); + payload.combined_metrics = Array.isArray(payload.combined_metrics) ? payload.combined_metrics : []; + return payload; + }, +}; + +export default leaderboards; diff --git a/src/modules/magazines.js b/src/modules/magazines.js new file mode 100644 index 0000000..8117ab7 --- /dev/null +++ b/src/modules/magazines.js @@ -0,0 +1,93 @@ +import { signedGet, isSuccess } from '@/api/client'; +import { dropdownMap } from '@/api/dropdowns'; + +function splitHash(value) { + if (Array.isArray(value)) return value.filter(Boolean); + if (typeof value === 'string' && value.trim()) return value.split('#').filter(Boolean); + return []; +} + +async function metricOptions() { + const response = await signedGet('metric', 'metric/get_all'); + const values = { NA: 'Tracking Not Needed' }; + const items = isSuccess(response) ? response.data?.items || [] : []; + items.forEach((item) => { + if (item?.id) values[item.id] = item.name || item.id; + }); + return values; +} + +const magazines = { + service: 'mag', + module: 'magazine', + title: 'Magazines', + subtitle: 'Content', + baseUrl: '/magazine', + listPath: '/magazines', + listFields: [ + { + key: 'actions', + title: 'Actions', + buttons: [ + 'edit', + 'delete', + { name: 'medias', to: (row) => `/magmedias?id=${row.id}`, title: 'Medias' }, + ], + }, + { key: 'image', title: 'Media Thumb', type: 'image' }, + { key: 'name', title: 'Magazine Name', type: 'text' }, + { key: 'sort_order', title: 'Sort Order', type: 'text' }, + { key: 'status', title: 'Status', type: 'select' }, + ], + formFields: async () => { + const [groups, roles, metrics] = await Promise.all([ + dropdownMap('ums', 'group', (item) => item.name), + dropdownMap('ums', 'roles', (item) => item.name), + metricOptions(), + ]); + return [ + { key: 'name', title: 'Magazine Name', type: 'text', required: true }, + { key: 'status', title: 'Status', type: 'select', required: true, values: { active: 'Active', disabled: 'Disabled' } }, + { key: 'groups', title: 'Groups', type: 'multiselect', values: groups }, + { key: 'roles', title: 'Roles', type: 'multiselect', values: roles }, + { key: 'description', title: 'Magazine Description', type: 'textarea', required: true, fullwidth: true }, + { key: 'is_sequenced', title: 'Is Sequenced', type: 'yesno', required: true }, + { key: 'has_expiry', title: 'Has expiry', type: 'yesno', required: true }, + { key: 'expiry_date', title: 'Expiry date', type: 'date', required: true }, + { + key: 'media_types', + title: 'Media Types', + type: 'multiselect', + required: true, + values: { image: 'Image', video: 'Video', pdf: 'PDF', scorm: 'Scorm' }, + }, + { key: 'image', title: 'Magazine Image or Icon', type: 'image', required: true }, + { key: 'thumb', title: 'Magazine Thumbnail for Dashboard', type: 'image', required: true }, + { key: 'sort_order', title: 'Sort Order', type: 'number', required: true }, + { key: 'completed_points', title: 'Points when Completed', type: 'number', required: true }, + { key: 'completed_metric', title: 'Completed Metric', type: 'select', required: true, values: metrics }, + { key: 'completed_points_metric', title: 'Completed Points Metric', type: 'select', required: true, values: metrics }, + ]; + }, + beforeForm: (item) => ({ + ...item, + groups: splitHash(item.groups), + roles: splitHash(item.roles), + media_types: splitHash(item.media_types), + sort_order: item.sort_order ?? 0, + cost: item.cost ?? 0, + subscriptions: Array.isArray(item.subscriptions) ? item.subscriptions : [], + }), + beforeSave: (data) => ({ + ...data, + groups: Array.isArray(data.groups) ? data.groups : [], + roles: Array.isArray(data.roles) ? data.roles : [], + media_types: Array.isArray(data.media_types) ? data.media_types : [], + sort_order: Number.parseInt(data.sort_order, 10) || 0, + cost: data.cost == null || data.cost === '' ? 0 : Number.parseInt(data.cost, 10) || 0, + completed_points: Number.parseInt(data.completed_points, 10) || 0, + subscriptions: Array.isArray(data.subscriptions) ? data.subscriptions : [], + }), +}; + +export default magazines; diff --git a/src/modules/magmedias.js b/src/modules/magmedias.js new file mode 100644 index 0000000..04dcdc7 --- /dev/null +++ b/src/modules/magmedias.js @@ -0,0 +1,163 @@ +import { signedGet, isSuccess } from '@/api/client'; +import { dropdownMap } from '@/api/dropdowns'; + +const FILE_TYPES = ['image', 'video', 'pdf', 'audio', 'scorm']; +const FORM_TYPES = ['form', 'quiz', 'survey']; +const LINK_TYPES = ['form', 'external']; + +async function formOptions() { + const values = {}; + const [forms, surveys, quizzes] = await Promise.all([ + dropdownMap('form', 'formentity', (item) => item.title || item.name), + dropdownMap('form', 'survey', (item) => `${item.title || item.name} (Survey)`), + dropdownMap('form', 'quiz', (item) => `${item.name || item.title} (Quiz)`), + ]); + Object.assign(values, forms, surveys, quizzes); + return values; +} + +async function metricOptions() { + const response = await signedGet('metric', 'metric/get_all'); + const values = { NA: 'Tracking Not Needed' }; + const items = isSuccess(response) ? response.data?.items || [] : []; + items.forEach((item) => { + if (item?.id) values[item.id] = item.name || item.id; + }); + return values; +} + +function galleryToText(value) { + if (Array.isArray(value)) return value.filter(Boolean).join('\n'); + if (typeof value === 'string' && value.trim()) { + try { + const parsed = JSON.parse(value); + if (Array.isArray(parsed)) return parsed.filter(Boolean).join('\n'); + } catch { + return value + .split(/[\n,]/) + .map((part) => part.trim()) + .filter(Boolean) + .join('\n'); + } + } + return ''; +} + +function textToGallery(value) { + if (Array.isArray(value)) return JSON.stringify(value.filter(Boolean)); + if (typeof value !== 'string') return JSON.stringify([]); + const urls = value + .split(/[\n,]/) + .map((part) => part.trim()) + .filter(Boolean); + return JSON.stringify(urls); +} + +const magmedias = { + service: 'mag', + module: 'mag_media', + title: 'Magazine Media', + subtitle: 'Content', + baseUrl: '/magmedia', + listPath: '/magmedias', + missingParentMessage: 'Magazine not found', + parentParam: { urlKey: 'id', apiKey: 'mag_id' }, + parentField: { urlKey: 'id', field: 'magazine_id' }, + listFields: [ + { + key: 'actions', + title: 'Actions', + buttons: [ + 'edit', + 'delete', + { name: 'viewers', to: (row) => `/magmedia/viewers?id=${row.id}`, title: 'Viewers' }, + ], + }, + { key: 'name', title: 'Media Name', type: 'text' }, + { key: 'points', title: 'Points', type: 'text' }, + { key: 'media_type', title: 'Media Type', type: 'text' }, + { key: 'likes_count', title: 'Likes', type: 'text' }, + { key: 'comments_count', title: 'Comments', type: 'text' }, + { key: 'status', title: 'Status', type: 'select' }, + ], + listButtons: [ + { title: 'Add New', to: '/magmedia/addnew' }, + { title: 'Back to Magazines', to: '/magazines' }, + ], + formFields: async () => { + const [forms, metrics] = await Promise.all([formOptions(), metricOptions()]); + return [ + { key: 'name', title: 'Media Name', type: 'text', required: true }, + { key: 'points', title: 'Points', type: 'text', required: true }, + { key: 'description', title: 'Media Description', type: 'textarea', required: true, fullwidth: true }, + { + key: 'media_type', + title: 'Media Types', + type: 'select', + required: true, + values: { + image: 'Image', + video: 'Video', + pdf: 'PDF', + audio: 'Audio', + gallery: 'Gallery', + form: 'Form', + quiz: 'Quiz', + survey: 'Survey', + external: 'External Url', + scorm: 'Scorm', + }, + }, + { key: 'status', title: 'Status', type: 'select', required: true, values: { active: 'Active', disabled: 'Disabled' } }, + { key: 'form_id', title: 'Form', type: 'select', values: forms, showIf: { media_type: FORM_TYPES } }, + { + key: 'media_url', + title: 'Media File (image, video, pdf, audio, scorm) (for gallery, upload zip file with all images)', + type: 'file', + showIf: { media_type: FILE_TYPES }, + }, + { + key: 'gallery', + title: 'Multiple Media File (only for gallery) — one public URL per line', + type: 'textarea', + fullwidth: true, + showIf: { media_type: 'gallery' }, + }, + { + key: 'ext_url', + title: 'Media Url (form, external)', + type: 'text', + showIf: { media_type: LINK_TYPES }, + }, + { key: 'mapped_metric', title: 'Point Metric', type: 'select', required: true, values: metrics }, + { key: 'count_metric', title: 'Count Metric', type: 'select', required: true, values: metrics }, + ]; + }, + beforeForm: (item) => { + const next = { ...item }; + if (LINK_TYPES.includes(item.media_type)) { + next.ext_url = item.ext_url || item.media_url || ''; + } else { + next.ext_url = item.ext_url || ''; + } + next.gallery = item.media_type === 'gallery' ? galleryToText(item.gallery || item.media_url) : galleryToText(item.gallery); + next.mapped_metric = item.mapped_metric || ''; + next.count_metric = item.count_metric || ''; + return next; + }, + beforeSave: (data) => { + const payload = { ...data }; + payload.points = Number.parseInt(payload.points, 10) || 0; + if (LINK_TYPES.includes(payload.media_type)) { + payload.media_url = payload.ext_url || payload.media_url || ''; + } + if (payload.media_type === 'gallery') { + payload.media_url = textToGallery(payload.gallery); + } + delete payload.gallery; + delete payload.ext_url; + return payload; + }, +}; + +export default magmedias; diff --git a/src/modules/metriccampaigns.js b/src/modules/metriccampaigns.js new file mode 100644 index 0000000..53146bd --- /dev/null +++ b/src/modules/metriccampaigns.js @@ -0,0 +1,263 @@ +import { signedGet, isSuccess } from '@/api/client'; +import { dropdownMap } from '@/api/dropdowns'; +import { + CAMPAIGN_COMBINED_TYPES, + INTERVAL_VALUES, + metricOptions, + parseCombinedMetrics, + splitHash, + stringifyCombinedMetrics, + toApiDate, + toDateInput, +} from '@/helpers/metric'; + +function asArray(value) { + if (Array.isArray(value)) return value.filter((part) => part !== null && part !== undefined && part !== ''); + return splitHash(value); +} + +function normalizeRankingAttributes(raw) { + let rows = raw; + if (typeof raw === 'string' && raw.trim()) { + try { + rows = JSON.parse(raw); + } catch { + rows = []; + } + } + if (!Array.isArray(rows)) return []; + return rows + .map((row) => ({ + code: String(row?.code || '').trim(), + value: String(row?.value || '').trim(), + })) + .filter((row) => row.code && row.value); +} + +function normalizeCampaignMetric(row) { + const metric = row && typeof row === 'object' ? row : {}; + return { + metric: metric.metric || '', + display: metric.display || '', + sort: metric.sort ?? 0, + weight: metric.weight === '' || metric.weight == null ? 1 : Number(metric.weight), + label_text: metric.label_text || 'units', + unit_type: metric.unit_type === 'average' ? 'average' : 'sum', + rules: Array.isArray(metric.rules) ? metric.rules : [], + rules_interval: metric.rules_interval || 'overall', + rules_custom_start: toDateInput(metric.rules_custom_start || ''), + rules_custom_end: toDateInput(metric.rules_custom_end || ''), + }; +} + +function normalizeCombined(row) { + const metric = row && typeof row === 'object' ? row : {}; + return { + type: metric.type || '', + title: metric.title || '', + fields: Array.isArray(metric.fields) ? metric.fields : [], + weight: metric.weight === '' || metric.weight == null ? 1 : Number(metric.weight), + label_text: metric.label_text || 'units', + unit_type: metric.unit_type === 'average' ? 'average' : 'sum', + rules: Array.isArray(metric.rules) ? metric.rules : [], + rules_interval: metric.rules_interval || 'overall', + rules_custom_start: toDateInput(metric.rules_custom_start || ''), + rules_custom_end: toDateInput(metric.rules_custom_end || ''), + }; +} + +const YES_NO = { yes: 'Yes', no: 'No' }; + +const metriccampaigns = { + service: 'metric', + module: 'campaign_view', + title: 'Campaign management', + subtitle: 'Metric', + baseUrl: '/metriccampaign', + listPath: '/metriccampaigns', + listFields: [ + { key: 'actions', title: 'Actions', buttons: ['edit', 'delete'] }, + { key: 'name', title: 'Name', type: 'text' }, + { key: 'roles', title: 'Roles', type: 'text' }, + { key: 'sort_order', title: 'Sort Order', type: 'number' }, + { key: 'teams_rank', title: 'Teams Rank', type: 'text' }, + { key: 'status', title: 'Status', type: 'select' }, + ], + mapItems: (items) => + (items || []).map((item) => ({ + ...item, + roles: asArray(item.campaign_visible_roles || item.roles).join(', '), + teams_rank: item.teams_rank ? String(item.teams_rank).toLowerCase().slice(0, 2) : '', + })), + formFields: async () => { + const [roles, metrics, attrsRes] = await Promise.all([ + dropdownMap('ums', 'roles', (item) => item.name), + metricOptions(), + signedGet('ums', 'userattribute/get_all'), + ]); + const attributes = {}; + const attributesMeta = {}; + const attrItems = isSuccess(attrsRes) ? attrsRes.data?.items || [] : []; + attrItems.forEach((attr) => { + if ((attr.status || 'active') === 'disabled') return; + const code = attr.code || ''; + if (!code) return; + const options = {}; + (attr.options || []).forEach((opt) => { + const value = String(opt?.value ?? ''); + if (!value) return; + options[value] = String(opt.display ?? value); + }); + attributes[code] = `${attr.attribute || code} (${code})`; + attributesMeta[code] = { + code, + attribute: attr.attribute || code, + type: attr.type || 'text', + options, + }; + }); + return [ + { key: 'name', title: 'Name', type: 'text', required: true, fullwidth: true }, + { + key: 'sort_order', + title: 'Sort Order', + type: 'number', + placeholder: 'Lower number shows first', + }, + { key: 'validity_start', title: 'Validity Start', type: 'date', required: true }, + { key: 'validity_end', title: 'Validity End', type: 'date', required: true }, + { key: 'campaign_visible_roles', title: 'Campaign Visible Roles', type: 'multiselect', required: true, values: roles }, + { key: 'reporting_roles', title: 'Reporting Roles', type: 'multiselect', required: true, values: roles }, + { + key: 'teams_rank', + title: 'Teams Rank', + type: 'select', + required: true, + values: { l1: 'L1', l2: 'L2', l3: 'L3', l4: 'L4' }, + }, + { key: 'intervals', title: 'Intervals', type: 'multiselect', required: true, values: INTERVAL_VALUES }, + { + key: 'ranking_attributes', + title: 'User Attribute Filters', + type: 'ranking_attributes', + fullwidth: true, + attributes, + attributesMeta, + }, + { key: 'bg_image', title: 'Background image', type: 'image' }, + { key: 'icon', title: 'Icon', type: 'image' }, + { key: 'showOverallRank', title: 'Show Overall Rank', type: 'select', values: YES_NO }, + { key: 'overallRank_title', title: 'Overall Rank Title', type: 'text', placeholder: 'My Overall Rank' }, + { key: 'showManagerOverallRank', title: 'Show Manager Overall Rank', type: 'select', values: YES_NO }, + { key: 'managerOverallRank_title', title: 'Manager Overall Rank Title', type: 'text', placeholder: 'View Individual Rank' }, + { key: 'overallRank_color1', title: 'My Rank - Gradient color (dark)', type: 'text', placeholder: 'R-G-B-A e.g. 255-66-33-1' }, + { key: 'overallRank_color2', title: 'My Rank - Gradient color (light)', type: 'text', placeholder: 'R-G-B-A e.g. 255-66-33-1' }, + { key: 'showRankInTeam', title: 'Show Rank in Team', type: 'select', values: YES_NO }, + { key: 'rankInTeam_title', title: 'Rank in Team Title', type: 'text', placeholder: 'Rank in Team' }, + { key: 'rankInTeam_color1', title: 'Rank in Team - Gradient color (dark)', type: 'text', placeholder: 'R-G-B-A e.g. 255-165-0-1' }, + { key: 'rankInTeam_color2', title: 'Rank in Team - Gradient color (light)', type: 'text', placeholder: 'R-G-B-A e.g. 255-165-0-1' }, + { key: 'showTeamRank', title: 'Show Team Rank', type: 'select', values: YES_NO }, + { key: 'teamRank_title', title: 'Team Rank Title', type: 'text', placeholder: 'Team Rank' }, + { key: 'showManagerTeamRank', title: 'Show Manager Team Rank', type: 'select', values: YES_NO }, + { key: 'managerTeamRank_title', title: 'Manager Team Rank Title', type: 'text', placeholder: 'View Team Rank' }, + { key: 'teamRank_color1', title: 'Team Rank - Gradient color (dark)', type: 'text', placeholder: 'R-G-B-A e.g. 18-196-110-1' }, + { key: 'teamRank_color2', title: 'Team Rank - Gradient color (light)', type: 'text', placeholder: 'R-G-B-A e.g. 18-196-110-1' }, + { key: 'status', title: 'Status', type: 'select', required: true, values: { active: 'Active', disabled: 'Disabled' } }, + { key: 'show_positions', title: 'Show Positions', type: 'select', required: true, values: YES_NO }, + { + key: 'show_positions_type', + title: 'Show Positions Type', + type: 'select', + required: true, + values: { all: 'All', loggedin: 'Logged In' }, + }, + { key: 'highlight_top', title: 'Highlight Top', type: 'text', placeholder: 'e.g. 10, 20, 30' }, + { key: 'highlight_color', title: 'Highlight Color', type: 'text', placeholder: 'R-G-B-A or CSS color' }, + { + key: 'metrics', + title: 'Metrics', + type: 'mapping', + variant: 'campaign', + fullwidth: true, + metrics, + }, + { + key: 'combined_metrics', + title: 'Combined Metrics (if any)', + type: 'combined_metrics', + variant: 'campaign', + fullwidth: true, + metrics, + types: CAMPAIGN_COMBINED_TYPES, + }, + ]; + }, + beforeForm: (item) => { + const next = { + sort_order: 0, + showOverallRank: 'yes', + showRankInTeam: 'yes', + showTeamRank: 'yes', + showManagerOverallRank: 'yes', + showManagerTeamRank: 'yes', + highlight_top: '', + highlight_color: '', + ...item, + }; + next.campaign_visible_roles = asArray(next.campaign_visible_roles); + next.reporting_roles = asArray(next.reporting_roles); + next.intervals = asArray(next.intervals); + next.metrics = (Array.isArray(next.metrics) ? next.metrics : []).map(normalizeCampaignMetric); + next.combined_metrics = parseCombinedMetrics(next.combined_metrics).map(normalizeCombined); + next.ranking_attributes = normalizeRankingAttributes(next.ranking_attributes); + next.validity_start = toDateInput(next.validity_start); + next.validity_end = toDateInput(next.validity_end); + if (next.teams_rank) next.teams_rank = String(next.teams_rank).toLowerCase().slice(0, 2); + if (next.sort_order === '' || next.sort_order == null) next.sort_order = 0; + return next; + }, + beforeSave: (data) => { + const metrics = (data.metrics || []) + .filter((row) => row.metric) + .map((row) => ({ + metric: row.metric, + display: row.display || '', + unit_type: row.unit_type === 'average' ? 'average' : 'sum', + sort: Number.parseInt(row.sort, 10) || 0, + weight: row.weight === '' || row.weight == null ? 1 : Number(row.weight), + label_text: row.label_text || 'units', + rules_interval: row.rules_interval || 'overall', + rules_custom_start: toApiDate(row.rules_custom_start || ''), + rules_custom_end: toApiDate(row.rules_custom_end || ''), + rules: Array.isArray(row.rules) ? row.rules : [], + })); + const combined = (data.combined_metrics || []) + .filter((row) => row.type) + .map((row) => ({ + type: row.type, + title: row.title || '', + fields: Array.isArray(row.fields) ? row.fields : [], + unit_type: row.unit_type === 'average' ? 'average' : 'sum', + weight: row.weight === '' || row.weight == null ? 1 : Number(row.weight), + label_text: row.label_text || 'units', + rules_interval: row.rules_interval || 'overall', + rules_custom_start: toApiDate(row.rules_custom_start || ''), + rules_custom_end: toApiDate(row.rules_custom_end || ''), + rules: Array.isArray(row.rules) ? row.rules : [], + })); + return { + ...data, + metrics, + combined_metrics: stringifyCombinedMetrics(combined), + ranking_attributes: normalizeRankingAttributes(data.ranking_attributes), + campaign_visible_roles: asArray(data.campaign_visible_roles), + reporting_roles: asArray(data.reporting_roles), + intervals: asArray(data.intervals), + sort_order: Number.parseInt(data.sort_order, 10) || 0, + validity_start: toApiDate(data.validity_start), + validity_end: toApiDate(data.validity_end), + }; + }, +}; + +export default metriccampaigns; diff --git a/src/modules/metricdataimports.js b/src/modules/metricdataimports.js new file mode 100644 index 0000000..56df32e --- /dev/null +++ b/src/modules/metricdataimports.js @@ -0,0 +1,35 @@ +const metricdataimports = { + service: 'catalog', + module: 'metricdataimport', + title: 'Metric Data Import', + subtitle: 'Metric', + baseUrl: '/metricdataimport', + listPath: '/metricdataimports', + skipEdit: true, + createEndpoint: 'metric_target_import', + afterSaveMessage: 'Import started. Refresh the list in a few moments to download the file when ready.', + listNotice: 'Imports run in the background. Refresh the list in a few moments to download the original file.', + listFields: [ + { + key: 'actions', + title: 'Actions', + buttons: ['delete', { name: 'download', hrefKey: 'download_url', requireReady: false }], + }, + { key: 'file_name', title: 'File Name', type: 'text' }, + { key: 'status', title: 'Status', type: 'select' }, + ], + listButtons: [ + { title: 'Add New', to: '/metricdataimport/addnew' }, + { title: 'Refresh', action: 'reload' }, + ], + formFields: [ + { key: 'file_path', title: 'Import File', type: 'file', required: true }, + { key: 'is_bde', title: 'Is Dashboard Metric?', type: 'yesno', required: true }, + ], + beforeSave: (data) => ({ + file_path: data.file_path, + is_bde: data.is_bde === 'yes' || data.is_bde === true, + }), +}; + +export default metricdataimports; diff --git a/src/modules/metricmappings.js b/src/modules/metricmappings.js new file mode 100644 index 0000000..e8f49c0 --- /dev/null +++ b/src/modules/metricmappings.js @@ -0,0 +1,49 @@ +import { metricOptions } from '@/helpers/metric'; + +const metricmappings = { + service: 'metric', + module: 'injestion_mapping', + title: 'Metric Injestion Mapping', + subtitle: 'Metric', + baseUrl: '/metricmapping', + listPath: '/metricmappings', + listFields: [ + { key: 'actions', title: 'Actions', buttons: ['edit', 'delete'] }, + { key: 'id', title: 'Auth Key', type: 'text' }, + { key: 'name', title: 'Mapping Name', type: 'text' }, + { key: 'status', title: 'Status', type: 'select' }, + ], + formFields: async () => { + const metrics = await metricOptions(); + return [ + { key: 'name', title: 'Mapping Name', type: 'text', required: true }, + { key: 'status', title: 'Status', type: 'select', required: true, values: { active: 'Active', disabled: 'Disabled' } }, + { + key: 'mappings', + title: 'Metric', + type: 'mapping', + variant: 'ingestion', + required: true, + fullwidth: true, + metrics, + types: { unit: 'Units', count: 'Count' }, + }, + ]; + }, + beforeForm: (item) => ({ + ...item, + mappings: Array.isArray(item.mappings) ? item.mappings : [], + }), + beforeSave: (data) => ({ + ...data, + mappings: (data.mappings || []) + .filter((row) => row.metric) + .map((row) => ({ + metric: row.metric, + type: row.type, + attribute: row.attribute || '', + })), + }), +}; + +export default metricmappings; diff --git a/src/modules/metrics.js b/src/modules/metrics.js new file mode 100644 index 0000000..03e12ab --- /dev/null +++ b/src/modules/metrics.js @@ -0,0 +1,43 @@ +import { dropdownMap } from '@/api/dropdowns'; + +const metrics = { + service: 'metric', + module: 'metric', + title: 'Metric', + subtitle: 'Metric', + baseUrl: '/metric', + listPath: '/metrics', + listFields: [ + { key: 'actions', title: 'Actions', buttons: ['edit', 'delete'] }, + { key: 'name', title: 'Metric Name', type: 'text' }, + { key: 'metric_type', title: 'Metric type', type: 'text' }, + { key: 'allow_negetive', title: 'Allow Negetive', type: 'text' }, + { key: 'status', title: 'Status', type: 'select' }, + ], + formFields: async () => { + const channels = await dropdownMap('ums', 'channel', (item) => item.name); + return [ + { key: 'name', title: 'Metric Name', type: 'text', required: true }, + { key: 'channel', title: 'Channel', type: 'select', required: true, values: channels }, + { key: 'description', title: 'Description', type: 'textarea', required: true, fullwidth: true }, + { + key: 'metric_type', + title: 'Metric Type', + type: 'select', + required: true, + values: { normal: 'Normal', calculated: 'Calculated' }, + }, + { key: 'allow_negetive', title: 'Allow Negetive', type: 'yesno', required: true }, + { + key: 'unit_type', + title: 'Unit Type', + type: 'select', + required: true, + values: { primitive: 'Primitive', points: 'Points', percentage: 'Percentage' }, + }, + { key: 'status', title: 'Status', type: 'select', required: true, values: { active: 'Active', disabled: 'Disabled' } }, + ]; + }, +}; + +export default metrics; diff --git a/src/modules/metricviews.js b/src/modules/metricviews.js new file mode 100644 index 0000000..ab8e583 --- /dev/null +++ b/src/modules/metricviews.js @@ -0,0 +1,297 @@ +import { signedGet, isSuccess } from '@/api/client'; +import { dropdownMap } from '@/api/dropdowns'; +import { + DEFAULT_INTERVAL_VALUES, + INTERVAL_VALUES, + metricOptions, + parseCombinedMetrics, + splitHash, + stringifyCombinedMetrics, + toApiDate, + toDateInput, + VIEW_COMBINED_TYPES, +} from '@/helpers/metric'; + +function asArray(value) { + if (Array.isArray(value)) return value.filter((part) => part !== null && part !== undefined && part !== ''); + return splitHash(value); +} + +const metricviews = { + service: 'metric', + module: 'metric_view', + title: 'Metric View', + subtitle: 'Metric', + baseUrl: '/metricview', + listPath: '/metricviews', + defaultType: 'simple', + listFields: [ + { key: 'actions', title: 'Actions', buttons: ['edit', 'duplicate', 'delete'] }, + { key: 'name', title: 'Name', type: 'text' }, + { key: 'type', title: 'Type', type: 'text' }, + { key: 'roles', title: 'Roles', type: 'text' }, + { key: 'sort_order', title: 'Sort Order', type: 'number' }, + { key: 'validity_start', title: 'Validity start', type: 'date' }, + { key: 'validity_end', title: 'Validity end', type: 'date' }, + { key: 'agg_type', title: 'Aggregation type', type: 'text' }, + { key: 'status', title: 'Status', type: 'select' }, + ], + listButtons: [ + { title: 'Add A vs B', to: '/metricview/addnew?type=verses' }, + { title: 'Add Grouped', to: '/metricview/addnew?type=grouped' }, + { title: 'Add Simple', to: '/metricview/addnew?type=simple' }, + ], + mapItems: (items) => + (items || []).map((item) => ({ + ...item, + roles: asArray(item.designations || item.roles).join(', '), + sort_order: item.sort_order ?? item.widget_sort_order ?? 0, + })), + formFields: async () => { + const [metrics, roles, contactRes] = await Promise.all([ + metricOptions(), + dropdownMap('ums', 'roles', (item) => item.name), + signedGet('contact', 'contactattribute/get_all'), + ]); + const contactAttributes = {}; + const contactItems = isSuccess(contactRes) ? contactRes.data?.items || [] : []; + contactItems.forEach((attr) => { + if (attr?.code) contactAttributes[attr.code] = attr.attribute || attr.code; + }); + const versesMetrics = { ...metrics, fixed: 'Fixed Value' }; + return [ + { key: 'name', title: 'Name', type: 'text', required: true }, + { + key: 'type', + title: 'Type', + type: 'select', + required: true, + values: { simple: 'Simple', grouped: 'Grouped', verses: 'A vs B' }, + }, + { key: 'validity_start', title: 'Validity start', type: 'date', required: true }, + { key: 'validity_end', title: 'Validity end', type: 'date', required: true }, + { key: 'designations', title: 'Publish to Roles', type: 'multiselect', required: true, values: roles }, + { key: 'metric', title: 'Choose Metric', type: 'select', required: true, values: metrics, showIf: { type: 'simple' } }, + { key: 'display_unit', title: 'Display Unit', type: 'text', required: true, showIf: { type: 'simple' } }, + { key: 'metric_0', title: 'Choose Metric 1', type: 'select', required: true, values: metrics, showIf: { type: 'verses' } }, + { key: 'display_unit_0', title: 'Metric 1 Display Unit', type: 'text', required: true, showIf: { type: 'verses' } }, + { key: 'metric_1', title: 'Choose Metric 2', type: 'select', required: true, values: versesMetrics, showIf: { type: 'verses' } }, + { key: 'display_unit_1', title: 'Metric 2 Display Unit', type: 'text', required: true, showIf: { type: 'verses' } }, + { key: 'fixed_metric', title: 'Fixed Metric value if selected', type: 'text', required: true, showIf: { type: 'verses' } }, + { key: 'max_value_color', title: 'Max Value Color', type: 'color', showIf: { type: 'verses' } }, + { key: 'color_ranges', title: 'Color Ranges (%)', type: 'color_ranges', fullwidth: true, showIf: { type: 'verses' } }, + { + key: 'list_chart_type', + title: 'List Chart Type', + type: 'select', + required: true, + showIf: { type: 'verses' }, + values: { + donut: 'Donut', + progressbar: 'Progress Bar', + horizontal_barchart: 'Horizontal Bar Chart', + vertical_barchart: 'Vertical Bar Chart', + }, + }, + { + key: 'metrics', + title: 'Choose Metric', + type: 'mapping', + variant: 'grouped', + required: true, + fullwidth: true, + metrics, + showIf: { type: 'grouped' }, + }, + { key: 'operation', title: 'Operation', type: 'select', required: true, values: { sum: 'Sum', avg: 'Avg', value_count: 'Count' } }, + { + key: 'agg_type', + title: 'Aggregation Type', + type: 'select', + required: true, + values: { individual: 'Individual', team: 'Team' }, + }, + { + key: 'graphical_views', + title: 'Graphical views', + type: 'multiselect', + values: { progress: 'Progress', percentile: 'Percentile', pie: 'Pie chart', bar: 'Bar chart', line: 'Line chart' }, + }, + { + key: 'details_views', + title: 'Details views', + type: 'multiselect', + required: true, + values: { tabular: 'Tabular', contacts: 'Doctor View', incremental: 'Incremental View' }, + }, + { + key: 'trend_views', + title: 'Trend views', + type: 'multiselect', + values: { bar: 'Bar chart', line: 'Line chart', tabular: 'Tabular' }, + }, + { + key: 'leaderboard_views', + title: 'Leaderboard views', + type: 'multiselect', + values: { leaderboard: 'Leaderboard View' }, + }, + { + key: 'contacts_views', + title: 'Doctor views', + type: 'multiselect', + values: { contacts: 'Doctor View' }, + }, + { key: 'doctor_view_name', title: 'Enter Doctor View Name', type: 'text' }, + { key: 'intervals', title: 'Intervals', type: 'multiselect', required: true, values: INTERVAL_VALUES }, + { key: 'default_interval', title: 'Default Interval', type: 'select', required: true, values: DEFAULT_INTERVAL_VALUES }, + { key: 'widget_sort_order', title: 'Sort Order', type: 'number', required: true }, + { key: 'doctor_type', title: 'Doctor Type', type: 'text' }, + { + key: 'combined_metrics', + title: 'Combined Metrics (if any)', + type: 'combined_metrics', + variant: 'view', + fullwidth: true, + metrics, + types: VIEW_COMBINED_TYPES, + }, + { key: 'report_roles', title: 'Data Report from Roles', type: 'multiselect', required: true, values: roles }, + { key: 'status', title: 'Status', type: 'select', required: true, values: { active: 'Active', disabled: 'Disabled' } }, + { key: 'show_positions', title: 'Show Positions', type: 'select', required: true, values: { yes: 'Yes', no: 'No' } }, + { + key: 'show_positions_type', + title: 'Show Positions Type', + type: 'select', + required: true, + values: { all: 'All', loggedin: 'Logged In' }, + }, + { key: 'contact_attributes', title: 'Include Doctor Attributes', type: 'multiselect', values: contactAttributes }, + ]; + }, + beforeForm: (item) => { + const next = { + type: 'simple', + widget_sort_order: 0, + sort_order: 0, + show_positions: 'yes', + show_positions_type: 'all', + list_chart_type: 'progressbar', + ...item, + }; + next.designations = asArray(next.designations); + next.report_roles = asArray(next.report_roles); + next.graphical_views = asArray(next.graphical_views); + next.details_views = asArray(next.details_views); + next.trend_views = asArray(next.trend_views); + next.leaderboard_views = asArray(next.leaderboard_views); + next.contacts_views = asArray(next.contacts_views); + next.intervals = asArray(next.intervals); + next.contact_attributes = asArray(next.contact_attributes); + next.combined_metrics = parseCombinedMetrics(next.combined_metrics); + next.validity_start = toDateInput(next.validity_start); + next.validity_end = toDateInput(next.validity_end); + if (next.sort_order === '' || next.sort_order == null) next.sort_order = next.widget_sort_order || 0; + if (next.widget_sort_order === '' || next.widget_sort_order == null) next.widget_sort_order = next.sort_order || 0; + if (next.show_positions) next.show_positions = String(next.show_positions).toLowerCase(); + if (!Array.isArray(next.color_ranges)) next.color_ranges = []; + const metrics = Array.isArray(next.metrics) ? [...next.metrics] : []; + metrics.sort((a, b) => (Number(a?.sort_order) || 0) - (Number(b?.sort_order) || 0)); + if (next.type === 'simple' && metrics[0]) { + next.metric = metrics[0].metric; + next.display_unit = metrics[0].display; + } else if (next.type === 'verses') { + next.metric_0 = metrics[0]?.metric || ''; + next.display_unit_0 = metrics[0]?.display || ''; + next.metric_1 = metrics[1]?.metric || ''; + next.display_unit_1 = metrics[1]?.display || ''; + if (!next.list_chart_type) next.list_chart_type = 'progressbar'; + } else if (next.type === 'grouped') { + next.metrics = metrics.map((row) => ({ + metric: row.metric || '', + display: row.display || '', + sort_order: row.sort_order ?? 0, + weight: row.weight ?? 1, + list_view: row.list_view || 'yes', + })); + } + return next; + }, + beforeSave: (data) => { + const type = data.type || 'simple'; + let metrics = []; + if (type === 'simple') { + metrics = [{ metric: data.metric, display: data.display_unit }]; + } else if (type === 'verses') { + metrics = [ + { metric: data.metric_0, display: data.display_unit_0 }, + { metric: data.metric_1, display: data.display_unit_1 }, + ]; + } else { + metrics = (data.metrics || []) + .filter((row) => row.metric) + .map((row) => ({ + metric: row.metric, + display: row.display || '', + sort_order: Number(row.sort_order) || 0, + list_view: row.list_view || 'yes', + weight: row.weight === '' || row.weight == null ? 1 : Number(row.weight), + })); + } + const widgetSort = Number.parseInt(data.widget_sort_order, 10) || 0; + const payload = { + ...data, + type, + metrics, + designations: asArray(data.designations), + report_roles: asArray(data.report_roles), + graphical_views: asArray(data.graphical_views), + details_views: asArray(data.details_views), + trend_views: asArray(data.trend_views), + leaderboard_views: asArray(data.leaderboard_views), + contacts_views: asArray(data.contacts_views), + intervals: asArray(data.intervals), + contact_attributes: asArray(data.contact_attributes), + combined_metrics: stringifyCombinedMetrics( + (data.combined_metrics || []) + .filter((row) => row.type) + .map((row) => ({ + type: row.type, + title: row.title || '', + fields: Array.isArray(row.fields) ? row.fields : [], + list_view: row.list_view || 'yes', + })), + ), + widget_sort_order: widgetSort, + sort_order: widgetSort, + validity_start: toApiDate(data.validity_start), + validity_end: toApiDate(data.validity_end), + }; + if (type === 'verses') { + payload.max_value_color = (data.max_value_color || '').trim(); + payload.color_ranges = (data.color_ranges || []) + .filter((row) => row.min !== '' || row.max !== '' || row.color) + .map((row) => ({ + min: Number(row.min) || 0, + max: Number(row.max) || 0, + color: row.color || '#000000', + })); + payload.list_chart_type = data.list_chart_type || 'progressbar'; + } else { + delete payload.max_value_color; + delete payload.color_ranges; + delete payload.list_chart_type; + delete payload.fixed_metric; + } + delete payload.metric; + delete payload.display_unit; + delete payload.metric_0; + delete payload.display_unit_0; + delete payload.metric_1; + delete payload.display_unit_1; + if (payload.id === '' || payload.id == null) delete payload.id; + return payload; + }, +}; + +export default metricviews; diff --git a/src/modules/milestones.js b/src/modules/milestones.js new file mode 100644 index 0000000..8ab04f1 --- /dev/null +++ b/src/modules/milestones.js @@ -0,0 +1,367 @@ +import { signedGet, isSuccess } from '@/api/client'; +import { dropdownMap } from '@/api/dropdowns'; +import { metricOptions, toDateInput } from '@/helpers/metric'; + +const STATUS = { active: 'Active', disabled: 'Disabled' }; +const YES_NO = { yes: 'Yes', no: 'No' }; +const DAYS = { + MON: 'Monday', + TUE: 'Tuesday', + WED: 'Wednesday', + THU: 'Thursday', + FRI: 'Friday', + SAT: 'Saturday', + SUN: 'Sunday', +}; + +function dateOptions() { + const values = { L: 'Last day of month' }; + for (let day = 1; day <= 31; day += 1) values[String(day)] = String(day); + return values; +} + +function toBool(value) { + if (value === true || value === 1) return true; + return ['yes', '1', 'true'].includes(String(value ?? '').toLowerCase()); +} + +function fromBool(value) { + return toBool(value) ? 'yes' : 'no'; +} + +function toStringList(value) { + if (value == null || value === '') return []; + if (Array.isArray(value)) return value.map(String).filter((part) => part !== ''); + if (typeof value === 'object') return Object.values(value).map(String); + return [String(value)]; +} + +function titleMap(items) { + const values = {}; + (items || []).forEach((item) => { + if (item?.id) values[item.id] = item.title || item.name || item.id; + }); + return values; +} + +async function getAllItems(service, path) { + const response = await signedGet(service, path); + return isSuccess(response) ? response.data?.items || [] : []; +} + +function newMilestoneId() { + if (typeof crypto !== 'undefined' && typeof crypto.randomUUID === 'function') { + return crypto.randomUUID(); + } + return `${Date.now()}-${Math.random().toString(16).slice(2)}`; +} + +function flattenMetrics(metrics) { + if (!Array.isArray(metrics)) return []; + return metrics.map((row) => { + const metric = row && typeof row === 'object' ? row : {}; + return { + metric: metric.metric || '', + display: metric.display || '', + weight: metric.weight ?? 1, + target: metric.target ?? '', + }; + }); +} + +function firstBadge(value) { + if (Array.isArray(value)) return value[0] || ''; + return value || ''; +} + +function flattenMilestoneCards(milestones) { + if (!Array.isArray(milestones)) return []; + return milestones.map((row) => { + const card = row && typeof row === 'object' ? row : {}; + const target = card.target && typeof card.target === 'object' ? card.target : {}; + const actions = card.actions && typeof card.actions === 'object' ? card.actions : {}; + const appreciation = Array.isArray(actions.send_appreciation) + ? actions.send_appreciation[0] || {} + : actions.send_appreciation || {}; + return { + milestone_id: card.milestone_id || '', + target_title: target.target_title ?? '', + target: target.value ?? (typeof card.target === 'number' || typeof card.target === 'string' ? card.target : ''), + repeat_target: card.repeat_target ? '1' : '0', + roles: toStringList(card.roles), + reporting_roles: toStringList(card.reporting_roles), + user_notification: Boolean(actions.user_notification), + user_email: Boolean(actions.user_email), + manager_notification: toStringList(actions.manager_notification), + manager_email: toStringList(actions.manager_email), + send_badge: firstBadge(actions.send_badge), + appreciation_category: appreciation.category_id || '', + appreciation_image: appreciation.image_id || '', + appreciation_message: appreciation.message || '', + }; + }); +} + +function mapMetricsForSave(rows) { + return (Array.isArray(rows) ? rows : []) + .filter((row) => row?.metric) + .map((row) => ({ + metric: row.metric, + display: row.display || '', + weight: row.weight !== '' && row.weight != null ? String(row.weight) : '1', + target: row.target !== '' && row.target != null ? String(row.target) : '', + })); +} + +function mapMilestonesForSave(rows) { + return (Array.isArray(rows) ? rows : []).map((row) => ({ + milestone_id: row.milestone_id || newMilestoneId(), + target: { + value: Number(row.target || 0), + target_title: row.target_title || '', + }, + repeat_target: String(row.repeat_target) === '1', + roles: toStringList(row.roles), + reporting_roles: toStringList(row.reporting_roles), + actions: { + user_notification: Boolean(row.user_notification), + user_email: Boolean(row.user_email), + manager_notification: toStringList(row.manager_notification), + manager_email: toStringList(row.manager_email), + send_badge: row.send_badge ? [row.send_badge] : [], + send_appreciation: [ + { + category_id: row.appreciation_category || null, + image_id: row.appreciation_image || null, + message: row.appreciation_message || null, + }, + ], + }, + })); +} + +const milestones = { + service: 'formreminders', + module: 'milestones', + title: 'Milestone', + subtitle: 'Recognition', + baseUrl: '/milestone', + listPath: '/milestones', + listFields: [ + { key: 'actions', title: 'Actions', buttons: ['edit', 'delete'] }, + { key: 'title', title: 'Name', type: 'text' }, + { key: 'status', title: 'Status', type: 'select' }, + ], + formFields: async () => { + const [metrics, roles, badges, categories, images] = await Promise.all([ + metricOptions(), + dropdownMap('ums', 'roles', (item) => item.name), + getAllItems('recognition', 'badge_list/get_all').then(titleMap), + getAllItems('recognition', 'appreciation_category/get_all').then(titleMap), + getAllItems('recognition', 'appreciation_image/get_all').then((items) => { + const values = {}; + items.forEach((item) => { + if (item?.id) values[item.id] = { title: item.title || item.id, image: item.image || '' }; + }); + return values; + }), + ]); + return [ + { key: 'title', title: 'Title', type: 'text', required: true }, + { key: 'interval_start_date', title: 'Interval Start Date', type: 'date', required: true }, + { key: 'interval_end_date', title: 'Interval End Date', type: 'date', required: true }, + { + key: 'period', + title: 'Period', + type: 'select', + required: true, + values: { + daily: 'Daily', + weekly: 'Weekly', + monthly: 'Monthly', + yearly: 'Yearly', + overall: 'Overall', + custom: 'Custom', + }, + }, + { key: 'custom_start_date', title: 'Custom Start Date', type: 'date', showIf: { period: 'custom' } }, + { key: 'custom_end_date', title: 'Custom End Date', type: 'date', showIf: { period: 'custom' } }, + { key: 'status', title: 'Status', type: 'select', required: true, values: STATUS }, + { key: 'show_positions', title: 'Show Positions', type: 'select', required: true, values: YES_NO }, + { + key: 'show_positions_type', + title: 'Show Positions Type', + type: 'select', + required: true, + values: { all: 'All', loggedin: 'Logged In' }, + }, + { key: 'send_report', title: 'Send Report', type: 'select', required: true, values: YES_NO }, + { + key: 'performance_period', + title: 'Performance Period', + type: 'select', + values: { daily: 'Daily', weekly: 'Weekly', monthly: 'Monthly' }, + showIf: { send_report: 'yes' }, + }, + { + key: 'days_or_dates', + title: 'Days or Dates', + type: 'radio', + fullwidth: true, + values: { days: 'Days', dates: 'Dates' }, + showIf: { send_report: 'yes' }, + }, + { + key: 'days', + title: 'Days', + type: 'checkbox', + fullwidth: true, + values: DAYS, + showIf: { send_report: 'yes', days_or_dates: 'days' }, + }, + { + key: 'dates', + title: 'Dates', + type: 'multiselect', + values: dateOptions(), + showIf: { send_report: 'yes', days_or_dates: 'dates' }, + }, + { key: 'send_time', title: 'Send Time', type: 'text', showIf: { send_report: 'yes' } }, + { + key: 'send_report_roles', + title: 'Send Report Roles', + type: 'multiselect', + values: roles, + showIf: { send_report: 'yes' }, + }, + { + key: 'report_roles', + title: 'Report Roles', + type: 'multiselect', + values: roles, + showIf: { send_report: 'yes' }, + }, + { + key: 'send_user_performance', + title: 'Send User Performance', + type: 'select', + values: YES_NO, + showIf: { send_report: 'yes' }, + }, + { + key: 'send_pending_users', + title: 'Send Pending Users', + type: 'select', + values: YES_NO, + showIf: { send_report: 'yes' }, + }, + { + key: 'show_target_average', + title: 'Show Target Average', + type: 'select', + values: YES_NO, + showIf: { send_report: 'yes' }, + }, + { + key: 'show_overall_average', + title: 'Show Overall Average', + type: 'select', + values: YES_NO, + showIf: { send_report: 'yes' }, + }, + { + key: 'metrics', + title: 'Metric Mapping', + type: 'mapping', + variant: 'milestone_metrics', + required: true, + metrics, + fullwidth: true, + }, + { + key: 'milestones', + title: 'Milestone', + type: 'milestonemapping', + required: true, + roles, + badges, + appreciationCategories: categories, + appreciationImages: images, + fullwidth: true, + }, + ]; + }, + beforeForm: (item) => { + const next = { ...item }; + if (next.interval) { + const [start, end] = String(next.interval).split('_'); + next.interval_start_date = toDateInput(start); + next.interval_end_date = toDateInput(end); + } else { + next.interval_start_date = toDateInput(next.interval_start_date); + next.interval_end_date = toDateInput(next.interval_end_date); + } + next.custom_start_date = toDateInput(next.custom_start_date); + next.custom_end_date = toDateInput(next.custom_end_date); + next.metrics = flattenMetrics(next.metrics); + next.milestones = flattenMilestoneCards(next.milestones); + + const reportConfig = next.report_config && typeof next.report_config === 'object' ? next.report_config : {}; + next.days_or_dates = reportConfig.days_or_dates || 'days'; + next.days = toStringList(reportConfig.days); + next.dates = toStringList(reportConfig.dates).map(String); + next.send_time = reportConfig.send_time || ''; + next.performance_period = reportConfig.performance_period || ''; + next.send_report_roles = toStringList(reportConfig.send_report_roles); + next.report_roles = toStringList(reportConfig.report_roles); + next.send_user_performance = fromBool(reportConfig.send_user_performance ?? false); + next.send_pending_users = fromBool(reportConfig.send_pending_users ?? false); + next.show_target_average = fromBool(reportConfig.show_target_average ?? false); + next.show_overall_average = fromBool(reportConfig.show_overall_average ?? false); + next.send_report = fromBool(next.send_report ?? false); + return next; + }, + beforeSave: (data) => { + const payload = { ...data }; + const start = toDateInput(payload.interval_start_date); + const end = toDateInput(payload.interval_end_date); + payload.interval = start && end ? `${start}_${end}` : ''; + payload.custom_start_date = payload.period === 'custom' ? toDateInput(payload.custom_start_date) : ''; + payload.custom_end_date = payload.period === 'custom' ? toDateInput(payload.custom_end_date) : ''; + payload.metrics = mapMetricsForSave(payload.metrics); + payload.milestones = mapMilestonesForSave(payload.milestones); + + const daysOrDates = payload.days_or_dates || 'days'; + payload.send_report = toBool(payload.send_report ?? 'no'); + payload.report_config = { + days_or_dates: daysOrDates, + days: daysOrDates === 'days' ? toStringList(payload.days) : [], + dates: daysOrDates === 'dates' ? toStringList(payload.dates) : [], + send_time: payload.send_time || '13:00', + performance_period: payload.performance_period || 'monthly', + send_report_roles: toStringList(payload.send_report_roles), + report_roles: toStringList(payload.report_roles), + send_user_performance: toBool(payload.send_user_performance ?? 'no'), + send_pending_users: toBool(payload.send_pending_users ?? 'no'), + show_target_average: toBool(payload.show_target_average ?? 'no'), + show_overall_average: toBool(payload.show_overall_average ?? 'no'), + }; + + delete payload.interval_start_date; + delete payload.interval_end_date; + delete payload.days_or_dates; + delete payload.days; + delete payload.dates; + delete payload.send_time; + delete payload.performance_period; + delete payload.send_report_roles; + delete payload.report_roles; + delete payload.send_user_performance; + delete payload.send_pending_users; + delete payload.show_target_average; + delete payload.show_overall_average; + return payload; + }, +}; + +export default milestones; diff --git a/src/modules/positions.js b/src/modules/positions.js new file mode 100644 index 0000000..d405904 --- /dev/null +++ b/src/modules/positions.js @@ -0,0 +1,48 @@ +import { signedGet, isSuccess } from '@/api/client'; +import { getSession } from '@/auth/storage'; + +const positions = { + service: 'ums', + module: 'hierarchy', + title: 'Position', + baseUrl: '/position', + listPath: '/positions', + listParams: { positions: true }, + listRequest: () => { + if (getSession()?.domain === 'crestroad') { + return { service: 'catalog', path: 'activity/hierarchy_list', params: {} }; + } + return {}; + }, + listFields: [ + { key: 'actions', title: 'Actions', buttons: ['edit', 'delete'] }, + { key: 'name', title: 'Position Name', type: 'text' }, + { key: 'code', title: 'Position Code', type: 'text' }, + { key: 'type', title: 'Type', type: 'text' }, + { key: 'designation', title: 'Designation', type: 'text' }, + { key: 'status', title: 'Status', type: 'select' }, + ], + formFields: async () => { + const domainRes = await signedGet('ums', 'domain/get_one'); + const designations = {}; + const domain = isSuccess(domainRes) ? domainRes.data?.item : null; + (domain?.designations || []).forEach((name) => { + designations[name] = name; + }); + return [ + { key: 'name', title: 'Position Name', type: 'text', required: true }, + { key: 'code', title: 'Position Code', type: 'text', required: true }, + { + key: 'type', + title: 'Type', + type: 'select', + required: true, + values: { Territory: 'Territory', Area: 'Area', Region: 'Region', Zone: 'Zone', Country: 'Country' }, + }, + { key: 'designation', title: 'Designation', type: 'select', required: true, values: designations }, + { key: 'status', title: 'Status', type: 'select', required: true, values: { active: 'Active', disabled: 'Disabled' } }, + ]; + }, +}; + +export default positions; diff --git a/src/modules/quizquestions.js b/src/modules/quizquestions.js new file mode 100644 index 0000000..79ec5e3 --- /dev/null +++ b/src/modules/quizquestions.js @@ -0,0 +1,41 @@ +const quizquestions = { + service: 'form', + module: 'quizquestion', + title: 'Quiz Questions', + subtitle: 'Data Gathering', + baseUrl: '/quizquestion', + listPath: '/quizquestions', + missingParentMessage: 'Quiz not found', + parentParam: { urlKey: 'id', apiKey: 'entity_id' }, + parentField: { urlKey: 'id', field: 'entity_id' }, + listFields: [ + { key: 'actions', title: 'Actions', buttons: ['edit', 'delete'] }, + { key: 'question', title: 'Question', type: 'text' }, + { key: 'status', title: 'Status', type: 'select' }, + ], + listButtons: [ + { title: 'Add New', to: '/quizquestion/addnew' }, + { title: 'Back to Quizs', to: '/quizs' }, + ], + formFields: () => [ + { key: 'question', title: 'Question', type: 'textarea', required: true, fullwidth: true }, + { key: 'options', title: 'Options', type: 'mapping', variant: 'quiz_options', required: true, fullwidth: true }, + ], + beforeForm: (item) => ({ + ...item, + options: Array.isArray(item.options) + ? item.options.map((row) => ({ + option: row.option || row.display || row.value || '', + is_correct: Boolean(row.is_correct), + })) + : [], + }), + beforeSave: (data) => ({ + ...data, + options: (Array.isArray(data.options) ? data.options : []) + .filter((row) => row?.option) + .map((row) => ({ option: row.option, is_correct: Boolean(row.is_correct) })), + }), +}; + +export default quizquestions; diff --git a/src/modules/quizs.js b/src/modules/quizs.js new file mode 100644 index 0000000..6729516 --- /dev/null +++ b/src/modules/quizs.js @@ -0,0 +1,57 @@ +import { metricOptions } from '@/helpers/metric'; + +const STATUS = { active: 'Active', disabled: 'Disabled' }; +const YES_NO = { Yes: 'Yes', No: 'No' }; + +const quizs = { + service: 'form', + module: 'quiz', + title: 'Quiz', + subtitle: 'Data Gathering', + baseUrl: '/quiz', + listPath: '/quizs', + listFields: [ + { + key: 'actions', + title: 'Actions', + buttons: [ + 'edit', + 'delete', + { name: 'questions', to: (row) => `/quizquestions?id=${row.id}`, title: 'Questions' }, + ], + }, + { key: 'name', title: 'Name', type: 'text' }, + { key: 'show_score', title: 'Show Score', type: 'text' }, + { key: 'show_answers', title: 'Show Answers', type: 'text' }, + { key: 'number_attempts', title: 'No. of Attempts', type: 'text' }, + { key: 'start_time', title: 'Start Time', type: 'text' }, + { key: 'end_time', title: 'End Time', type: 'text' }, + { key: 'status', title: 'Status', type: 'select' }, + ], + formFields: async () => { + const metrics = await metricOptions(); + return [ + { key: 'name', title: 'Name', type: 'text', required: true, fullwidth: true }, + { key: 'show_score', title: 'Show Score', type: 'select', required: true, values: YES_NO }, + { key: 'show_answers', title: 'Show Answers', type: 'select', required: true, values: YES_NO }, + { key: 'limit_attempts', title: 'Limit Attempts', type: 'select', required: true, values: YES_NO }, + { key: 'number_attempts', title: 'No. of attempts', type: 'number', required: true }, + { key: 'start_time', title: 'Start Time', type: 'datetime', required: true }, + { key: 'end_time', title: 'End Time', type: 'datetime', required: true }, + { key: 'quiz_type', title: 'Quiz Type', type: 'select', required: true, values: { quiz: 'Quiz', poll: 'Poll' } }, + { key: 'status', title: 'Status', type: 'select', required: true, values: STATUS }, + { key: 'score_metric', title: 'Score Metric', type: 'select', values: metrics, required: true }, + ]; + }, + beforeForm: (item) => ({ + ...item, + start_time: item.start_time ? String(item.start_time).replace('T', ' ').slice(0, 16) : '', + end_time: item.end_time ? String(item.end_time).replace('T', ' ').slice(0, 16) : '', + }), + beforeSave: (data) => ({ + ...data, + number_attempts: Number.parseInt(data.number_attempts, 10) || 0, + }), +}; + +export default quizs; diff --git a/src/modules/reminders.js b/src/modules/reminders.js new file mode 100644 index 0000000..a42789c --- /dev/null +++ b/src/modules/reminders.js @@ -0,0 +1,116 @@ +import { signedGet, isSuccess } from '@/api/client'; +import { dropdownMap } from '@/api/dropdowns'; +import { splitHash } from '@/helpers/metric'; + +const STATUS = { active: 'Active', disabled: 'Disabled' }; +const DAYS = { + MON: 'Monday', + TUE: 'Tuesday', + WED: 'Wednesday', + THU: 'Thursday', + FRI: 'Friday', + SAT: 'Saturday', + SUN: 'Sunday', +}; + +function dateOptions() { + const values = { L: 'Last day of month' }; + for (let day = 1; day <= 31; day += 1) values[String(day)] = String(day); + return values; +} + +function asArray(value) { + if (Array.isArray(value)) return value.filter((part) => part !== null && part !== undefined && part !== ''); + if (typeof value === 'string' && value.trim()) return value.split(/[#,]/).filter(Boolean); + return splitHash(value); +} + +function flattenReminders(rows) { + if (!Array.isArray(rows)) return []; + return rows.map((row) => { + const item = row && typeof row === 'object' ? row : {}; + const managerLevels = ['l1', 'l2', 'l3', 'l4']; + const rawManager = asArray(item.manager).map((part) => String(part).toLowerCase()); + return { + time: item.time || '', + days: item.days ?? '0', + beore_or_after: item.beore_or_after || 'before', + send_to: item.send_to || (rawManager.length ? 'both' : 'rep'), + manager: rawManager.filter((part) => managerLevels.includes(part)), + selected_users: asArray(item.selected_users).filter((id) => !managerLevels.includes(String(id).toLowerCase())), + checksubmission: item.checksubmission || 'no', + checksubmission_days: item.checksubmission_days || '', + message: item.message || '', + plan_date_field: item.plan_date_field || '', + }; + }); +} + +const reminders = { + service: 'form', + module: 'reminder', + title: 'Form Reminder', + subtitle: 'Data Gathering', + baseUrl: '/reminder', + listPath: '/reminders', + listFields: [ + { key: 'actions', title: 'Actions', buttons: ['edit', 'delete'] }, + { key: 'title', title: 'Name', type: 'text' }, + { key: 'status', title: 'Status', type: 'select' }, + ], + formFields: async () => { + const [actions, usersRes] = await Promise.all([ + dropdownMap('form', 'formaction', (item) => item.name), + signedGet('ums', 'users/dropdown'), + ]); + const users = {}; + const userItems = isSuccess(usersRes) ? usersRes.data?.items || [] : []; + userItems.forEach((user) => { + if (user?.id) users[user.id] = `${user.firstname || ''} ${user.lastname || ''} (${user.employee_code || ''})`.trim(); + }); + return [ + { key: 'title', title: 'Title', type: 'text', required: true }, + { key: 'status', title: 'Status', type: 'select', required: true, values: STATUS }, + { + key: 'days_or_dates', + title: 'Days or Dates', + type: 'radio', + required: true, + fullwidth: true, + values: { days: 'Days', dates: 'Dates' }, + }, + { key: 'days', title: 'Days', type: 'checkbox', values: DAYS, showIf: { days_or_dates: 'days' } }, + { key: 'dates', title: 'Dates', type: 'multiselect', values: dateOptions(), showIf: { days_or_dates: 'dates' } }, + { key: 'action', title: 'Target Action', type: 'select', required: true, values: actions }, + { key: 'reminders', title: 'Reminders', type: 'reminders', fullwidth: true, users }, + ]; + }, + beforeForm: (item) => ({ + ...item, + days: asArray(item.days), + dates: asArray(item.dates).map(String), + days_or_dates: item.days_or_dates || 'days', + reminders: flattenReminders(item.reminders), + }), + beforeSave: (data) => { + const payload = { ...data }; + const daysOrDates = payload.days_or_dates || 'days'; + payload.days = daysOrDates === 'days' ? asArray(payload.days) : []; + payload.dates = daysOrDates === 'dates' ? asArray(payload.dates) : []; + payload.reminders = (Array.isArray(payload.reminders) ? payload.reminders : []).map((row) => ({ + time: row.time || '', + days: row.days ?? '0', + beore_or_after: row.beore_or_after || 'before', + send_to: row.send_to || 'rep', + manager: Array.isArray(row.manager) ? row.manager.filter(Boolean).join(',') : row.manager || '', + selected_users: asArray(row.selected_users), + checksubmission: row.checksubmission || 'no', + checksubmission_days: row.checksubmission === 'yes' ? row.checksubmission_days || '' : '', + message: row.message || '', + plan_date_field: row.plan_date_field || '', + })); + return payload; + }, +}; + +export default reminders; diff --git a/src/modules/rewardcategorys.js b/src/modules/rewardcategorys.js new file mode 100644 index 0000000..f314325 --- /dev/null +++ b/src/modules/rewardcategorys.js @@ -0,0 +1,42 @@ +import { dropdownMap } from '@/api/dropdowns'; +import { splitHash } from '@/helpers/metric'; + +const STATUS = { active: 'Active', disabled: 'Disabled' }; + +const rewardcategorys = { + service: 'recognition', + module: 'reward_category', + title: 'Reward Category', + subtitle: 'Recognition', + baseUrl: '/rewardcategory', + listPath: '/rewardcategorys', + listFields: [ + { key: 'actions', title: 'Actions', buttons: ['edit', 'delete'] }, + { key: 'title', title: 'Title', type: 'text' }, + { key: 'status', title: 'Status', type: 'select' }, + ], + formFields: async () => { + const [groups, roles] = await Promise.all([ + dropdownMap('ums', 'group', (item) => item.name), + dropdownMap('ums', 'roles', (item) => item.name), + ]); + return [ + { key: 'title', title: 'Title', type: 'text', required: true }, + { key: 'status', title: 'Status', type: 'select', required: true, values: STATUS }, + { key: 'groups', title: 'Groups', type: 'multiselect', required: true, values: groups }, + { key: 'roles', title: 'Roles', type: 'multiselect', required: true, values: roles }, + ]; + }, + beforeForm: (item) => ({ + ...item, + groups: splitHash(item.groups), + roles: splitHash(item.roles), + }), + beforeSave: (data) => ({ + ...data, + groups: splitHash(data.groups), + roles: splitHash(data.roles), + }), +}; + +export default rewardcategorys; diff --git a/src/modules/rewards.js b/src/modules/rewards.js new file mode 100644 index 0000000..f098a0f --- /dev/null +++ b/src/modules/rewards.js @@ -0,0 +1,49 @@ +import { dropdownMap } from '@/api/dropdowns'; +import { splitHash } from '@/helpers/metric'; + +const STATUS = { active: 'Active', disabled: 'Disabled' }; + +const rewards = { + service: 'recognition', + module: 'reward', + title: 'Reward', + subtitle: 'Recognition', + baseUrl: '/reward', + listPath: '/rewards', + listFields: [ + { key: 'actions', title: 'Actions', buttons: ['edit', 'delete'] }, + { key: 'title', title: 'Title', type: 'text' }, + { key: 'status', title: 'Status', type: 'select' }, + ], + formFields: async () => { + const [groups, roles, categories] = await Promise.all([ + dropdownMap('ums', 'group', (item) => item.name), + dropdownMap('ums', 'roles', (item) => item.name), + dropdownMap('recognition', 'reward_category', (item) => item.title), + ]); + return [ + { key: 'title', title: 'Title', type: 'text', required: true }, + { key: 'status', title: 'Status', type: 'select', required: true, values: STATUS }, + { key: 'points', title: 'Points', type: 'text', required: true }, + { key: 'categories', title: 'Categories', type: 'multiselect', required: true, values: categories }, + { key: 'groups', title: 'Groups', type: 'multiselect', required: true, values: groups }, + { key: 'roles', title: 'Roles', type: 'multiselect', required: true, values: roles }, + { key: 'description', title: 'Description', type: 'textarea', required: true }, + { key: 'image', title: 'Image', type: 'image', required: true }, + ]; + }, + beforeForm: (item) => ({ + ...item, + groups: splitHash(item.groups), + roles: splitHash(item.roles), + categories: splitHash(item.categories), + }), + beforeSave: (data) => ({ + ...data, + groups: splitHash(data.groups), + roles: splitHash(data.roles), + categories: splitHash(data.categories), + }), +}; + +export default rewards; diff --git a/src/modules/roles.js b/src/modules/roles.js new file mode 100644 index 0000000..9a6ddb8 --- /dev/null +++ b/src/modules/roles.js @@ -0,0 +1,44 @@ +import { signedGet, isSuccess } from '@/api/client'; +import { dropdownMap } from '@/api/dropdowns'; + +const roles = { + service: 'ums', + module: 'roles', + title: 'Roles', + baseUrl: '/role', + listPath: '/roles', + listFields: [ + { key: 'actions', title: 'Actions', buttons: ['edit', 'delete'] }, + { key: 'name', title: 'Role Name', type: 'text' }, + { key: 'code', title: 'Role Code', type: 'text' }, + { key: 'status', title: 'Status', type: 'select' }, + ], + formFields: async () => { + const [master, hierarchies] = await Promise.all([ + signedGet('ums', 'roles/masterlist'), + dropdownMap('ums', 'hierarchy', (item) => `${item.name} (${item.code})`), + ]); + const permissions = {}; + const list = isSuccess(master) ? master.data?.permissions || [] : []; + list.forEach((permission) => { + permissions[permission] = permission; + }); + return [ + { key: 'name', title: 'Role Name', type: 'text', required: true }, + { key: 'code', title: 'Role Code', type: 'text', required: true }, + { key: 'mimik_position', title: 'Mimik Position (Applicable to HO)', type: 'select', values: hierarchies }, + { key: 'status', title: 'Status', type: 'select', required: true, values: { active: 'Active', disabled: 'Disabled' } }, + { key: 'permissions', title: 'permissions', type: 'bigmultiselect', required: true, values: permissions, fullwidth: true }, + ]; + }, + beforeForm: (item) => ({ + ...item, + permissions: Array.isArray(item.permissions) + ? item.permissions.map(String) + : String(item.permissions || '') + .split(/[#~,]/) + .filter(Boolean), + }), +}; + +export default roles; diff --git a/src/modules/surveyquestions.js b/src/modules/surveyquestions.js new file mode 100644 index 0000000..ef8fbec --- /dev/null +++ b/src/modules/surveyquestions.js @@ -0,0 +1,60 @@ +const SURVEY_QUESTION_TYPES = { + text: 'Text', + number: 'Number', + date: 'Date', + email: 'Email', + url: 'Url', + dropdown: 'Dropdown', + checkbox: 'Checkbox', + radio: 'Radio', + radiometrix: 'RadioMetrix', + multitextbox: 'Multi Text Boxes', + contacts: 'Contacts', + file: 'File Upload', +}; + +const STATUS = { active: 'Active', disabled: 'Disabled' }; + +const surveyquestions = { + service: 'form', + module: 'surveyquestion', + title: 'Survey Questions', + subtitle: 'Data Gathering', + baseUrl: '/surveyquestion', + listPath: '/surveyquestions', + missingParentMessage: 'Survey not found', + parentParam: { urlKey: 'id', apiKey: 'entity_id' }, + parentField: { urlKey: 'id', field: 'entity_id' }, + listFields: [ + { key: 'actions', title: 'Actions', buttons: ['edit', 'delete'] }, + { key: 'question', title: 'Question', type: 'text' }, + { key: 'status', title: 'Status', type: 'select' }, + ], + listButtons: [ + { title: 'Add New', to: '/surveyquestion/addnew' }, + { title: 'Back to Surveys', to: '/surveys' }, + ], + formFields: () => [ + { key: 'question', title: 'Question', type: 'text', required: true, fullwidth: true }, + { + key: 'code', + title: 'Code (small caps without spaces and special chars except "_")', + type: 'text', + required: true, + }, + { key: 'type', title: 'Question Type', type: 'select', required: true, values: SURVEY_QUESTION_TYPES }, + { key: 'required', title: 'Is Required', type: 'yesno', required: true }, + { key: 'status', title: 'Status', type: 'select', required: true, values: STATUS }, + { key: 'options', title: 'Options', type: 'mapping', variant: 'question_options', fullwidth: true }, + ], + beforeForm: (item) => ({ + ...item, + options: Array.isArray(item.options) ? item.options : [], + }), + beforeSave: (data) => ({ + ...data, + options: Array.isArray(data.options) ? data.options : [], + }), +}; + +export default surveyquestions; diff --git a/src/modules/surveys.js b/src/modules/surveys.js new file mode 100644 index 0000000..d186a01 --- /dev/null +++ b/src/modules/surveys.js @@ -0,0 +1,31 @@ +const STATUS = { active: 'Active', disabled: 'Disabled' }; + +const surveys = { + service: 'form', + module: 'survey', + title: 'Survey', + subtitle: 'Data Gathering', + baseUrl: '/survey', + listPath: '/surveys', + listFields: [ + { + key: 'actions', + title: 'Actions', + buttons: [ + 'edit', + 'delete', + { name: 'questions', to: (row) => `/surveyquestions?id=${row.id}`, title: 'Questions' }, + ], + }, + { key: 'title', title: 'Title', type: 'text' }, + { key: 'status', title: 'Status', type: 'select' }, + ], + formFields: () => [ + { key: 'title', title: 'Title', type: 'text', required: true }, + { key: 'description', title: 'Description', type: 'textarea', required: true, fullwidth: true }, + { key: 'status', title: 'Status', type: 'select', required: true, values: STATUS }, + { key: 'export_fields', title: 'Export Fields', type: 'textarea', fullwidth: true }, + ], +}; + +export default surveys; diff --git a/src/modules/teams.js b/src/modules/teams.js new file mode 100644 index 0000000..4a28c77 --- /dev/null +++ b/src/modules/teams.js @@ -0,0 +1,32 @@ +import { dropdownMap } from '@/api/dropdowns'; + +const teams = { + service: 'ums', + module: 'team', + title: 'Teams', + baseUrl: '/team', + listPath: '/teams', + listFields: [ + { + key: 'actions', + title: 'Actions', + buttons: ['edit', 'delete', { name: 'players', to: (row) => `/team/players?id=${row.id}`, title: 'Players' }], + }, + { key: 'name', title: 'Team Name', type: 'text' }, + { key: 'status', title: 'Status', type: 'select' }, + ], + formFields: async () => { + const positions = await dropdownMap('ums', 'hierarchy', (item) => `${item.name} (${item.code})`); + return [ + { key: 'name', title: 'Team Name', type: 'text', required: true }, + { key: 'status', title: 'Status', type: 'select', required: true, values: { active: 'Active', disabled: 'Disabled' } }, + { key: 'description', title: 'Description', type: 'textarea', required: true }, + { key: 'slogal', title: 'Slogal', type: 'textarea', required: true }, + { key: 'image', title: 'Team Image or Icon', type: 'image', required: true }, + { key: 'mode', title: 'Team Mode', type: 'select', required: true, values: { normal: 'Normal', hierarchical: 'Hierarchical' } }, + { key: 'mapped_top_position', title: 'Team top position', type: 'select', values: positions }, + ]; + }, +}; + +export default teams; diff --git a/src/modules/userattributes.js b/src/modules/userattributes.js new file mode 100644 index 0000000..d0c02ed --- /dev/null +++ b/src/modules/userattributes.js @@ -0,0 +1,64 @@ +import { dropdownMap } from '@/api/dropdowns'; + +const userattributes = { + service: 'ums', + module: 'userattribute', + title: 'User Attributes', + baseUrl: '/userattribute', + listPath: '/userattributes', + listFields: [ + { key: 'actions', title: 'Actions', buttons: ['edit', 'delete'] }, + { key: 'attribute', title: 'Attribute', type: 'text' }, + { key: 'code', title: 'Code', type: 'text' }, + { key: 'type', title: 'Type', type: 'text' }, + { key: 'status', title: 'Status', type: 'select' }, + ], + formFields: async () => { + const roles = await dropdownMap('ums', 'roles', (item) => item.name); + return [ + { key: 'attribute', title: 'Attribute', type: 'text', required: true }, + { key: 'code', title: 'Code (small caps without spaces and special chars except "_")', type: 'text', required: true }, + { key: 'required', title: 'Is Required', type: 'yesno', required: true, default: 'yes' }, + { key: 'editable', title: 'Is Editable', type: 'yesno', required: true, default: 'yes' }, + { + key: 'type', + title: 'Attribute Type', + type: 'select', + required: true, + values: { + text: 'Text', + number: 'Number', + date: 'Date', + email: 'Email', + url: 'Url', + select: 'Dropdown', + multiselect: 'Multi Select', + checkbox: 'Checkbox', + radio: 'Radio', + }, + }, + { key: 'roles', title: 'Roles', type: 'multiselect', values: roles }, + { key: 'sort_order', title: 'Sort Order', type: 'number', required: true, default: 0 }, + { key: 'status', title: 'Status', type: 'select', required: true, values: { active: 'Active', disabled: 'Disabled' } }, + { key: 'options', title: 'Options', type: 'mapping', fullwidth: true }, + ]; + }, + beforeForm: (item) => ({ + ...item, + roles: Array.isArray(item.roles) ? item.roles : [], + options: Array.isArray(item.options) ? item.options : [], + required: item.required || 'yes', + editable: item.editable || 'yes', + sort_order: item.sort_order ?? 0, + }), + beforeSave: (data) => { + const optionTypes = ['select', 'multiselect', 'checkbox', 'radio']; + return { + ...data, + roles: Array.isArray(data.roles) ? data.roles : [], + options: optionTypes.includes(data.type) ? data.options || [] : [], + }; + }, +}; + +export default userattributes; diff --git a/src/modules/users.js b/src/modules/users.js new file mode 100644 index 0000000..8c885d6 --- /dev/null +++ b/src/modules/users.js @@ -0,0 +1,101 @@ +import { signedGet, isSuccess } from '@/api/client'; +import { dropdownMap } from '@/api/dropdowns'; +import { formatRoleNames } from '@/helpers/roles'; + +const users = { + service: 'ums', + module: 'users', + title: 'Users', + baseUrl: '/user', + listPath: '/users', + listType: 'ajaxlist', + listFields: [ + { key: 'actions', title: 'Actions', buttons: ['edit', 'delete'] }, + { key: 'employee_code', title: 'Employee Code', type: 'text' }, + { key: 'firstname', title: 'Firstname', type: 'text' }, + { key: 'lastname', title: 'Lastname', type: 'text' }, + { key: 'email', title: 'Email', type: 'text' }, + { key: 'logged_in', title: 'Is Logged In', type: 'text' }, + { key: 'roles', title: 'Roles', type: 'text' }, + { key: 'phone', title: 'Phone', type: 'text' }, + { key: 'designation', title: 'Designation', type: 'text' }, + { key: 'state', title: 'State', type: 'text' }, + { key: 'city', title: 'City', type: 'text' }, + { key: 'status', title: 'Status', type: 'select' }, + ], + listButtons: [ + { title: 'Add New', to: '/user/addnew' }, + { title: 'Import Users', to: '/user/import' }, + { title: 'Export Users', action: 'export' }, + ], + loginAudit: true, + passwordReset: true, + exportCsv: { + params: { start: 0, length: 9999, search: JSON.stringify({}), keyword: '', export: 1 }, + filename: 'users.csv', + headers: [ + 'id', + 'Employee Code', + 'Firstname', + 'Lastname', + 'Email', + 'Is Logged In', + 'Roles', + 'Phone', + 'Designation', + 'State', + 'City', + 'Status', + 'Created At', + ], + row: (user, formatDate) => [ + user.id ?? '-', + user.employee_code ?? '-', + user.firstname ?? '-', + user.lastname ?? '-', + user.email ?? '-', + user.logged_in ?? '-', + user.roles ? formatRoleNames(user.roles) || '-' : '-', + user.phone ?? '-', + user.designation ?? '-', + user.state ?? '-', + user.city ?? '-', + user.status ?? '-', + user.createdAt ? formatDate(user.createdAt) : '-', + ], + }, + formFields: async () => { + const domainRes = await signedGet('ums', 'domain/get_one'); + const designations = {}; + const domain = isSuccess(domainRes) ? domainRes.data?.item : null; + (domain?.designations || []).forEach((name) => { + designations[name] = name; + }); + const [roles, channels] = await Promise.all([ + dropdownMap('ums', 'roles', (item) => item.name), + dropdownMap('ums', 'channel', (item) => item.name), + ]); + const fields = [ + { key: 'firstname', title: 'Firstname', type: 'text', required: true }, + { key: 'lastname', title: 'Lastname', type: 'text', required: true }, + { key: 'email', title: 'Email', type: 'email', required: true }, + { key: 'phone', title: 'Phone', type: 'text', required: true }, + { key: 'employee_code', title: 'Employee Code', type: 'text', required: true }, + { key: 'designation', title: 'Designation', type: 'select', required: true, values: designations }, + { key: 'roles', title: 'Roles', type: 'multiselect', required: true, values: roles }, + { key: 'channels', title: 'Channels', type: 'multiselect', required: true, values: channels }, + { key: 'status', title: 'Status', type: 'select', required: true, values: { active: 'Active', disabled: 'Disabled' } }, + { key: 'state', title: 'State', type: 'text', required: true }, + { key: 'city', title: 'City', type: 'text', required: true }, + { key: 'pincode', title: 'Pincode', type: 'text', required: true }, + { key: 'address', title: 'Address', type: 'textarea' }, + { key: 'avatar', title: 'Avatar', type: 'image' }, + ]; + if (domain?.login_scheme === 'Password') { + fields.push({ key: 'password', title: 'Password', type: 'text', required: true }); + } + return fields; + }, +}; + +export default users; diff --git a/src/modules/walls.js b/src/modules/walls.js new file mode 100644 index 0000000..6e9d419 --- /dev/null +++ b/src/modules/walls.js @@ -0,0 +1,52 @@ +import { dropdownMap } from '@/api/dropdowns'; + +function splitHash(value) { + if (Array.isArray(value)) return value.filter(Boolean); + if (typeof value === 'string' && value.trim()) return value.split('#').filter(Boolean); + return []; +} + +const walls = { + service: 'wall', + module: 'wallmessage', + title: 'Wall', + subtitle: 'Content', + baseUrl: '/wall', + listPath: '/walls', + listFields: [ + { key: 'actions', title: 'Actions', buttons: ['edit', 'delete'] }, + { key: 'title', title: 'Title', type: 'text' }, + { key: 'type', title: 'Type', type: 'text' }, + { key: 'status', title: 'Status', type: 'select' }, + ], + formFields: async () => { + const groups = await dropdownMap('ums', 'group', (item) => item.name); + return [ + { key: 'title', title: 'Title', type: 'text', required: true, fullwidth: true }, + { key: 'groups', title: 'Groups', type: 'multiselect', values: { all: 'All Users', ...groups } }, + { key: 'status', title: 'Status', type: 'select', required: true, values: { active: 'Active', disabled: 'Disabled' } }, + { key: 'body', title: 'Body', type: 'textarea', required: true, fullwidth: true }, + { + key: 'media_type', + title: 'Media Type', + type: 'select', + required: true, + values: { IMAGE: 'Image', VIDEO: 'Video' }, + }, + { key: 'scheduled', title: 'Scheduled', type: 'yesno', required: true }, + { key: 'schedule_date', title: 'Schedule date', type: 'date', required: true }, + { key: 'pinned', title: 'Pinned', type: 'yesno', required: true }, + { key: 'media_url', title: 'Media File', type: 'file', required: true }, + ]; + }, + beforeForm: (item) => ({ + ...item, + groups: splitHash(item.groups), + }), + beforeSave: (data) => ({ + ...data, + groups: Array.isArray(data.groups) ? data.groups : data.groups ? [data.groups] : [], + }), +}; + +export default walls; diff --git a/src/modules/widgets.js b/src/modules/widgets.js new file mode 100644 index 0000000..c099f36 --- /dev/null +++ b/src/modules/widgets.js @@ -0,0 +1,51 @@ +import { dropdownMap } from '@/api/dropdowns'; + +function splitHash(value) { + if (Array.isArray(value)) return value.filter(Boolean); + if (typeof value === 'string' && value.trim()) return value.split('#').filter(Boolean); + return []; +} + +const widgets = { + service: 'wall', + module: 'widgets', + title: 'Widgets', + subtitle: 'Content', + baseUrl: '/widget', + listPath: '/widgets', + listFields: [ + { key: 'actions', title: 'Actions', buttons: ['edit', 'delete'] }, + { key: 'title', title: 'Widget title', type: 'text' }, + { key: 'widget_name', title: 'Widget Name', type: 'text' }, + { key: 'status', title: 'Status', type: 'select' }, + ], + formFields: async () => { + const [groups, roles] = await Promise.all([ + dropdownMap('ums', 'group', (item) => item.name), + dropdownMap('ums', 'roles', (item) => item.name), + ]); + return [ + { key: 'title', title: 'Widget title', type: 'text', required: true }, + { key: 'status', title: 'Status', type: 'select', required: true, values: { active: 'Active', disabled: 'Disabled' } }, + { key: 'widget_name', title: 'Widget Name', type: 'text', required: true }, + { key: 'position', title: 'Position', type: 'select', required: true, values: { dashboard: 'Dashboard' } }, + { key: 'parameters', title: 'Parameters (Array)', type: 'textarea', fullwidth: true }, + { key: 'groups', title: 'Groups', type: 'multiselect', required: true, values: groups }, + { key: 'roles', title: 'Roles', type: 'multiselect', required: true, values: roles }, + ]; + }, + beforeForm: (item) => ({ + ...item, + groups: splitHash(item.groups), + roles: splitHash(item.roles), + parameters: item.parameters == null ? '' : typeof item.parameters === 'string' ? item.parameters : JSON.stringify(item.parameters), + }), + beforeSave: (data) => ({ + ...data, + groups: Array.isArray(data.groups) ? data.groups.filter(Boolean) : [], + roles: Array.isArray(data.roles) ? data.roles.filter(Boolean) : [], + parameters: data.parameters == null ? '' : data.parameters, + }), +}; + +export default widgets; diff --git a/src/routes/index.jsx b/src/routes/index.jsx new file mode 100644 index 0000000..77e760a --- /dev/null +++ b/src/routes/index.jsx @@ -0,0 +1,162 @@ +import { lazy } from 'react'; +import { Navigate } from 'react-router'; +import MainLayout from '@/layouts/MainLayout'; +import RequireAuth from '@/auth/RequireAuth'; +import GuestOnly from '@/auth/GuestOnly'; +import channels from '@/modules/channels'; +import users from '@/modules/users'; +import roles from '@/modules/roles'; +import userattributes from '@/modules/userattributes'; +import groups from '@/modules/groups'; +import positions from '@/modules/positions'; +import apps from '@/modules/apps'; +import teams from '@/modules/teams'; +import contacts from '@/modules/contacts'; +import contactexports from '@/modules/contactexports'; +import contactattributes from '@/modules/contactattributes'; +import magazines from '@/modules/magazines'; +import magmedias from '@/modules/magmedias'; +import walls from '@/modules/walls'; +import banners from '@/modules/banners'; +import widgets from '@/modules/widgets'; +import forums from '@/modules/forums'; +import forumtopics from '@/modules/forumtopics'; +import metrics from '@/modules/metrics'; +import metricmappings from '@/modules/metricmappings'; +import metricviews from '@/modules/metricviews'; +import metricdataimports from '@/modules/metricdataimports'; +import metriccampaigns from '@/modules/metriccampaigns'; +import appcategorys from '@/modules/appcategorys'; +import appimages from '@/modules/appimages'; +import badgelists from '@/modules/badgelists'; +import rewardcategorys from '@/modules/rewardcategorys'; +import rewards from '@/modules/rewards'; +import milestones from '@/modules/milestones'; +import formentitys from '@/modules/formentitys'; +import formquestions from '@/modules/formquestions'; +import formhooks from '@/modules/formhooks'; +import surveys from '@/modules/surveys'; +import surveyquestions from '@/modules/surveyquestions'; +import quizs from '@/modules/quizs'; +import quizquestions from '@/modules/quizquestions'; +import formactions from '@/modules/formactions'; +import formexports from '@/modules/formexports'; +import reminders from '@/modules/reminders'; +import leaderboards from '@/modules/leaderboards'; + +const Login = lazy(() => import('@/views/auth/Login')); +const LoginOtp = lazy(() => import('@/views/auth/LoginOtp')); +const LoginPassword = lazy(() => import('@/views/auth/LoginPassword')); +const Dashboard = lazy(() => import('@/views/dashboard')); +const MyAccount = lazy(() => import('@/views/account/MyAccount')); +const ComingSoon = lazy(() => import('@/views/placeholder/ComingSoon')); +const EntityListPage = lazy(() => import('@/views/modules/EntityListPage')); +const EntityFormPage = lazy(() => import('@/views/modules/EntityFormPage')); +const MetricReportList = lazy(() => import('@/views/metricreport/List')); +const MetricReport = lazy(() => import('@/views/metricreport/Report')); +const FormActionConsoleList = lazy(() => import('@/views/formaction/ConsoleList')); +const DomainEdit = lazy(() => import('@/views/organisation/DomainEdit')); +const HierarchyTree = lazy(() => import('@/views/organisation/HierarchyTree')); +const ImportWizard = lazy(() => import('@/views/organisation/ImportWizard')); +const TeamPlayers = lazy(() => import('@/views/organisation/TeamPlayers')); +const MagMediaViewers = lazy(() => import('@/views/content/MagMediaViewers')); + +function moduleRoutes(config) { + const routes = [ + { path: config.listPath.replace(/^\//, ''), element: }, + { path: `${config.baseUrl.replace(/^\//, '')}/addnew`, element: }, + ]; + if (!config.skipEdit) { + routes.push({ path: `${config.baseUrl.replace(/^\//, '')}/edit`, element: }); + } + return routes; +} + +export const routes = [ + { + element: , + children: [ + { path: '/login', element: }, + { path: '/loginotp', element: }, + { path: '/loginpassword', element: }, + ], + }, + { + element: , + children: [ + { + element: , + children: [ + { path: '/', element: }, + { path: '/myaccount', element: }, + { path: '/formaction/consolelist', element: }, + ...moduleRoutes(channels), + ...moduleRoutes(users), + ...moduleRoutes(roles), + ...moduleRoutes(userattributes), + ...moduleRoutes(groups), + ...moduleRoutes(positions), + ...moduleRoutes(apps), + ...moduleRoutes(teams), + { path: '/domain/edit', element: }, + { path: '/hierarchys', element: }, + { path: '/user/import', element: }, + { path: '/hierarchy/import', element: }, + { path: '/team/players', element: }, + ...moduleRoutes(contacts), + ...moduleRoutes(contactexports), + ...moduleRoutes(contactattributes), + { + path: '/contact/import', + element: ( + + ), + }, + ...moduleRoutes(magazines), + ...moduleRoutes(magmedias), + ...moduleRoutes(walls), + ...moduleRoutes(banners), + ...moduleRoutes(widgets), + ...moduleRoutes(forums), + ...moduleRoutes(forumtopics), + { path: '/magmedia/viewers', element: }, + ...moduleRoutes(metrics), + ...moduleRoutes(metricmappings), + ...moduleRoutes(metricviews), + ...moduleRoutes(metricdataimports), + ...moduleRoutes(metriccampaigns), + ...moduleRoutes(appcategorys), + ...moduleRoutes(appimages), + ...moduleRoutes(badgelists), + ...moduleRoutes(rewardcategorys), + ...moduleRoutes(rewards), + ...moduleRoutes(milestones), + ...moduleRoutes(formentitys), + ...moduleRoutes(formquestions), + ...moduleRoutes(formhooks), + ...moduleRoutes(surveys), + ...moduleRoutes(surveyquestions), + ...moduleRoutes(quizs), + ...moduleRoutes(quizquestions), + ...moduleRoutes(formactions), + ...moduleRoutes(formexports), + ...moduleRoutes(reminders), + ...moduleRoutes(leaderboards), + { path: '/metricreports', element: }, + { path: '/metricreport/report', element: }, + { path: '/coming-soon', element: }, + { path: '*', element: }, + ], + }, + ], + }, + { path: '*', element: }, +]; diff --git a/src/types/calendar.js b/src/types/calendar.js new file mode 100644 index 0000000..8cec2e9 --- /dev/null +++ b/src/types/calendar.js @@ -0,0 +1 @@ +export {}; \ No newline at end of file diff --git a/src/types/index.js b/src/types/index.js new file mode 100644 index 0000000..8cec2e9 --- /dev/null +++ b/src/types/index.js @@ -0,0 +1 @@ +export {}; \ No newline at end of file diff --git a/src/types/kanban.js b/src/types/kanban.js new file mode 100644 index 0000000..8cec2e9 --- /dev/null +++ b/src/types/kanban.js @@ -0,0 +1 @@ +export {}; \ No newline at end of file diff --git a/src/types/layout.js b/src/types/layout.js new file mode 100644 index 0000000..8cec2e9 --- /dev/null +++ b/src/types/layout.js @@ -0,0 +1 @@ +export {}; \ No newline at end of file diff --git a/src/views/account/MyAccount.jsx b/src/views/account/MyAccount.jsx new file mode 100644 index 0000000..a929db7 --- /dev/null +++ b/src/views/account/MyAccount.jsx @@ -0,0 +1,71 @@ +import { useEffect, useState } from 'react'; +import { Card, Col, Container, Row, Spinner } from 'react-bootstrap'; +import { signedGet, isSuccess } from '@/api/client'; +import { useAuth } from '@/auth/AuthProvider'; +import PageBreadcrumb from '@/components/PageBreadcrumb'; + +const FIELDS = [ + ['firstname', 'Firstname'], + ['lastname', 'Lastname'], + ['email', 'Email'], + ['phone', 'Phone'], + ['employee_code', 'Employee Code'], + ['state', 'State'], + ['city', 'City'], + ['pincode', 'Pincode'], + ['address', 'Address'], +]; + +export default function MyAccount() { + const { user } = useAuth(); + const [item, setItem] = useState(null); + const [error, setError] = useState(''); + const [loading, setLoading] = useState(true); + + useEffect(() => { + const load = async () => { + setLoading(true); + try { + const response = await signedGet('ums', 'users/get_one', { id: user?.id }); + if (!isSuccess(response)) { + setError(response?.message || 'Unable to load profile'); + return; + } + setItem(response.data?.item || null); + } catch (err) { + setError(err.message || 'Unable to load profile'); + } finally { + setLoading(false); + } + }; + if (user?.id) load(); + }, [user?.id]); + + return ( + + + + + + +

    My Account

    + {error ?
    {error}
    : null} + {loading ? ( + + ) : ( + + {FIELDS.map(([key, label]) => ( + +
    {label}
    +
    {item?.[key] || '-'}
    + + ))} +
    + )} +
    +
    + +
    +
    + ); +} diff --git a/src/views/apps/api-key/components/ApiKeyTabel.jsx b/src/views/apps/api-key/components/ApiKeyTabel.jsx new file mode 100644 index 0000000..bddddd8 --- /dev/null +++ b/src/views/apps/api-key/components/ApiKeyTabel.jsx @@ -0,0 +1,219 @@ +import { useState } from 'react'; +import { Button, Card, CardFooter, CardHeader, Col, FormControl, Row } from 'react-bootstrap'; +import { LuCircleCheck, LuGlobe, LuSearch } from 'react-icons/lu'; +import { TbCopy, TbEdit, TbEye, TbPlus, TbTrash } from 'react-icons/tb'; +import { createColumnHelper, getCoreRowModel, getFilteredRowModel, getPaginationRowModel, getSortedRowModel, useReactTable } from '@tanstack/react-table'; +import DataTable from '@/components/table/DataTable'; +import DeleteConfirmationModal from '@/components/table/DeleteConfirmationModal'; +import TablePagination from '@/components/table/TablePagination'; +import { toPascalCase } from '@/helpers/casing'; +import { useCopyToClipboard } from 'usehooks-ts'; +import ApiModal from './ApiModal'; +import { apiClients } from '@/views/apps/api-key/data'; +const columnHelper = createColumnHelper(); +const ApiKeyTabel = () => { + const [_copiedText, copy] = useCopyToClipboard(); + const [showModal, setShowModal] = useState(false); + const columns = [{ + id: 'select', + header: ({ + table + }) => , + cell: ({ + row + }) => , + enableSorting: false, + enableColumnFilter: false + }, columnHelper.accessor('name', { + header: 'Name' + }), columnHelper.accessor('author', { + header: 'Created By', + cell: ({ + row + }) =>
    +
    + +
    +
    +
    + {row.original.author} +
    +
    +
    + }), columnHelper.accessor('apiKey', { + header: 'Api Key', + cell: ({ + row + }) =>
    + + +
    + }), columnHelper.accessor('status', { + header: 'Status', + filterFn: 'equalsString', + enableColumnFilter: true, + cell: ({ + row + }) => + {toPascalCase(row.original.status)} + + }), columnHelper.accessor('createdAt', { + header: 'Created At' + }), columnHelper.accessor('expiresAt', { + header: 'Expires At' + }), columnHelper.accessor('region', { + header: 'Region', + filterFn: 'equalsString', + enableColumnFilter: true, + cell: ({ + row + }) => + {row.original.region} + + }), { + header: 'Actions', + cell: ({ + row + }) =>
    + + + +
    + }]; + const [data, setData] = useState(() => [...apiClients]); + const [globalFilter, setGlobalFilter] = useState(''); + const [sorting, setSorting] = useState([]); + const [columnFilters, setColumnFilters] = useState([]); + const [pagination, setPagination] = useState({ + pageIndex: 0, + pageSize: 8 + }); + const [selectedRowIds, setSelectedRowIds] = useState({}); + const table = useReactTable({ + data, + columns, + state: { + sorting, + globalFilter, + columnFilters, + pagination, + rowSelection: selectedRowIds + }, + onSortingChange: setSorting, + onGlobalFilterChange: setGlobalFilter, + onColumnFiltersChange: setColumnFilters, + onPaginationChange: setPagination, + onRowSelectionChange: setSelectedRowIds, + getCoreRowModel: getCoreRowModel(), + getSortedRowModel: getSortedRowModel(), + getFilteredRowModel: getFilteredRowModel(), + getPaginationRowModel: getPaginationRowModel(), + globalFilterFn: 'includesString', + enableColumnFilters: true, + enableRowSelection: true + }); + const pageIndex = table.getState().pagination.pageIndex; + const pageSize = table.getState().pagination.pageSize; + const totalItems = table.getFilteredRowModel().rows.length; + const start = pageIndex * pageSize + 1; + const end = Math.min(start + pageSize - 1, totalItems); + const [showDeleteModal, setShowDeleteModal] = useState(false); + const toggleDeleteModal = () => { + setShowDeleteModal(!showDeleteModal); + }; + const handleDelete = () => { + const selectedIds = new Set(Object.keys(selectedRowIds)); + setData(old => old.filter((_, idx) => !selectedIds.has(idx.toString()))); + setSelectedRowIds({}); + setPagination({ + ...pagination, + pageIndex: 0 + }); + setShowDeleteModal(false); + }; + return <> + + + + +
    +
    + setGlobalFilter(e.target.value)} /> + +
    + + {Object.keys(selectedRowIds).length > 0 && } + + + + setShowModal(false)} /> + +
    + +
    + Filter By: + +
    + + +
    + +
    + + +
    + +
    + +
    +
    +
    + + + + {table.getRowModel().rows.length > 0 && + + } + + +
    + +
    + ; +}; +export default ApiKeyTabel; \ No newline at end of file diff --git a/src/views/apps/api-key/components/ApiModal.jsx b/src/views/apps/api-key/components/ApiModal.jsx new file mode 100644 index 0000000..f947ec9 --- /dev/null +++ b/src/views/apps/api-key/components/ApiModal.jsx @@ -0,0 +1,114 @@ +import { Button, Col, Form, FormControl, FormGroup, FormLabel, FormSelect, Modal, ModalBody, ModalFooter, ModalHeader, ModalTitle, Row } from "react-bootstrap"; +import Flatpickr from 'react-flatpickr'; +const ApiModal = ({ + show, + onHide +}) => { + return + + Add New API Key + + +
    + + + + + Client Name + + + + + + + Created By + + + + + + + + + + + + + API Key +
    + + +
    +
    + + + + + Status + + + + + + + + + + + + + Usage Limit + + + + + + + Region + + + + + + + + + + + + + + Created On + + + + + + + Expires On + + + +
    +
    + + + + + +
    +
    ; +}; +export default ApiModal; \ No newline at end of file diff --git a/src/views/apps/api-key/data.js b/src/views/apps/api-key/data.js new file mode 100644 index 0000000..7eb9848 --- /dev/null +++ b/src/views/apps/api-key/data.js @@ -0,0 +1,167 @@ +import user2 from '@/assets/images/users/user-2.jpg'; +import user3 from '@/assets/images/users/user-3.jpg'; +import user4 from '@/assets/images/users/user-4.jpg'; +import user5 from '@/assets/images/users/user-5.jpg'; +import user6 from '@/assets/images/users/user-6.jpg'; +import user7 from '@/assets/images/users/user-7.jpg'; +import user8 from '@/assets/images/users/user-8.jpg'; +import user9 from '@/assets/images/users/user-9.jpg'; +import auFlag from '@/assets/images/flags/au.svg'; +import caFlag from '@/assets/images/flags/ca.svg'; +import deFlag from '@/assets/images/flags/de.svg'; +import frFlag from '@/assets/images/flags/fr.svg'; +import gbFlag from '@/assets/images/flags/gb.svg'; +import inFlag from '@/assets/images/flags/in.svg'; +import usFlag from '@/assets/images/flags/us.svg'; +import { getColor } from '@/helpers/color'; +import { TbAlertTriangle, TbChecks, TbCodeDots, TbServer2 } from 'react-icons/tb'; +const sparklineConfig = (data, color) => ({ + chart: { + type: 'area', + height: 60, + sparkline: { + enabled: true + } + }, + stroke: { + curve: 'smooth', + width: 2 + }, + series: [{ + data + }], + colors: [color], + tooltip: { + enabled: false + } +}); +const dummyNewUsers = [Math.sin(0) * 50 + 500, Math.sin(1) * 60 + 500, Math.sin(2) * 70 + 500, Math.sin(3) * 80 + 500, Math.sin(4) * 90 + 500, Math.sin(5) * 100 + 500, Math.sin(6) * 110 + 500]; +const dummyActiveUsers = [89000 + Math.sin(0) * 500, 89200 + Math.sin(1) * 600, 89700 + Math.sin(2) * 700, 90500 + Math.sin(3) * 800, 91000 + Math.sin(4) * 900, 91300 + Math.sin(5) * 1000, 92000 + Math.sin(6) * 1100]; +const dummyBlockedUsers = [2600 + Math.sin(0) * 10, 2605 + Math.sin(1) * 12, 2610 + Math.sin(2) * 15, 2608 + Math.sin(3) * 18, 2612 + Math.sin(4) * 20]; +const dummyTables = [7000 + Math.sin(0) * 150, 7100 + Math.sin(1) * 160, 7200 + Math.sin(2) * 170, 7400 + Math.sin(3) * 180, 7850 + Math.sin(4) * 200]; +export const apiStatistics = [{ + title: 'Total API Calls', + value: '1,254,300', + icon: TbServer2, + variant: 'success', + chartOptions: () => sparklineConfig(dummyNewUsers, getColor('secondary')) +}, { + title: 'Successful Conversions', + value: '1,192,450', + icon: TbChecks, + variant: 'success', + chartOptions: () => sparklineConfig(dummyActiveUsers, getColor('warning')) +}, { + title: 'Failed Requests', + value: '61,850', + icon: TbAlertTriangle, + variant: 'danger', + chartOptions: () => sparklineConfig(dummyBlockedUsers, getColor('info')) +}, { + title: 'Active Endpoints', + value: '143', + icon: TbCodeDots, + variant: 'info', + chartOptions: () => sparklineConfig(dummyTables, getColor('danger')) +}]; +export const apiClients = [{ + name: 'APINexus', + author: 'Mark Reynolds', + image: user2, + apiKey: 'e4A7Fc98z120XYz776abc90MNZ', + status: 'pending', + createdAt: 'Jan 10, 2025', + expiresAt: 'Nov 15, 2025', + region: 'DE', + regionFlag: deFlag +}, { + name: 'DataPulse', + author: 'Sophia Turner', + image: user4, + apiKey: '9BcD456Xy78LmN0zPQR12sA3Z', + status: 'revoked', + createdAt: 'Mar 5, 2025', + expiresAt: 'Aug 20, 2025', + region: 'UK', + regionFlag: gbFlag +}, { + name: 'AuthKit', + author: 'Liam Watson', + image: user5, + apiKey: 'ZZ99xC8K23Fm10TyPLqZa17d', + status: 'active', + createdAt: 'Apr 22, 2025', + expiresAt: 'Dec 31, 2025', + region: 'IN', + regionFlag: inFlag +}, { + name: 'APIxEdge', + author: 'Ava Turner', + image: user2, + apiKey: 'XY91kLpB42Ga98WxRTzEe55n', + status: 'pending', + createdAt: 'Apr 10, 2025', + expiresAt: 'Oct 10, 2025', + region: 'US', + regionFlag: usFlag +}, { + name: 'DataLinker', + author: 'Noah Reed', + image: user7, + apiKey: 'BB22zWqT65Op90VxMLaRt18c', + status: 'suspended', + createdAt: 'Mar 15, 2025', + expiresAt: 'Sep 15, 2025', + region: 'DE', + regionFlag: deFlag +}, { + name: 'WebhookMate', + author: 'Sophia Lee', + image: user3, + apiKey: 'RM19yUlP75Kl44YvNJdHg09s', + status: 'active', + createdAt: 'Jan 01, 2025', + expiresAt: 'Dec 31, 2025', + region: 'UK', + regionFlag: gbFlag +}, { + name: 'DevPortal', + author: 'Mason Clark', + image: user4, + apiKey: 'AA47qBcJ61Tr77WpKKzTy39k', + status: 'trial', + createdAt: 'Feb 01, 2025', + expiresAt: 'May 01, 2025', + region: 'AU', + regionFlag: auFlag +}, { + name: 'NotifyX', + author: 'Ella James', + image: user6, + apiKey: 'ZP83mXcD28Uv11MtYYoXx03b', + status: 'active', + createdAt: 'Apr 01, 2025', + expiresAt: 'Jan 01, 2026', + region: 'CA', + regionFlag: caFlag +}, { + name: 'TokenVault', + author: 'Lucas Hill', + image: user8, + apiKey: 'LK35yTrF82Lo99UiSSpPr47x', + status: 'expired', + createdAt: 'Jul 15, 2024', + expiresAt: 'Jan 15, 2025', + region: 'FR', + regionFlag: frFlag +}, { + name: 'StreamAPI', + author: 'Mia Bennett', + image: user9, + apiKey: 'DW64aUvQ11Gh32PpDDjWw72t', + status: 'active', + createdAt: 'Mar 05, 2025', + expiresAt: 'Dec 05, 2025', + region: 'IN', + regionFlag: inFlag +}]; \ No newline at end of file diff --git a/src/views/apps/api-key/index.jsx b/src/views/apps/api-key/index.jsx new file mode 100644 index 0000000..fc75c3a --- /dev/null +++ b/src/views/apps/api-key/index.jsx @@ -0,0 +1,10 @@ +import PageBreadcrumb from '@/components/PageBreadcrumb'; +import { Container } from 'react-bootstrap'; +import ApiKeyTabel from './components/ApiKeyTabel'; +const Index = () => { + return + + + ; +}; +export default Index; \ No newline at end of file diff --git a/src/views/apps/calendar/components/AddEditModal.jsx b/src/views/apps/calendar/components/AddEditModal.jsx new file mode 100644 index 0000000..4f76676 --- /dev/null +++ b/src/views/apps/calendar/components/AddEditModal.jsx @@ -0,0 +1,100 @@ +import { yupResolver } from '@hookform/resolvers/yup'; +import { useEffect } from 'react'; +import { Button, Col, Form, FormControl, FormGroup, FormLabel, FormSelect, Modal, ModalBody, ModalHeader, ModalTitle, Row } from 'react-bootstrap'; +import Feedback from 'react-bootstrap/Feedback'; +import { useForm } from 'react-hook-form'; +import * as yup from 'yup'; +const AddEditModal = ({ + eventData, + isEditable, + onAddEvent, + onRemoveEvent, + onUpdateEvent, + open, + toggle +}) => { + const schema = yup.object({ + title: yup.string().required('Please provide a valid event name'), + category: yup.string().required('Please select a valid event category') + }); + const { + handleSubmit, + setValue, + reset, + register, + formState: { + errors + } + } = useForm({ + resolver: yupResolver(schema) + }); + const onSubmitEvent = data => { + if (isEditable) { + onUpdateEvent(data); + } else { + onAddEvent(data); + } + }; + useEffect(() => { + if (eventData?.title) { + setValue('title', String(eventData.title)); + setValue('category', String(eventData.className)); + console.log(eventData.className); + } + }, [eventData]); + useEffect(() => { + if (!open) reset(); + }, [open]); + return +
    + + {isEditable ? 'Edit' : 'Create'} Event + + + + + + + Event Name + + {errors.title?.message} + + + + + Category + + + + + + + + + + + {errors.category?.message} + + + + +
    + {isEditable && } + + + + +
    +
    +
    +
    ; +}; +export default AddEditModal; \ No newline at end of file diff --git a/src/views/apps/calendar/index.jsx b/src/views/apps/calendar/index.jsx new file mode 100644 index 0000000..718b489 --- /dev/null +++ b/src/views/apps/calendar/index.jsx @@ -0,0 +1,134 @@ +import AddEditModal from '@/views/apps/calendar/components/AddEditModal'; +import PageBreadcrumb from '@/components/PageBreadcrumb'; +import { useEffect, useRef } from 'react'; +import { Button, Card, CardBody, Container } from 'react-bootstrap'; +import dayGridPlugin from '@fullcalendar/daygrid'; +import interactionPlugin, { Draggable } from '@fullcalendar/interaction'; +import listPlugin from '@fullcalendar/list'; +import FullCalendar from '@fullcalendar/react'; +import timeGridPlugin from '@fullcalendar/timegrid'; +import useCalendar from '@/hooks/useCalendar'; +import useViewPort from '@/hooks/useViewPort'; +import { TbCircleFilled, TbPlus } from 'react-icons/tb'; +import SimpleBar from "simplebar-react"; +const externalEvents = [{ + id: '11', + title: 'Design Review', + variant: 'primary' +}, { + id: '12', + title: 'Marketing Strategy', + variant: 'secondary' +}, { + id: '13', + title: 'Sales Demo', + variant: 'success' +}, { + id: '14', + title: 'Deadline Submission', + variant: 'danger' +}, { + id: '15', + title: 'Training Session', + variant: 'info' +}, { + id: '16', + title: 'Budget Review', + variant: 'warning' +}, { + id: '17', + title: 'Board Meeting', + variant: 'dark' +}]; +const Index = () => { + const { + createNewEvent, + eventData, + events, + isEditable, + onAddEvent, + onCloseModal, + onDateClick, + onDrop, + onEventClick, + onEventDrop, + onRemoveEvent, + onUpdateEvent, + show + } = useCalendar(); + const { + height + } = useViewPort(); + const externalEventsEle = useRef(null); + const draggableInstance = useRef(null); + useEffect(() => { + if (externalEventsEle.current) { + draggableInstance.current = new Draggable(externalEventsEle.current, { + itemSelector: '.external-event', + eventData: function (eventEl) { + return { + title: eventEl.innerText, + classNames: eventEl.getAttribute('data-class') + }; + } + }); + } + return () => { + if (draggableInstance.current) { + draggableInstance.current.destroy(); + } + }; + }, []); + return + + +
    + + + + +
    +

    Drag and drop your event or click in the calendar

    + {externalEvents.map(event =>
    + + {event.title} +
    )} +
    +
    +
    + + +
    + +
    + + + + +
    +
    + + +
    ; +}; +export default Index; \ No newline at end of file diff --git a/src/views/apps/chat/components/ContactList.jsx b/src/views/apps/chat/components/ContactList.jsx new file mode 100644 index 0000000..07d7eea --- /dev/null +++ b/src/views/apps/chat/components/ContactList.jsx @@ -0,0 +1,53 @@ +import { useState } from 'react'; +import { Button, Card, CardHeader, FormControl, ListGroup, ListGroupItem } from 'react-bootstrap'; +import { LuSearch } from 'react-icons/lu'; +import { TbPencilPlus } from 'react-icons/tb'; +import SimpleBar from "simplebar-react"; +const ContactList = ({ + contacts, + setContact +}) => { + const [currentContact, setCurrentContact] = useState(contacts[0]); + const [searchTerm, setSearchTerm] = useState(''); + + // filter contacts by name or lastMessage + const filteredContacts = contacts.filter(contact => contact.name.toLowerCase().includes(searchTerm.toLowerCase()) || (contact.lastMessage?.toLowerCase().includes(searchTerm.toLowerCase()) ?? false)); + return + +
    +
    + setSearchTerm(e.target.value)} /> + +
    + +
    +
    + + + {filteredContacts.map(contact => { + setContact(contact); + setCurrentContact(contact); + }}> + + + {contact.avatar ? : {contact.name.charAt(0).toUpperCase()}} + + + {contact.name} + {contact.lastMessage && {contact.lastMessage}} + + + + {contact.timestamp && {contact.timestamp}} + {contact.unreadMessages && {contact.unreadMessages}} + + )} + + +
    ; +}; +export default ContactList; \ No newline at end of file diff --git a/src/views/apps/chat/data.js b/src/views/apps/chat/data.js new file mode 100644 index 0000000..093cd5d --- /dev/null +++ b/src/views/apps/chat/data.js @@ -0,0 +1,455 @@ +import user10 from '@/assets/images/users/user-10.jpg'; +import user2 from '@/assets/images/users/user-2.jpg'; +import user3 from '@/assets/images/users/user-3.jpg'; +import user4 from '@/assets/images/users/user-4.jpg'; +import user5 from '@/assets/images/users/user-5.jpg'; +import user6 from '@/assets/images/users/user-6.jpg'; +import user7 from '@/assets/images/users/user-7.jpg'; +import user8 from '@/assets/images/users/user-8.jpg'; +import user9 from '@/assets/images/users/user-9.jpg'; +export const currentUser = { + id: 'u0', + name: 'John Doe', + avatar: user2, + isOnline: true +}; +export const contacts = [{ + id: 'u1', + name: 'Ava Thompson', + avatar: user4, + lastMessage: "I'll send the invoice by evening. Please check and confirm.", + timestamp: 'Just Now', + unreadMessages: 2, + isOnline: false +}, { + id: 'u2', + name: 'Noah Smith', + avatar: user5, + lastMessage: 'Can you check the shared doc? Added some feedback.', + timestamp: '5 Min', + unreadMessages: 1, + isOnline: true +}, { + id: 'u3', + name: 'Liam Johnson', + avatar: user7, + lastMessage: 'Please approve the design so we can move to development.', + timestamp: '3:45 PM', + isOnline: false +}, { + id: 'u4', + name: 'Emma Wilson', + lastMessage: 'All tasks are completed. Do you want me to deploy?', + timestamp: '2 hr', + isOnline: true +}, { + id: 'u5', + name: 'Olivia Martinez', + avatar: user8, + lastMessage: 'Meeting rescheduled to Friday at 11 AM.', + timestamp: '4 hr', + isOnline: false +}, { + id: 'u6', + name: 'William Davis', + lastMessage: "I'm working on the bug fix, will update soon.", + timestamp: 'Yesterday', + unreadMessages: 3, + isOnline: true +}, { + id: 'u7', + name: 'Sophia Moore', + avatar: user10, + lastMessage: 'Final draft is ready. Let me know your thoughts.', + timestamp: 'Yesterday', + isOnline: false +}, { + id: 'u8', + name: 'Jackson Lee', + avatar: user2, + lastMessage: "I've uploaded the assets. Please review them tonight.", + timestamp: '12 Jun', + isOnline: true +}, { + id: 'u9', + name: 'Chloe Anderson', + avatar: user3, + lastMessage: 'Need your approval before pushing this live.', + timestamp: '10 Jun', + isOnline: false +}, { + id: 'u10', + name: 'Lucas Wright', + lastMessage: 'Client call moved to tomorrow. Will share notes later.', + timestamp: '9 May', + isOnline: false +}, { + id: 'u11', + name: 'Mia Scott', + avatar: user6, + lastMessage: 'Everything looks good. Waiting for your go-ahead.', + timestamp: '13 Apr', + isOnline: false +}, { + id: 'u12', + name: 'Benjamin Clark', + avatar: user9, + lastMessage: 'Checked your updates. Left a few suggestions.', + timestamp: '10 Mar', + unreadMessages: 2, + isOnline: false +}]; +export const messageThreads = [{ + id: 't1', + participants: [contacts[0], currentUser], + messages: [{ + id: 'm1', + senderId: contacts[0].id, + text: 'Hey! Are you available for a quick call? 📞', + time: '08:55 am' + }, { + id: 'm2', + senderId: currentUser.id, + text: 'Sure, give me 5 minutes. Just wrapping something up.', + time: '08:57 am' + }, { + id: 'm3', + senderId: contacts[0].id, + text: "Perfect. Let me know when you're ready 👍", + time: '08:58 am' + }, { + id: 'm4', + senderId: currentUser.id, + text: 'Ready now. Calling you!', + time: '09:00 am' + }, { + id: 'm5', + senderId: contacts[0].id, + text: 'Thanks for your time earlier!', + time: '09:45 am' + }, { + id: 'm6', + senderId: currentUser.id, + text: 'Of course! It was a productive discussion.', + time: '09:46 am' + }, { + id: 'm7', + senderId: contacts[0].id, + text: 'I’ll send over the updated files by noon.', + time: '09:50 am' + }, { + id: 'm8', + senderId: currentUser.id, + text: 'Great, I’ll review them once they arrive.', + time: '09:52 am' + }, { + id: 'm9', + senderId: contacts[0].id, + text: 'Just sent them via Drive. Let me know if you have issues accessing.', + time: '12:03 pm' + }, { + id: 'm10', + senderId: currentUser.id, + text: 'Got them. Everything looks good so far!', + time: '12:10 pm' + }, { + id: 'm11', + senderId: contacts[0].id, + text: 'Awesome 😊 Looking forward to your feedback!', + time: '12:12 pm' + }, { + id: 'm12', + senderId: currentUser.id, + text: 'Will get back to you after lunch 🍴', + time: '12:13 pm' + }, { + id: 'm13', + senderId: contacts[0].id, + text: 'No rush, enjoy your lunch! 😄', + time: '12:14 pm' + }, { + id: 'm14', + senderId: currentUser.id, + text: 'Thanks! Talk soon.', + time: '12:15 pm' + }] +}, { + id: 't2', + participants: [contacts[1], currentUser], + messages: [{ + id: 'm15', + senderId: contacts[1].id, + text: 'Hey! Are you available for a quick call? 📞', + time: '08:55 am' + }, { + id: 'm16', + senderId: currentUser.id, + text: 'Sure, give me 5 minutes. Just wrapping something up.', + time: '08:57 am' + }, { + id: 'm17', + senderId: contacts[1].id, + text: 'Hey, quick question—did you check the latest design mockups?', + time: '10:05 am' + }, { + id: 'm18', + senderId: currentUser.id, + text: 'Not yet, just logging in now. Want me to prioritize that?', + time: '10:06 am' + }, { + id: 'm19', + senderId: contacts[1].id, + text: 'Yes please. I need your feedback before the client review at noon.', + time: '10:07 am' + }, { + id: 'm20', + senderId: currentUser.id, + text: 'Got it. I’ll go through them and send notes in a bit.', + time: '10:08 am' + }, { + id: 'm21', + senderId: contacts[1].id, + text: 'Thanks a ton!', + time: '10:08 am' + }, { + id: 'm22', + senderId: currentUser.id, + text: 'First impression: very clean. Minor spacing issues though.', + time: '10:20 am' + }, { + id: 'm23', + senderId: contacts[1].id, + text: 'Noted. Fixing those now.', + time: '10:21 am' + }, { + id: 'm24', + senderId: currentUser.id, + text: 'Sent detailed feedback via email too 📬', + time: '10:25 am' + }, { + id: 'm25', + senderId: contacts[1].id, + text: 'Got it. Appreciate the quick turnaround!', + time: '10:26 am' + }] +}, { + id: 't3', + participants: [contacts[2], currentUser], + messages: [{ + id: 'm26', + senderId: contacts[2].id, + text: 'Morning! Did you update the backend endpoints yet?', + time: '09:15 am' + }, { + id: 'm27', + senderId: currentUser.id, + text: 'Morning! Just pushed the changes to dev branch.', + time: '09:16 am' + }, { + id: 'm28', + senderId: contacts[2].id, + text: 'Awesome, I’ll pull and test on my side.', + time: '09:17 am' + }, { + id: 'm29', + senderId: currentUser.id, + text: 'Let me know if anything breaks ⚠️', + time: '09:18 am' + }, { + id: 'm30', + senderId: contacts[2].id, + text: 'Looks good so far. Just one CORS error.', + time: '09:20 am' + }, { + id: 'm31', + senderId: currentUser.id, + text: 'Ah, forgot the whitelist entry. Fixing now.', + time: '09:21 am' + }, { + id: 'm32', + senderId: contacts[2].id, + text: "Reloaded… and it's working. All green ✅", + time: '09:23 am' + }, { + id: 'm33', + senderId: currentUser.id, + text: 'Nice! That wraps our side for this sprint then?', + time: '09:24 am' + }, { + id: 'm34', + senderId: contacts[2].id, + text: 'Yep. Good work 💪', + time: '09:25 am' + }] +}, { + id: 't4', + participants: [contacts[3], currentUser], + messages: [{ + id: 'm35', + senderId: contacts[3].id, + text: 'Please verify if the new changes reflect correctly.', + time: '10:15 am' + }, { + id: 'm36', + senderId: currentUser.id, + text: 'Yes, they’re showing now. Looks good.', + time: '10:22 am' + }, { + id: 'm37', + senderId: contacts[3].id, + text: 'Cool. I’ll push to staging then.', + time: '10:30 am' + }] +}, { + id: 't5', + participants: [contacts[4], currentUser], + messages: [{ + id: 'm38', + senderId: contacts[4].id, + text: 'Want to sync on the timeline tomorrow morning?', + time: '11:00 am' + }, { + id: 'm39', + senderId: currentUser.id, + text: 'Yes, let’s do 10:30 AM.', + time: '11:02 am' + }, { + id: 'm40', + senderId: contacts[4].id, + text: 'Perfect, see you then.', + time: '11:03 am' + }] +}, { + id: 't6', + participants: [contacts[5], currentUser], + messages: [{ + id: 'm41', + senderId: contacts[5].id, + text: 'I’ll create a ticket for the API timeout issue.', + time: '11:30 am' + }, { + id: 'm42', + senderId: currentUser.id, + text: 'Great, assign it to me once ready.', + time: '11:35 am' + }, { + id: 'm43', + senderId: contacts[5].id, + text: 'Done. Ticket #4582.', + time: '11:38 am' + }] +}, { + id: 't7', + participants: [contacts[6], currentUser], + messages: [{ + id: 'm44', + senderId: contacts[6].id, + text: 'We need to revise the Figma design per feedback.', + time: '12:15 pm' + }, { + id: 'm45', + senderId: currentUser.id, + text: 'I’ll start on that after lunch.', + time: '12:18 pm' + }, { + id: 'm46', + senderId: contacts[6].id, + text: 'Cool. I’ll update the Jira board.', + time: '12:20 pm' + }] +}, { + id: 't8', + participants: [contacts[7], currentUser], + messages: [{ + id: 'm47', + senderId: contacts[7].id, + text: 'Make sure to sanitize the inputs in that form.', + time: '01:05 pm' + }, { + id: 'm48', + senderId: currentUser.id, + text: 'Yup, I’ll add validations today.', + time: '01:06 pm' + }, { + id: 'm49', + senderId: contacts[7].id, + text: 'Awesome. Thanks!', + time: '01:07 pm' + }] +}, { + id: 't9', + participants: [contacts[8], currentUser], + messages: [{ + id: 'm50', + senderId: contacts[8].id, + text: 'Can you send the report again? The link was broken.', + time: '02:05 pm' + }, { + id: 'm51', + senderId: currentUser.id, + text: 'Sure, just sent it on email.', + time: '02:07 pm' + }, { + id: 'm52', + senderId: contacts[8].id, + text: 'Got it. All good now.', + time: '02:10 pm' + }] +}, { + id: 't10', + participants: [contacts[9], currentUser], + messages: [{ + id: 'm53', + senderId: contacts[9].id, + text: 'Just pushed a patch to fix that edge case.', + time: '03:00 pm' + }, { + id: 'm54', + senderId: currentUser.id, + text: 'Reviewing now. Will merge if it passes tests.', + time: '03:05 pm' + }, { + id: 'm55', + senderId: contacts[9].id, + text: 'Thanks!', + time: '03:06 pm' + }] +}, { + id: 't11', + participants: [contacts[10], currentUser], + messages: [{ + id: 'm56', + senderId: contacts[10].id, + text: 'Confirmed with the client. No changes needed now.', + time: '03:45 pm' + }, { + id: 'm57', + senderId: currentUser.id, + text: 'That’s good news!', + time: '03:47 pm' + }, { + id: 'm58', + senderId: contacts[10].id, + text: 'Indeed 😄', + time: '03:48 pm' + }] +}, { + id: 't12', + participants: [contacts[11], currentUser], + messages: [{ + id: 'm59', + senderId: contacts[11].id, + text: 'Did you see the update on the dashboard issue?', + time: '04:20 pm' + }, { + id: 'm60', + senderId: currentUser.id, + text: 'Yes, I’ll pull and test now.', + time: '04:22 pm' + }, { + id: 'm61', + senderId: contacts[11].id, + text: 'Let me know if anything breaks.', + time: '04:25 pm' + }] +}]; \ No newline at end of file diff --git a/src/views/apps/chat/index.jsx b/src/views/apps/chat/index.jsx new file mode 100644 index 0000000..3ae3897 --- /dev/null +++ b/src/views/apps/chat/index.jsx @@ -0,0 +1,131 @@ +import ContactList from '@/views/apps/chat/components/ContactList'; +import { contacts, currentUser, messageThreads } from '@/views/apps/chat/data'; +import PageBreadcrumb from '@/components/PageBreadcrumb'; +import { Link } from "react-router"; +import { Fragment, useEffect, useState } from 'react'; +import { Button, Card, CardFooter, CardHeader, Container, Dropdown, DropdownItem, DropdownMenu, DropdownToggle, FormControl, Offcanvas, OverlayTrigger, Tooltip } from 'react-bootstrap'; +import { LuMessageSquare } from 'react-icons/lu'; +import { TbBellOff, TbCircleFilled, TbClock, TbDotsVertical, TbMenu2, TbMessageCircleOff, TbPhone, TbSend2, TbTrash, TbUser, TbVideo } from 'react-icons/tb'; +import SimpleBar from "simplebar-react"; +const Index = () => { + const [show, setShow] = useState(false); + const [currentContact, setCurrentContact] = useState(contacts[0]); + const [currentThread, setCurrentThread] = useState(messageThreads[0]); + useEffect(() => { + const foundThread = messageThreads.find(thread => thread.participants.some(p => p.id === currentContact.id)); + setCurrentThread(foundThread || null); + }, [currentContact]); + return + + +
    + setShow(!show)} className="outlook-left-menu outlook-left-menu-lg"> + + + + + +
    + +
    + +
    +
    + + {currentContact.name} + +
    +

    + {' '} + {currentContact.isOnline ? 'Active' : 'Offline'} +

    +
    + +
    + Video Call}> + + + + Audio Call}> + + + + + + + + + + + View Profile + + + Mute Notifications + + + Delete Chat + + + +
    +
    + + + {currentThread ? currentThread.messages.map(message => + {currentContact.id === message.senderId &&
    + {currentContact.avatar ? User : + {currentContact.name.charAt(0).toUpperCase()} + } +
    +
    {message.text}
    +
    + {message.time} +
    +
    +
    } + + {currentUser.id === message.senderId &&
    +
    +
    {message.text}
    +
    + {message.time} +
    +
    + {currentUser.avatar ? User : + + {currentUser.name.charAt(0).toUpperCase()} + + } +
    } +
    ) :
    + + No messages found. +
    } +
    + + +
    +
    + + +
    + +
    +
    +
    +
    +
    ; +}; +export default Index; \ No newline at end of file diff --git a/src/views/apps/chat/types.js b/src/views/apps/chat/types.js new file mode 100644 index 0000000..8cec2e9 --- /dev/null +++ b/src/views/apps/chat/types.js @@ -0,0 +1 @@ +export {}; \ No newline at end of file diff --git a/src/views/apps/crm/activities/index.jsx b/src/views/apps/crm/activities/index.jsx new file mode 100644 index 0000000..cec7664 --- /dev/null +++ b/src/views/apps/crm/activities/index.jsx @@ -0,0 +1,238 @@ +import PageBreadcrumb from '@/components/PageBreadcrumb'; +import { Link } from "react-router"; +import { Card, CardBody, Col, Container, Row } from 'react-bootstrap'; +import { TbBriefcase, TbCalendarEvent, TbEdit, TbMail, TbMessage, TbPencil, TbPhoneCall, TbStar, TbUserCircle, TbUserPlus, TbX } from 'react-icons/tb'; +const Index = () => { + return + + + + + +
    +
    +
    01 Aug, 2025
    + +
    +
    09:30 AM
    +
    + +
    +
    +

    New lead: + John Carter added to the "Enterprise" pipeline by Sarah Lee.

    +
    + + +
    +
    + Cold Lead + 01 Aug, 2025, 09:30 AM +
    +
    +
    + + +
    +
    10:15 AM
    +
    + +
    +
    +

    Deal created: + Q3 Licensing for John Carter added by Sarah Lee with value $15,000.

    +
    + +
    +
    + High Priority + 01 Aug, 2025, 10:15 AM +
    +
    +
    + + +
    +
    11:45 AM
    +
    + +
    +
    +

    Note added: Client requested a 15-day extension on proposal deadline. Logged by Sarah Lee.

    +
    + +
    +
    + Client Requested + 01 Aug, 2025, 11:45 AM +
    +
    +
    +
    + + +
    +
    31 Jul, 2025
    + +
    +
    03:30 PM
    +
    + +
    +
    +

    Call completed: Follow-up call with Emily Watson to discuss contract renewal.

    +
    + +
    +
    + Follow Up Needed + 31 Jul, 2025, 03:30 PM +
    +
    +
    + + +
    +
    01:00 PM
    +
    + +
    +
    +

    Email: Welcome email with demo link sent to Michael Barnes.

    +
    + +
    +
    + Automated + 31 Jul, 2025, 01:00 PM +
    +
    +
    +
    + + +
    +
    30 Jul, 2025
    + + +
    +
    02:45 PM
    +
    + +
    +
    +

    Demo scheduled: A demo was booked with Linda Rowe for 02 Aug at 4:00 PM. Invite sent with Google Meet link.

    +
    + +
    +
    + Scheduled + 30 Jul, 2025, 02:45 PM +
    +
    +
    + +
    +
    10:00 AM
    +
    + +
    +
    +

    Lead reassigned: Lead Alice Monroe was reassigned from James Parker to Lisa Turner for better regional alignment.

    +
    + Internal + 30 Jul, 2025, 10:00 AM +
    +
    +
    +
    + + +
    +
    29 Jul, 2025
    + + +
    +
    05:30 PM
    +
    + +
    +
    +

    Lead converted: Jacob Wells converted into customer after final proposal approval. Contract sent for signing.

    +
    + +
    +
    + Won + 29 Jul, 2025, 05:30 PM +
    +
    +
    + + +
    +
    11:15 AM
    +
    + +
    +
    +

    Note added: Added post-call notes for Emily Watson. Follow-up set for next week to review proposal edits.

    +
    + Internal Note + 29 Jul, 2025, 11:15 AM +
    +
    +
    +
    + + +
    +
    27 Jul, 2025
    + + +
    +
    03:00 PM
    +
    + +
    +
    +

    Deal lost: Deal IT Revamp - BetaSoft marked as lost due to pricing mismatch. Feedback recorded.

    +
    + +
    +
    + Lost + 27 Jul, 2025, 03:00 PM +
    +
    +
    + +
    +
    09:20 AM
    +
    + +
    +
    +

    Contact info updated: Phone and email updated for Jessica Tran. New contact details logged.

    +
    + Updated + 27 Jul, 2025, 09:20 AM +
    +
    +
    +
    + +
    + +
    + Loading... + +
    + +
    +
    + +
    +
    ; +}; +export default Index; \ No newline at end of file diff --git a/src/views/apps/crm/campaign/components/CampaignCard.jsx b/src/views/apps/crm/campaign/components/CampaignCard.jsx new file mode 100644 index 0000000..e0ed9e8 --- /dev/null +++ b/src/views/apps/crm/campaign/components/CampaignCard.jsx @@ -0,0 +1,49 @@ +import React from 'react'; +import { Card, CardBody, Col, Row } from 'react-bootstrap'; +import { TbArrowDown, TbArrowUp, TbClock, TbCurrencyDollar } from 'react-icons/tb'; +const CampaignCard = () => { + const cards = [{ + value: '11', + change: '+22.2%', + icon: , + desc: 'Total campaigns launched' + }, { + value: '4', + change: '+36.3%', + icon: , + desc: 'Successful campaigns' + }, { + value: '2', + change: '-18.1%', + icon: , + desc: 'Failed campaigns' + }, { + value: '$85,000', + change: 'Top value', + icon: , + desc: 'Highest campaign budget' + }, { + value: <> + 5,7 days + , + change: '+1.4%', + icon: , + desc: 'Avg. campaign duration' + }]; + return + {cards.map((card, index) => + + +
    +
    {card.value}
    + + {card.change} {card.icon} + +
    +

    {card.desc}

    +
    +
    + )} +
    ; +}; +export default CampaignCard; \ No newline at end of file diff --git a/src/views/apps/crm/campaign/components/CampaignModal.jsx b/src/views/apps/crm/campaign/components/CampaignModal.jsx new file mode 100644 index 0000000..dea4095 --- /dev/null +++ b/src/views/apps/crm/campaign/components/CampaignModal.jsx @@ -0,0 +1,105 @@ +import { Button, Col, Form, FormControl, FormGroup, FormLabel, Modal, ModalBody, ModalFooter, ModalHeader, ModalTitle, Row } from "react-bootstrap"; +import FlatPicker from 'react-flatpickr'; +const CampaignModal = ({ + show, + onHide +}) => { + return + + Create New Campaign + + +
    + + + + + + Campaign Name + + + + + + + + Creator + + + + + + + + Budget (USD) + + + + + + + + Goal (USD) + + + + + + + + Status + + + + + + + + + + + + + + + Tags + + + + + + + + Launch Date + + + + + + + + Launch Time + + + + + + + + + + + +
    +
    ; +}; +export default CampaignModal; \ No newline at end of file diff --git a/src/views/apps/crm/campaign/components/CampaignTable.jsx b/src/views/apps/crm/campaign/components/CampaignTable.jsx new file mode 100644 index 0000000..9b56ccc --- /dev/null +++ b/src/views/apps/crm/campaign/components/CampaignTable.jsx @@ -0,0 +1,194 @@ +import { createColumnHelper, getCoreRowModel, getFilteredRowModel, getPaginationRowModel, getSortedRowModel, useReactTable } from '@tanstack/react-table'; +import { useState } from 'react'; +import { Button, Card, CardFooter, CardHeader } from 'react-bootstrap'; +import { LuDollarSign, LuSearch, LuShuffle } from 'react-icons/lu'; +import { TbEdit, TbEye, TbPlus, TbTrash } from 'react-icons/tb'; +import DataTable from '@/components/table/DataTable'; +import DeleteConfirmationModal from '@/components/table/DeleteConfirmationModal'; +import TablePagination from '@/components/table/TablePagination'; +import { campaigns } from '../data'; +import CampaignModal from './CampaignModal'; +const columnHelper = createColumnHelper(); +const CampaignTable = () => { + const [showModal, setShowModal] = useState(false); + const columns = [{ + id: 'select', + header: ({ + table + }) => , + cell: ({ + row + }) => , + enableSorting: false, + enableColumnFilter: false + }, columnHelper.accessor('name', { + header: 'Camaping name' + }), columnHelper.accessor('creator', { + header: 'creator', + cell: ({ + row + }) =>
    + {row.original.creator.name} + {row.original.creator.name} +
    + }), columnHelper.accessor('budget', { + header: 'budget' + }), columnHelper.accessor('goals', { + header: 'goals' + }), columnHelper.accessor('status', { + header: 'Status', + cell: ({ + row + }) => { + const color = row.original.status === 'In Progress' ? 'bg-warning-subtle text-warning' : row.original.status === 'Success' ? 'bg-success-subtle text-success' : row.original.status === 'Scheduled' ? 'bg-info-subtle text-info' : row.original.status === 'Failed' ? 'bg-danger-subtle text-danger' : 'bg-primary-subtle text-primary'; + return {row.original.status}; + } + }), columnHelper.accessor('tags', { + header: 'Tags', + cell: ({ + row + }) =>
    + {row.original.tags.map((tag, index) => + {tag} + )} +
    + }), columnHelper.accessor('dateCreated', { + header: 'Date Created', + cell: ({ + row + }) => <> + {row.original.dateCreated} {row.original.dateCreatedTime} + + }), { + header: 'Actions', + cell: ({ + row + }) =>
    + + + +
    + }]; + const [data, setData] = useState(() => [...campaigns]); + const [globalFilter, setGlobalFilter] = useState(''); + const [sorting, setSorting] = useState([]); + const [pagination, setPagination] = useState({ + pageIndex: 0, + pageSize: 8 + }); + const [selectedRowIds, setSelectedRowIds] = useState({}); + const table = useReactTable({ + data, + columns, + state: { + sorting, + globalFilter, + pagination, + rowSelection: selectedRowIds + }, + onSortingChange: setSorting, + onGlobalFilterChange: setGlobalFilter, + onPaginationChange: setPagination, + onRowSelectionChange: setSelectedRowIds, + getCoreRowModel: getCoreRowModel(), + getSortedRowModel: getSortedRowModel(), + getFilteredRowModel: getFilteredRowModel(), + getPaginationRowModel: getPaginationRowModel(), + globalFilterFn: 'includesString', + enableColumnFilters: true, + enableRowSelection: true + }); + const pageIndex = table.getState().pagination.pageIndex; + const pageSize = table.getState().pagination.pageSize; + const totalItems = table.getFilteredRowModel().rows.length; + const start = pageIndex * pageSize + 1; + const end = Math.min(start + pageSize - 1, totalItems); + const [showDeleteModal, setShowDeleteModal] = useState(false); + const toggleDeleteModal = () => { + setShowDeleteModal(!showDeleteModal); + }; + const handleDelete = () => { + const selectedIds = new Set(Object.keys(selectedRowIds)); + setData(old => old.filter((_, idx) => !selectedIds.has(idx.toString()))); + setSelectedRowIds({}); + setPagination({ + ...pagination, + pageIndex: 0 + }); + setShowDeleteModal(false); + }; + return + +
    +
    + setGlobalFilter(e.target.value)} /> + +
    + + {Object.keys(selectedRowIds).length > 0 && } + + + setShowModal(false)} /> +
    + +
    + Filter By: + +
    + + +
    + +
    + + +
    + +
    + +
    +
    +
    + + + {table.getRowModel().rows.length > 0 && + + } + + +
    ; +}; +export default CampaignTable; \ No newline at end of file diff --git a/src/views/apps/crm/campaign/data.js b/src/views/apps/crm/campaign/data.js new file mode 100644 index 0000000..8acefdc --- /dev/null +++ b/src/views/apps/crm/campaign/data.js @@ -0,0 +1,153 @@ +import user1 from '@/assets/images/users/user-1.jpg'; +import user2 from '@/assets/images/users/user-2.jpg'; +import user3 from '@/assets/images/users/user-3.jpg'; +import user4 from '@/assets/images/users/user-4.jpg'; +import user5 from '@/assets/images/users/user-5.jpg'; +import user7 from '@/assets/images/users/user-7.jpg'; +import user8 from '@/assets/images/users/user-8.jpg'; +import user9 from '@/assets/images/users/user-9.jpg'; +import user10 from '@/assets/images/users/user-10.jpg'; +export const campaigns = [{ + id: '1', + name: 'Q4 Lead Nurture Campaign', + creator: { + name: 'Jason Miller', + avatar: user5 + }, + budget: '$12,500', + goals: '$80,000', + status: 'In Progress', + tags: ['Email', 'Retargeting', 'Automation'], + dateCreated: '21 Aug, 2025', + dateCreatedTime: '2:45 PM' +}, { + id: '2', + name: 'Holiday Flash Sale', + creator: { + name: 'Sandra Walton', + avatar: user7 + }, + budget: '$6,000', + goals: '$30,000', + status: 'Success', + tags: ['Seasonal', 'SMS'], + dateCreated: '05 Dec, 2024', + dateCreatedTime: '11:00 AM' +}, { + id: '3', + name: 'Product Launch Webinar', + creator: { + name: 'Derek Kim', + avatar: user4 + }, + budget: '$10,000', + goals: '$65,000', + status: 'Scheduled', + tags: ['Webinar', 'Leads'], + dateCreated: '01 Sep, 2025', + dateCreatedTime: '9:15 AM' +}, { + id: '4', + name: 'Back-to-School Promo', + creator: { + name: 'Ava Nguyen', + avatar: user8 + }, + budget: '$4,800', + goals: '$25,000', + status: 'Failed', + tags: ['Email', 'Discount'], + dateCreated: '15 Jul, 2025', + dateCreatedTime: '4:30 PM' +}, { + id: '5', + name: 'Spring Email Blast', + creator: { + name: 'Ryan Patel', + avatar: user3 + }, + budget: '$7,200', + goals: '$40,000', + status: 'Success', + tags: ['Newsletter', 'Organic'], + dateCreated: '18 Mar, 2025', + dateCreatedTime: '1:00 PM' +}, { + id: '6', + name: 'Customer Loyalty Program', + creator: { + name: 'Lily Chen', + avatar: user2 + }, + budget: '$9,500', + goals: '$70,000', + status: 'Ongoing', + tags: ['Rewards', 'Customer Retention'], + dateCreated: '28 Aug, 2025', + dateCreatedTime: '10:00 AM' +}, { + id: '7', + name: 'Referral Boost Campaign', + creator: { + name: 'Noah Brooks', + avatar: user9 + }, + budget: '$5,000', + goals: '$20,000', + status: 'Success', + tags: ['Referral', 'Growth'], + dateCreated: '04 Jun, 2025', + dateCreatedTime: '9:00 AM' +}, { + id: '8', + name: 'App Download Drive', + creator: { + name: 'Sophia Lee', + avatar: user10 + }, + budget: '$3,200', + goals: '$15,000', + status: 'In Progress', + tags: ['Mobile', 'Ads'], + dateCreated: '12 Aug, 2025', + dateCreatedTime: '3:15 PM' +}, { + id: '9', + name: 'Abandoned Cart Recovery', + creator: { + name: 'Lucas Green', + avatar: user1 + }, + budget: '$2,000', + goals: '$12,000', + status: 'Failed', + tags: ['Email', 'Recovery'], + dateCreated: '29 Jul, 2025', + dateCreatedTime: '5:50 PM' +}, { + id: '10', + name: 'Local Awareness Campaign', + creator: { + name: 'Isabella Ray', + avatar: user2 + }, + budget: '$4,700', + goals: '$28,000', + status: 'Scheduled', + tags: ['Geo Targeting', 'Brand'], + dateCreated: '02 Sep, 2025', + dateCreatedTime: '8:10 AM' +}, { + id: '11', + name: 'Video Ad Campaign', + creator: { + name: 'Leo White', + avatar: user3 + }, + budget: '$9,900', + goals: '$55,000', + status: 'Ongoing', + tags: ['YouTube', 'Video'], + dateCreated: '14 Aug, 2025', + dateCreatedTime: '12:00 PM' +}]; \ No newline at end of file diff --git a/src/views/apps/crm/campaign/index.jsx b/src/views/apps/crm/campaign/index.jsx new file mode 100644 index 0000000..4c6f695 --- /dev/null +++ b/src/views/apps/crm/campaign/index.jsx @@ -0,0 +1,16 @@ +import PageBreadcrumb from '@/components/PageBreadcrumb'; +import { Col, Container, Row } from 'react-bootstrap'; +import CampaignCard from './components/CampaignCard'; +import CampaignTable from './components/CampaignTable'; +const Index = () => { + return + + + + + + + + ; +}; +export default Index; \ No newline at end of file diff --git a/src/views/apps/crm/contacts/index.jsx b/src/views/apps/crm/contacts/index.jsx new file mode 100644 index 0000000..f5694e9 --- /dev/null +++ b/src/views/apps/crm/contacts/index.jsx @@ -0,0 +1,132 @@ +import PageBreadcrumb from '@/components/PageBreadcrumb'; +import { Card, CardBody, CardFooter, Col, Container, Row } from 'react-bootstrap'; +import { contacts } from '@/views/apps/crm/data'; +import { generateInitials } from '@/helpers/casing'; +import { Link } from "react-router"; +import { TbMail, TbPhone } from 'react-icons/tb'; +const ContactCard = ({ + item +}) => { + const { + stats, + avatar, + label, + email, + name, + categories, + phone, + description + } = item; + return + + {avatar ? avatar :
    + {generateInitials(name)} +
    } + +
    +
    +
    + + {name} + +
    + {label.text} +
    +

    {description}

    + +
    +
    +
    + + + +
    +
    + + {email} + +
    +
    +
    +
    + + + +
    +
    + + {phone} + +
    +
    +
    + +
    + {categories.map((category, idx) => + {category.name} + )} +
    +
    +
    + + + {stats.map((stat, idx) =>
    +
    {stat.prefix || ''}{stat.count}{stat.suffix || ''}
    + {stat.title} +
    )} +
    +
    ; +}; +const Contacts = () => { + return + + + + {contacts.map((item, idx) => + + )} + + +
      +
    • + + + +
    • +
    • + + 1 + +
    • +
    • + + 2 + +
    • +
    • + + 3 + +
    • +
    • + + 4 + +
    • +
    • + + 5 + +
    • +
    • + + + +
    • +
    +
    ; +}; +export default Contacts; \ No newline at end of file diff --git a/src/views/apps/crm/customers/components/CustomerModal.jsx b/src/views/apps/crm/customers/components/CustomerModal.jsx new file mode 100644 index 0000000..a30009f --- /dev/null +++ b/src/views/apps/crm/customers/components/CustomerModal.jsx @@ -0,0 +1,108 @@ +import { Button, Col, Form, FormControl, FormGroup, FormLabel, FormSelect, Modal, ModalBody, ModalFooter, ModalHeader, ModalTitle, Row } from "react-bootstrap"; +import Flatpickr from 'react-flatpickr'; +const CustomerModal = ({ + show, + onHide +}) => { + return + + Add New Customer + + +
    + + + + + Customer Name + + + + + + + Email Address + + + + + + + Phone Number + + + + + + + Company + + + + + + + Country + + + + + + + + + + + + + + + + + + Customer Type + + + + + + + + + + + + Account Status + + + + + + + + + + + + + Joined Date + + + + + + + + + + +
    +
    ; +}; +export default CustomerModal; \ No newline at end of file diff --git a/src/views/apps/crm/customers/data.js b/src/views/apps/crm/customers/data.js new file mode 100644 index 0000000..e837fb1 --- /dev/null +++ b/src/views/apps/crm/customers/data.js @@ -0,0 +1,176 @@ +import user1 from '@/assets/images/users/user-1.jpg'; +import user10 from '@/assets/images/users/user-10.jpg'; +import user2 from '@/assets/images/users/user-2.jpg'; +import user3 from '@/assets/images/users/user-3.jpg'; +import user4 from '@/assets/images/users/user-4.jpg'; +import user5 from '@/assets/images/users/user-5.jpg'; +import user6 from '@/assets/images/users/user-6.jpg'; +import user7 from '@/assets/images/users/user-7.jpg'; +import user8 from '@/assets/images/users/user-8.jpg'; +import user9 from '@/assets/images/users/user-9.jpg'; +import flagBR from '@/assets/images/flags/br.svg'; +import flagCA from '@/assets/images/flags/ca.svg'; +import flagDE from '@/assets/images/flags/de.svg'; +import flagEG from '@/assets/images/flags/eg.svg'; +import flagFR from '@/assets/images/flags/fr.svg'; +import flagUK from '@/assets/images/flags/gb.svg'; +import flagIN from '@/assets/images/flags/in.svg'; +import flagJP from '@/assets/images/flags/jp.svg'; +import flagUS from '@/assets/images/flags/us.svg'; +export const customers = [{ + id: '1', + name: 'Michael Thompson', + email: 'michael@breezetech.com', + avatar: user2, + phone: '+44 7911 123456', + country: 'UK', + countryLabel: 'UK', + countryFlag: flagUK, + joined: 'Jan 15, 2024', + type: 'Lead', + company: 'BreezeTech Ltd.', + status: 'Verification Pending' +}, { + id: '2', + name: 'Sara Mitchell', + email: 'sara@novasoft.io', + avatar: user3, + phone: '+1 (646) 555-7788', + country: 'US', + countryLabel: 'US', + countryFlag: flagUS, + joined: 'Feb 1, 2024', + type: 'Prospect', + company: 'NovaSoft', + status: 'Active' +}, { + id: '3', + name: 'Ravi Deshmukh', + email: 'ravi@infraview.in', + avatar: user4, + phone: '+91 98765 43210', + country: 'IN', + countryLabel: 'IN', + countryFlag: flagIN, + joined: 'Mar 10, 2024', + type: 'Client', + company: 'InfraView Pvt. Ltd.', + status: 'Inactive' +}, { + id: '4', + name: 'Laura Kim', + email: 'laura.kim@pixelhive.co', + avatar: user5, + phone: '+82 10-1234-5678', + country: 'KR', + countryLabel: 'KR', + countryFlag: flagJP, + joined: 'Dec 20, 2023', + type: 'Client', + company: 'PixelHive Co.', + status: 'Blocked' +}, { + id: '5', + name: 'Jean Dupont', + email: 'jean@parispro.fr', + avatar: user6, + phone: '+33 6 12 34 56 78', + country: 'FR', + countryLabel: 'FR', + countryFlag: flagFR, + joined: 'Apr 5, 2024', + type: 'Prospect', + company: 'ParisPro SARL', + status: 'Verification Pending' +}, { + id: '6', + name: 'Amanda Rivera', + email: 'amanda@brightlabs.io', + avatar: user7, + phone: '+1 (213) 555-0192', + country: 'US', + countryLabel: 'US', + countryFlag: flagUS, + joined: 'Mar 25, 2024', + type: 'Client', + company: 'BrightLabs Inc.', + status: 'Active' +}, { + id: '7', + name: 'Carlos Mendes', + email: 'carlos@globalreach.br', + avatar: user8, + phone: '+55 11 91234-5678', + country: 'BR', + countryLabel: 'BR', + countryFlag: flagBR, + joined: 'Feb 18, 2024', + type: 'Prospect', + company: 'GlobalReach Ltd.', + status: 'Verification Pending' +}, { + id: '8', + name: 'Lena Hoffmann', + email: 'lena@webnord.de', + avatar: user9, + phone: '+49 176 12345678', + country: 'DE', + countryLabel: 'DE', + countryFlag: flagDE, + joined: 'Apr 3, 2024', + type: 'Lead', + company: 'WebNord GmbH', + status: 'Inactive' +}, { + id: '9', + name: 'Akira Sato', + email: 'akira@nippontech.jp', + avatar: user10, + phone: '+81 90-1234-5678', + country: 'JP', + countryLabel: 'JP', + countryFlag: flagJP, + joined: 'Feb 12, 2024', + type: 'Client', + company: 'NipponTech', + status: 'Blocked' +}, { + id: '10', + name: 'Sophie Dubois', + email: 'sophie@créatis.fr', + avatar: user5, + phone: '+33 7 89 01 23 45', + country: 'FR', + countryLabel: 'FR', + countryFlag: flagFR, + joined: 'Feb 9, 2024', + type: 'Client', + company: 'Créatis SARL', + status: 'Active' +}, { + id: '11', + name: 'Omar Farouk', + email: 'omar@cairoconnect.eg', + avatar: user1, + phone: '+20 100 123 4567', + country: 'EG', + countryLabel: 'EG', + countryFlag: flagEG, + joined: 'Apr 12, 2024', + type: 'Prospect', + company: 'CairoConnect', + status: 'Verification Pending' +}, { + id: '12', + name: 'John Smith', + email: 'john@futuredevs.com', + avatar: user2, + phone: '+1 (416) 555-3210', + country: 'CA', + countryLabel: 'CA', + countryFlag: flagCA, + joined: 'Feb 5, 2024', + type: 'Lead', + company: 'FutureDevs', + status: 'Active' +}]; \ No newline at end of file diff --git a/src/views/apps/crm/customers/index.jsx b/src/views/apps/crm/customers/index.jsx new file mode 100644 index 0000000..6163e43 --- /dev/null +++ b/src/views/apps/crm/customers/index.jsx @@ -0,0 +1,215 @@ +import { createColumnHelper, getCoreRowModel, getFilteredRowModel, getPaginationRowModel, getSortedRowModel, useReactTable } from '@tanstack/react-table'; +import { Link } from "react-router"; +import { useState } from 'react'; +import { Button, Card, CardFooter, CardHeader, Col, Container, Row } from 'react-bootstrap'; +import { LuGlobe, LuSearch, LuShuffle } from 'react-icons/lu'; +import { TbEdit, TbEye, TbPlus, TbTrash } from 'react-icons/tb'; +import DataTable from '@/components/table/DataTable'; +import DeleteConfirmationModal from '@/components/table/DeleteConfirmationModal'; +import TablePagination from '@/components/table/TablePagination'; +import CustomerModal from './components/CustomerModal'; +import { customers } from './data'; +import PageBreadcrumb from '@/components/PageBreadcrumb'; +const columnHelper = createColumnHelper(); +const CustomersCard = () => { + const [showModal, setShowModal] = useState(false); + const columns = [{ + id: 'select', + header: ({ + table + }) => , + cell: ({ + row + }) => , + enableSorting: false, + enableColumnFilter: false + }, columnHelper.accessor('name', { + header: 'Client Name', + cell: ({ + row + }) =>
    +
    + +
    +
    +
    + + {row.original.name} + +
    +

    {row.original.email}

    +
    +
    + }), columnHelper.accessor('phone', { + header: 'Phone' + }), columnHelper.accessor('country', { + header: 'Country', + cell: ({ + row + }) => <> + + {row.original.country} + + + }), columnHelper.accessor('joined', { + header: 'Date', + cell: ({ + row + }) => <> + {row.original.joined} + + }), columnHelper.accessor('type', { + header: 'Type' + }), columnHelper.accessor('company', { + header: 'Company' + }), columnHelper.accessor('status', { + header: 'Status', + cell: ({ + row + }) => { + const color = row.original.status === 'Blocked' ? ' bg-danger-subtle text-danger badge-label' : row.original.status === 'Verification Pending' ? 'bg-warning-subtle text-warning badge-label' : row.original.status === 'Active' ? 'bg-success-subtle text-success badge-label' : 'bg-secondary-subtle text-secondary badge-label'; + return {row.original.status}; + } + }), { + header: 'Actions', + cell: ({ + row + }) =>
    + + + +
    + }]; + const [data, setData] = useState(() => [...customers]); + const [globalFilter, setGlobalFilter] = useState(''); + const [sorting, setSorting] = useState([]); + const [pagination, setPagination] = useState({ + pageIndex: 0, + pageSize: 8 + }); + const [selectedRowIds, setSelectedRowIds] = useState({}); + const table = useReactTable({ + data, + columns, + state: { + sorting, + globalFilter, + pagination, + rowSelection: selectedRowIds + }, + onSortingChange: setSorting, + onGlobalFilterChange: setGlobalFilter, + onPaginationChange: setPagination, + onRowSelectionChange: setSelectedRowIds, + getCoreRowModel: getCoreRowModel(), + getSortedRowModel: getSortedRowModel(), + getFilteredRowModel: getFilteredRowModel(), + getPaginationRowModel: getPaginationRowModel(), + globalFilterFn: 'includesString', + enableColumnFilters: true, + enableRowSelection: true + }); + const pageIndex = table.getState().pagination.pageIndex; + const pageSize = table.getState().pagination.pageSize; + const totalItems = table.getFilteredRowModel().rows.length; + const start = pageIndex * pageSize + 1; + const end = Math.min(start + pageSize - 1, totalItems); + const [showDeleteModal, setShowDeleteModal] = useState(false); + const toggleDeleteModal = () => { + setShowDeleteModal(!showDeleteModal); + }; + const handleDelete = () => { + const selectedIds = new Set(Object.keys(selectedRowIds)); + setData(old => old.filter((_, idx) => !selectedIds.has(idx.toString()))); + setSelectedRowIds({}); + setPagination({ + ...pagination, + pageIndex: 0 + }); + setShowDeleteModal(false); + }; + return + + + + + +
    +
    + setGlobalFilter(e.target.value)} /> + +
    + + {Object.keys(selectedRowIds).length > 0 && } + + + setShowModal(false)} /> +
    + +
    + Filter By: + +
    + + +
    + +
    + + +
    + +
    + +
    +
    +
    + + + {table.getRowModel().rows.length > 0 && + + } + + +
    + +
    +
    ; +}; +export default CustomersCard; \ No newline at end of file diff --git a/src/views/apps/crm/data.js b/src/views/apps/crm/data.js new file mode 100644 index 0000000..c179d4f --- /dev/null +++ b/src/views/apps/crm/data.js @@ -0,0 +1,866 @@ +import { TbArrowDown, TbArrowUp, TbClock, TbCurrencyDollar } from 'react-icons/tb'; +import user1 from '@/assets/images/users/user-1.jpg'; +import user2 from '@/assets/images/users/user-2.jpg'; +import user3 from '@/assets/images/users/user-3.jpg'; +import user4 from '@/assets/images/users/user-4.jpg'; +import user5 from '@/assets/images/users/user-5.jpg'; +import user6 from '@/assets/images/users/user-6.jpg'; +import user7 from '@/assets/images/users/user-7.jpg'; +import user8 from '@/assets/images/users/user-8.jpg'; +import user9 from '@/assets/images/users/user-9.jpg'; +import user10 from '@/assets/images/users/user-10.jpg'; +import googleLogo from '@/assets/images/logos/google.svg'; +import microsoftLogo from '@/assets/images/logos/microsoft.svg'; +import amazonLogo from '@/assets/images/logos/amazon.svg'; +import appleLogo from '@/assets/images/logos/apple.svg'; +import dropboxLogo from '@/assets/images/logos/dropbox.svg'; +import slackLogo from '@/assets/images/logos/slack.svg'; +import spotifyLogo from '@/assets/images/logos/spotify.svg'; +import starbucksLogo from '@/assets/images/logos/starbucks.svg'; +import airbnbLogo from '@/assets/images/logos/airbnb.svg'; +import openaiLogo from '@/assets/images/logos/openai.svg'; +import shellLogo from '@/assets/images/logos/shell.svg'; +import figmaLogo from '@/assets/images/logos/figma.svg'; +import asanaLogo from '@/assets/images/logos/asana.svg'; +export const contacts = [{ + id: 1, + name: 'Emily Ross', + email: 'emily.ross@greentech.com', + phone: '+44 7911 112233', + avatar: user1, + label: { + text: 'Prospect', + variant: 'success' + }, + description: 'Marketing Director at GreenTech', + categories: [{ + name: 'Eco', + variant: 'info' + }, { + name: 'Newsletter', + variant: 'light' + }, { + name: 'Follow-up', + variant: 'secondary' + }], + stats: [{ + title: 'Posts', + count: 98 + }, { + title: 'Followers', + count: 12.5, + suffix: 'k' + }, { + title: 'Followings', + count: 860 + }] +}, { + id: 2, + name: 'Ava Mitchell', + email: 'ava.mitchell@novaxlabs.com', + phone: '+1 347 445 8890', + avatar: user2, + label: { + text: 'Cold Lead', + variant: 'info' + }, + description: 'Product Strategist at NovaX Labs', + categories: [{ + name: 'Technology', + variant: 'primary' + }, { + name: 'Outbound', + variant: 'light' + }, { + name: 'Low Engagement', + variant: 'danger' + }], + stats: [{ + title: 'Total Value', + count: 4.2, + suffix: 'k', + prefix: '$' + }, { + title: 'Open Deal', + count: 1 + }, { + title: 'Meetings', + count: 0 + }] +}, { + id: 3, + name: 'Noah Johnson', + email: 'noah.j@urbanmart.com', + phone: '+1 212 776 2233', + avatar: user3, + label: { + text: 'Hot Lead', + variant: 'warning' + }, + description: 'Sales Manager at UrbanMart', + categories: [{ + name: 'Retail', + variant: 'success' + }, { + name: 'In-Person', + variant: 'secondary' + }, { + name: 'Urgent', + variant: 'danger' + }], + stats: [{ + title: 'Revenue', + count: 12, + suffix: 'k', + prefix: '$' + }, { + title: 'Open Deals', + count: 3 + }, { + title: 'Meetings', + count: 5 + }] +}, { + id: 4, + name: 'Olivia Carter', + email: 'olivia.carter@medisync.com', + phone: '+44 20 7946 1000', + avatar: user4, + label: { + text: 'Customer', + variant: 'primary' + }, + description: 'Operations Head at MediSync', + categories: [{ + name: 'Healthcare', + variant: 'danger' + }, { + name: 'Newsletter', + variant: 'secondary' + }, { + name: 'Retention', + variant: 'info' + }], + stats: [{ + title: 'Tickets', + count: 38 + }, { + title: 'Resolved', + count: 35 + }, { + title: 'Pending', + count: 3 + }] +}, { + id: 5, + name: 'Liam Brown', + email: 'liam.brown@finverse.com', + phone: '+1 415 901 8899', + avatar: user5, + label: { + text: 'VIP', + variant: 'danger' + }, + description: 'Chief Finance Officer at Finverse', + categories: [{ + name: 'Finance', + variant: 'success' + }, { + name: 'Investment', + variant: 'primary' + }, { + name: 'High Value', + variant: 'danger' + }], + stats: [{ + title: 'Transactions', + count: 150 + }, { + title: 'Value', + count: 2.5, + suffix: 'M', + prefix: '$' + }, { + title: 'Pending', + count: 12 + }] +}, { + id: 6, + name: 'Sophia White', + email: 'sophia.white@aerolite.com', + phone: '+61 2 8890 4455', + label: { + text: 'Prospect', + variant: 'success' + }, + description: 'Project Manager at AeroLite', + categories: [{ + name: 'Aerospace', + variant: 'secondary' + }, { + name: 'Follow-up', + variant: 'info' + }], + stats: [{ + title: 'Projects', + count: 6 + }, { + title: 'On Hold', + count: 2 + }, { + title: 'Active', + count: 4 + }] +}, { + id: 7, + name: 'Ethan Walker', + email: 'ethan.walker@nextgenai.com', + phone: '+1 202 555 0181', + avatar: user6, + label: { + text: 'Customer', + variant: 'primary' + }, + description: 'AI Engineer at NextGen AI', + categories: [{ + name: 'Technology', + variant: 'primary' + }, { + name: 'Newsletter', + variant: 'light' + }, { + name: 'Loyal', + variant: 'success' + }], + stats: [{ + title: 'Models', + count: 12 + }, { + title: 'Deployed', + count: 8 + }, { + title: 'In Progress', + count: 4 + }] +}, { + id: 8, + name: 'Mia Green', + email: 'mia.green@biozen.com', + phone: '+1 646 445 7788', + avatar: user7, + label: { + text: 'Cold Lead', + variant: 'info' + }, + description: 'Research Scientist at BioZen', + categories: [{ + name: 'Biotech', + variant: 'success' + }, { + name: 'Outbound', + variant: 'secondary' + }], + stats: [{ + title: 'Experiments', + count: 45 + }, { + title: 'Successful', + count: 39 + }, { + title: 'Failed', + count: 6 + }] +}, { + id: 9, + name: 'James Wilson', + email: 'james.wilson@buildmate.com', + phone: '+44 161 555 2299', + avatar: user8, + label: { + text: 'Prospect', + variant: 'success' + }, + description: 'Site Engineer at BuildMate', + categories: [{ + name: 'Construction', + variant: 'danger' + }, { + name: 'Field', + variant: 'secondary' + }], + stats: [{ + title: 'Sites', + count: 22 + }, { + title: 'Completed', + count: 17 + }, { + title: 'Pending', + count: 5 + }] +}, { + id: 10, + name: 'Isabella Martinez', + email: 'isabella.m@creativespark.com', + phone: '+1 213 555 9876', + avatar: user9, + label: { + text: 'Hot Lead', + variant: 'warning' + }, + description: 'Creative Director at CreativeSpark', + categories: [{ + name: 'Design', + variant: 'info' + }, { + name: 'Media', + variant: 'secondary' + }], + stats: [{ + title: 'Campaigns', + count: 15 + }, { + title: 'Successful', + count: 12 + }, { + title: 'Ongoing', + count: 3 + }] +}, { + id: 11, + name: 'Benjamin Clark', + email: 'ben.clark@healthplus.com', + phone: '+1 917 445 3344', + avatar: user10, + label: { + text: 'Customer', + variant: 'primary' + }, + description: 'CTO at HealthPlus', + categories: [{ + name: 'Healthcare', + variant: 'danger' + }, { + name: 'Retention', + variant: 'info' + }, { + name: 'VIP', + variant: 'success' + }], + stats: [{ + title: 'Tickets', + count: 87 + }, { + title: 'Resolved', + count: 82 + }, { + title: 'Pending', + count: 5 + }] +}, { + id: 12, + name: 'Charlotte King', + email: 'charlotte.king@edusmart.com', + phone: '+1 646 556 2211', + label: { + text: 'VIP', + variant: 'danger' + }, + description: 'Founder of EduSmart', + categories: [{ + name: 'Education', + variant: 'primary' + }, { + name: 'High Value', + variant: 'danger' + }], + stats: [{ + title: 'Students', + count: 20, + suffix: 'k' + }, { + title: 'Courses', + count: 48 + }, { + title: 'Mentors', + count: 15 + }] +}]; +export const opportunities = [{ + id: '#OP007501', + productName: 'Website Redesign Deal', + productBy: 'Google Inc.', + productLogo: googleLogo, + customerName: 'John Carter', + customerEmail: 'john@acme.com', + customerAvatar: user1, + stage: 'Proposal Sent', + amount: '$12,500', + closeDate: '15 Aug, 2025', + source: 'Referral', + owner: 'Sarah Johnson', + status: 'open', + priority: 'high' +}, { + id: '#OP007502', + productName: 'Enterprise SaaS Suite', + productBy: 'Microsoft Corp.', + productLogo: microsoftLogo, + customerName: 'Priya Mehta', + customerEmail: 'priya@globex.com', + customerAvatar: user2, + stage: 'Qualification', + amount: '$50,000', + closeDate: '10 Sep, 2025', + source: 'LinkedIn', + owner: 'Michael ih-p', + status: 'in-progress', + priority: 'medium' +}, { + id: '#OP009123', + productName: 'Cloud Analytics Pro', + productBy: 'Google LLC', + productLogo: googleLogo, + customerName: 'Aarav Patel', + customerEmail: 'aarav@nextgen.io', + customerAvatar: user5, + stage: 'Negotiation', + amount: '$75,000', + closeDate: '18 Oct, 2025', + source: 'Website', + owner: 'Sophia Lee', + status: 'closed', + priority: 'low' +}, { + id: '#OP009201', + productName: 'Retail Insights Pro', + productBy: 'Amazon Inc.', + productLogo: amazonLogo, + customerName: 'Meena Roy', + customerEmail: 'meena@retailhub.io', + customerAvatar: user3, + stage: 'Won', + amount: '$92,000', + closeDate: '02 Nov, 2025', + source: 'Email', + owner: 'Daniel Kim', + status: 'closed', + priority: 'high' +}, { + id: '#OP009202', + productName: 'AI Compute Suite', + productBy: 'Apple Inc.', + productLogo: appleLogo, + customerName: 'Kabir Shah', + customerEmail: 'kabir@aicore.ai', + customerAvatar: user7, + stage: 'Qualification', + amount: '$64,500', + closeDate: '15 Oct, 2025', + source: 'Referral', + owner: 'Emily Davis', + status: 'open', + priority: 'high' +}, { + id: '#OP009203', + productName: 'Ad Manager Pro', + productBy: 'Dropbox', + productLogo: dropboxLogo, + customerName: 'Sana Iqbal', + customerEmail: 'sana@adstack.com', + customerAvatar: user4, + stage: 'Won', + amount: '$120,000', + closeDate: '09 Dec, 2025', + source: 'LinkedIn', + owner: 'John Carter', + status: 'closed', + priority: 'low' +}, { + id: '#OP009204', + productName: 'TeamCollab Enterprise', + productBy: 'Slack Technologies', + productLogo: slackLogo, + customerName: 'Jatin Desai', + customerEmail: 'jatin@collabzone.net', + customerAvatar: user6, + stage: 'Proposal Sent', + amount: '$48,000', + closeDate: '30 Sep, 2025', + source: 'Webinar', + owner: 'Ashley Mio-p', + status: 'in-progress', + priority: 'low' +}, { + id: '#OP009205', + productName: 'Virtual Events Suite', + productBy: 'Spotify Inc.', + productLogo: spotifyLogo, + customerName: 'Lina George', + customerEmail: 'lina@meetpro.io', + customerAvatar: user8, + stage: 'Lost', + amount: '$33,000', + closeDate: '22 Oct, 2025', + source: 'Cold Call', + owner: 'Mark Evans', + status: 'closed', + priority: 'medium' +}, { + id: '#OP009312', + productName: 'Streamlytics Dashboard', + productBy: 'Starbucks Inc.', + productLogo: starbucksLogo, + customerName: 'Ravi Khanna', + customerEmail: 'ravi@streamlytics.co', + customerAvatar: user10, + stage: 'Qualification', + amount: '$58,900', + closeDate: '05 Nov, 2025', + source: 'Trade Show', + owner: 'Jessica Moore', + status: 'in-progress', + priority: 'high' +}, { + id: '#OP009313', + productName: 'Hospitality CRM Suite', + productBy: 'Airbnb Inc.', + productLogo: airbnbLogo, + customerName: 'Isabella Wang', + customerEmail: 'isabella@aircrm.com', + customerAvatar: user9, + stage: 'Proposal Sent', + amount: '$41,200', + closeDate: '12 Nov, 2025', + source: 'Inbound', + owner: 'Thomas Blake', + status: 'open', + priority: 'medium' +}]; +export const dealWidgets = [{ + count: '1,230', + change: '9.85%', + icon: TbArrowUp, + title: 'Total deals created', + progress: 9.85, + variant: 'primary' +}, { + count: '860', + change: '5.20%', + icon: TbArrowUp, + title: 'Deals won', + progress: 5.2, + variant: 'success' +}, { + count: '270', + change: '2.45%', + icon: TbArrowDown, + title: 'Deals lost', + progress: 2.45, + variant: 'danger' +}, { + count: '$220,000', + change: 'Top value', + icon: TbCurrencyDollar, + title: 'Highest deal closed', + progress: 100, + variant: 'warning' +}, { + count: '5.2 days', + change: '+1.1%', + icon: TbClock, + title: 'Avg. close time', + progress: 1.1, + variant: 'secondary' +}]; +export const deals = [{ + id: 1, + name: 'Enterprise Software', + company: 'Google Inc', + logo: googleLogo, + amount: 102000, + stage: 'Proposal Sent', + probability: 65, + date: '15 Aug, 2025' +}, { + id: 2, + name: 'Marketing Automation', + company: 'Airbnb', + logo: airbnbLogo, + amount: 85000, + stage: 'Qualified', + probability: 55, + date: '10 Aug, 2025' +}, { + id: 3, + name: 'Cloud Storage Deal', + company: 'Dropbox', + logo: dropboxLogo, + amount: 47000, + stage: 'Negotiation', + probability: 80, + date: '18 Aug, 2025' +}, { + id: 4, + name: 'AI Chatbot Integration', + company: 'OpenAI', + logo: openaiLogo, + amount: 59500, + stage: 'Proposal Sent', + probability: 65, + date: '22 Aug, 2025' +}, { + id: 5, + name: 'eCommerce Platform', + company: 'Apple', + logo: appleLogo, + amount: 71200, + stage: 'Qualification', + probability: 45, + date: '25 Aug, 2025' +}, { + id: 6, + name: 'Sales CRM Deal', + company: 'Shell', + logo: shellLogo, + amount: 95000, + stage: 'Won', + probability: 100, + date: '30 Aug, 2025' +}, { + id: 7, + name: 'Video Conferencing License', + company: 'Figma Inc', + logo: figmaLogo, + amount: 38000, + stage: 'Lost', + probability: 0, + date: '12 Sep, 2025' +}, { + id: 8, + name: 'Customer Support Suite', + company: 'Starbucks', + logo: starbucksLogo, + amount: 52000, + stage: 'Proposal Sent', + probability: 70, + date: '03 Sep, 2025' +}, { + id: 9, + name: 'Project Management SaaS', + company: 'Slack', + logo: slackLogo, + amount: 44000, + stage: 'Negotiation', + probability: 60, + date: '06 Sep, 2025' +}, { + id: 10, + name: 'Data Visualization Tool', + company: 'Asana', + logo: asanaLogo, + amount: 67300, + stage: 'Qualified', + probability: 50, + date: '10 Sep, 2025' +}, { + id: 11, + name: 'Team Chat Platform', + company: 'Slack', + logo: slackLogo, + amount: 62000, + stage: 'Won', + probability: 100, + date: '15 Sep, 2025' +}]; +export const leadsData = [{ + id: '#LD007842', + customer: 'R. Thompson', + company: 'Amazon Web Services', + logo: amazonLogo, + email: 'contact@aws.com', + phone: '+1 206-555-0199', + amount: 150000, + tag: { + label: 'Cloud', + color: 'info' + }, + assigned: { + avatar: user10, + name: 'Emily Carter' + }, + status: 'In Progress', + statusVariant: 'success', + created: '12 Jul, 2025' +}, { + id: '#LD007865', + customer: 'S. Kapoor', + company: 'Microsoft', + logo: microsoftLogo, + email: 's.kapoor@microt.com', + phone: '+44 20 7946 0991', + amount: 98500, + tag: { + label: 'AI', + color: 'warning' + }, + assigned: { + avatar: user2, + name: 'Liam Brown' + }, + status: 'Proposal Sent', + statusVariant: 'primary', + created: '21 Jul, 2025' +}, { + id: '#LD007866', + customer: 'A. Patel', + company: 'Google', + logo: googleLogo, + email: 'amit.patel@google.com', + phone: '+1 650-253-0000', + amount: 120000, + tag: { + label: 'Cloud', + color: 'success' + }, + assigned: { + avatar: user3, + name: 'Emily Wang' + }, + status: 'Follow Up', + statusVariant: 'info', + created: '22 Jul, 2025' +}, { + id: '#LD007867', + customer: 'J. Fernandes', + company: 'Airbnb Inc', + logo: airbnbLogo, + email: 'j.fernandes@adobe.com', + phone: '+1 408-536-6000', + amount: 65000, + tag: { + label: 'Design', + color: 'danger' + }, + assigned: { + avatar: user4, + name: 'Sara Kim' + }, + status: 'Pending', + statusVariant: 'warning', + created: '23 Jul, 2025' +}, { + id: '#LD007868', + customer: 'M. Zhang', + company: 'Apple Platforms', + logo: appleLogo, + email: 'ming.zhang@apple.com', + phone: '+1 650-308-7300', + amount: 142000, + tag: { + label: 'VR', + color: 'secondary' + }, + assigned: { + avatar: user5, + name: 'David Li' + }, + status: 'In Progress', + statusVariant: 'success', + created: '23 Jul, 2025' +}, { + id: '#LD007869', + customer: 'N. Sharma', + company: 'Asana', + logo: asanaLogo, + email: 'n.sharma@netflix.com', + phone: '+1 408-540-3700', + amount: 75500, + tag: { + label: 'Streaming', + color: 'info' + }, + assigned: { + avatar: user6, + name: 'Natalie Jones' + }, + status: 'Rejected', + statusVariant: 'danger', + created: '24 Jul, 2025' +}, { + id: '#LD007870', + customer: 'K. Williams', + company: 'Dropbox', + logo: dropboxLogo, + email: 'k.williams@tesila.com', + phone: '+1 310-420-6600', + amount: 110250, + tag: { + label: 'EV', + color: 'dark' + }, + assigned: { + avatar: user7, + name: 'Kevin Nguyen' + }, + status: 'Negotiation', + statusVariant: 'secondary', + created: '24 Jul, 2025' +}, { + id: '#LD007871', + customer: 'L. Mehra', + company: 'Airbnb', + logo: airbnbLogo, + email: 'l.mehra@airbnb.com', + phone: '+1 415-555-0102', + amount: 87000, + tag: { + label: 'Travel', + color: 'danger' + }, + assigned: { + avatar: user8, + name: 'Laura Mehra' + }, + status: 'Proposal Sent', + statusVariant: 'primary', + created: '24 Jul, 2025' +}, { + id: '#LD007872', + customer: 'R. Iyer', + company: 'Slack', + logo: slackLogo, + email: 'r.iyer@slackhq.com', + phone: '+1 628-555-0111', + amount: 332000, + tag: { + label: 'Collaboration', + color: 'info' + }, + assigned: { + avatar: user9, + name: 'Rohan Iyer' + }, + status: 'In Progress', + statusVariant: 'success', + created: '24 Jul, 2025' +}, { + id: '#LD007873', + customer: 'E. Fernandez', + company: 'Spotify', + logo: spotifyLogo, + email: 'emma.f@spotify.com', + phone: '+46 31 123 456', + amount: 917000, + tag: { + label: 'Music', + color: 'success' + }, + assigned: { + avatar: user10, + name: 'Emma Fernandez' + }, + status: 'Pending', + statusVariant: 'warning', + created: '25 Jul, 2025' +}]; \ No newline at end of file diff --git a/src/views/apps/crm/deals/components/CreateDealModal.jsx b/src/views/apps/crm/deals/components/CreateDealModal.jsx new file mode 100644 index 0000000..a168b8e --- /dev/null +++ b/src/views/apps/crm/deals/components/CreateDealModal.jsx @@ -0,0 +1,77 @@ +import { Button, Col, Form, FormControl, FormGroup, FormLabel, FormSelect, Modal, ModalFooter, ModalHeader, ModalTitle, Row } from 'react-bootstrap'; +import Flatpickr from 'react-flatpickr'; +const CreateDealModal = ({ + show, + toggleModal +}) => { + return + + Create New Deal + + +
    + + + + + Deal Name + + + + + + + Company + + + + + + + Amount (USD) + + + + + + + Stage + + + + + + + + + + + + + + Probability (%) + + + + + + + Expected Closing Date + + + + + + + + + + +
    +
    ; +}; +export default CreateDealModal; \ No newline at end of file diff --git a/src/views/apps/crm/deals/components/DealWidget.jsx b/src/views/apps/crm/deals/components/DealWidget.jsx new file mode 100644 index 0000000..fee900b --- /dev/null +++ b/src/views/apps/crm/deals/components/DealWidget.jsx @@ -0,0 +1,27 @@ +import { Card, CardBody, ProgressBar } from 'react-bootstrap'; +const DealWidget = ({ + item +}) => { + const { + count, + change, + icon: Icon, + title, + progress, + variant + } = item; + return + +
    +
    {count}
    + + {change} + +
    +

    {title}

    + + +
    +
    ; +}; +export default DealWidget; \ No newline at end of file diff --git a/src/views/apps/crm/deals/index.jsx b/src/views/apps/crm/deals/index.jsx new file mode 100644 index 0000000..695bc61 --- /dev/null +++ b/src/views/apps/crm/deals/index.jsx @@ -0,0 +1,232 @@ +import { Button, CardFooter, Col, Container, Row } from 'react-bootstrap'; +import { deals, dealWidgets } from '@/views/apps/crm/data'; +import PageBreadcrumb from '@/components/PageBreadcrumb'; +import { TbEdit, TbEye, TbPlus, TbTrash } from 'react-icons/tb'; +import { LuDollarSign, LuSearch, LuShuffle } from 'react-icons/lu'; +import { createColumnHelper, getCoreRowModel, getFilteredRowModel, getPaginationRowModel, getSortedRowModel, useReactTable } from '@tanstack/react-table'; +import { Link } from "react-router"; +import { useState } from 'react'; +import DataTable from '@/components/table/DataTable'; +import TablePagination from '@/components/table/TablePagination'; +import DeleteConfirmationModal from '@/components/table/DeleteConfirmationModal'; +import { currency } from '@/helpers'; +import { useToggle } from 'usehooks-ts'; +import CreateDealModal from '@/views/apps/crm/deals/components/CreateDealModal'; +import DealWidget from '@/views/apps/crm/deals/components/DealWidget'; +const columnHelper = createColumnHelper(); +const priceRangeFilterFn = (row, columnId, value) => { + const amount = row.getValue(columnId); + if (!value) return true; + if (value === '50000+') return amount > 50000; + const [min, max] = value.split('-').map(Number); + return amount >= min && amount <= max; +}; +const Deals = () => { + const columns = [{ + id: 'select', + maxSize: 45, + size: 45, + header: ({ + table + }) => , + cell: ({ + row + }) => , + enableSorting: false, + enableColumnFilter: false + }, columnHelper.accessor('name', { + header: 'Deal Name' + }), columnHelper.accessor('company', { + header: 'Company', + enableSorting: false, + cell: ({ + row + }) =>
    +
    + Product +
    + + {row.original.company} + +
    + }), columnHelper.accessor('amount', { + header: 'amount (usd)', + enableColumnFilter: true, + filterFn: priceRangeFilterFn, + cell: ({ + row + }) => <> + {currency} + {row.original.amount} + + }), columnHelper.accessor('stage', { + header: 'Stage', + enableColumnFilter: true + }), columnHelper.accessor('probability', { + header: 'Probability', + cell: ({ + row + }) =>
    + {[...Array(5)].map((_, i) => { + const activeBars = Math.round(row.original.probability / 20); + const opacity = i < activeBars ? 'opacity-100' : i === activeBars ? 'opacity-50' : 'opacity-25'; + const color = row.original.probability === 0 ? 'bg-danger' : 'bg-success'; + return
    ; + })} + {row.original.probability}% +
    + }), columnHelper.accessor('date', { + header: 'Closing Date' + }), { + header: 'Actions', + cell: ({ + row + }) =>
    + + + +
    + }]; + const [data, setData] = useState(() => [...deals]); + const [globalFilter, setGlobalFilter] = useState(''); + const [sorting, setSorting] = useState([]); + const [columnFilters, setColumnFilters] = useState([]); + const [pagination, setPagination] = useState({ + pageIndex: 0, + pageSize: 8 + }); + const [selectedRowIds, setSelectedRowIds] = useState({}); + const table = useReactTable({ + data, + columns, + state: { + sorting, + globalFilter, + columnFilters, + pagination, + rowSelection: selectedRowIds + }, + onSortingChange: setSorting, + onGlobalFilterChange: setGlobalFilter, + onColumnFiltersChange: setColumnFilters, + onRowSelectionChange: setSelectedRowIds, + onPaginationChange: setPagination, + getCoreRowModel: getCoreRowModel(), + getSortedRowModel: getSortedRowModel(), + getFilteredRowModel: getFilteredRowModel(), + getPaginationRowModel: getPaginationRowModel(), + globalFilterFn: 'includesString', + enableColumnFilters: true, + enableRowSelection: true, + filterFns: { + priceRange: priceRangeFilterFn + } + }); + const pageIndex = table.getState().pagination.pageIndex; + const pageSize = table.getState().pagination.pageSize; + const totalItems = table.getFilteredRowModel().rows.length; + const start = pageIndex * pageSize + 1; + const end = Math.min(start + pageSize - 1, totalItems); + const [showDeleteModal, setShowDeleteModal] = useState(false); + const [showDealModal, toggleDealModal] = useToggle(false); + const toggleDeleteModal = () => { + setShowDeleteModal(!showDeleteModal); + }; + const handleDelete = () => { + const selectedIds = new Set(Object.keys(selectedRowIds)); + setData(old => old.filter((_, idx) => !selectedIds.has(idx.toString()))); + setSelectedRowIds({}); + setPagination({ + ...pagination, + pageIndex: 0 + }); + setShowDeleteModal(false); + }; + return + + + {dealWidgets.map((item, idx) => + + )} + + + +
    +
    +
    +
    + setGlobalFilter(e.target.value)} /> + +
    + + {Object.keys(selectedRowIds).length > 0 && } +
    + +
    + Filter By: + +
    + + +
    + +
    + + +
    + +
    + +
    +
    +
    + +
    + +
    + + {table.getRowModel().rows.length > 0 && + + } + + + + +
    + +
    +
    ; +}; +export default Deals; \ No newline at end of file diff --git a/src/views/apps/crm/estimations/components/EstimationsCard.jsx b/src/views/apps/crm/estimations/components/EstimationsCard.jsx new file mode 100644 index 0000000..4ec959a --- /dev/null +++ b/src/views/apps/crm/estimations/components/EstimationsCard.jsx @@ -0,0 +1,49 @@ +import React from 'react'; +import { Card, CardBody, Col, Row } from 'react-bootstrap'; +import { TbArrowDown, TbArrowUp, TbClock, TbCurrencyDollar } from 'react-icons/tb'; +const EstimationsCard = () => { + const cards = [{ + value: '52', + change: '+15.7%', + icon: , + desc: 'Total estimations created' + }, { + value: '24', + change: '+10.2%', + icon: , + desc: 'Approved estimations' + }, { + value: '8', + change: '-3.9%', + icon: , + desc: 'Declined estimations' + }, { + value: '$138,500', + change: 'Top value', + icon: , + desc: 'Highest estimation value' + }, { + value: <> + 2.8 days + , + change: '+1.1%', + icon: , + desc: 'Avg. review time' + }]; + return + {cards.map((card, index) => + + +
    +
    {card.value}
    + + {card.change} {card.icon} + +
    +

    {card.desc}

    +
    +
    + )} +
    ; +}; +export default EstimationsCard; \ No newline at end of file diff --git a/src/views/apps/crm/estimations/components/EstimationsModal.jsx b/src/views/apps/crm/estimations/components/EstimationsModal.jsx new file mode 100644 index 0000000..c05fdd2 --- /dev/null +++ b/src/views/apps/crm/estimations/components/EstimationsModal.jsx @@ -0,0 +1,91 @@ +import { Button, Col, Form, FormControl, FormGroup, FormLabel, Modal, ModalBody, ModalFooter, ModalHeader, ModalTitle, Row } from 'react-bootstrap'; +import FlatPicker from 'react-flatpickr'; +const EstimationsModal = ({ + show, + onHide +}) => { + return + + Create New Estimation + + +
    + + + + + Project Name + + + + + + + Client + + + + + + + Estimated Value (USD) + + + + + + + Estimated By + + + + + + + Status + + + + + + + + + + + + + + Tags + + + + + + + Created Date + + + + + + + Expected Close + + + + + + + + + + +
    +
    ; +}; +export default EstimationsModal; \ No newline at end of file diff --git a/src/views/apps/crm/estimations/components/EstimationsTable.jsx b/src/views/apps/crm/estimations/components/EstimationsTable.jsx new file mode 100644 index 0000000..d8e300d --- /dev/null +++ b/src/views/apps/crm/estimations/components/EstimationsTable.jsx @@ -0,0 +1,208 @@ +import { createColumnHelper, getCoreRowModel, getFilteredRowModel, getPaginationRowModel, getSortedRowModel, useReactTable } from '@tanstack/react-table'; +import { Link } from "react-router"; +import { useState } from 'react'; +import { Button, Card, CardFooter, CardHeader } from 'react-bootstrap'; +import { LuDollarSign, LuSearch, LuShuffle } from 'react-icons/lu'; +import { TbEdit, TbEye, TbPlus, TbTrash } from 'react-icons/tb'; +import DataTable from '@/components/table/DataTable'; +import DeleteConfirmationModal from '@/components/table/DeleteConfirmationModal'; +import TablePagination from '@/components/table/TablePagination'; +import { estimates } from '../data'; +import EstimationsModal from './EstimationsModal'; +const columnHelper = createColumnHelper(); +const EstimationsTable = () => { + const [showModal, setShowModal] = useState(false); + const columns = [{ + id: 'select', + header: ({ + table + }) => , + cell: ({ + row + }) => , + enableSorting: false, + enableColumnFilter: false + }, columnHelper.accessor('id', { + header: 'Estimate ID', + cell: ({ + row + }) => + {row.original.id} + + }), columnHelper.accessor('project', { + header: 'Project' + }), columnHelper.accessor('client', { + header: 'Client', + cell: ({ + row + }) =>
    +
    + {row.original.client.name} +
    + {row.original.client.name} +
    + }), columnHelper.accessor('value', { + header: 'Estimated Value' + }), columnHelper.accessor('estimatedBy', { + header: 'Estimated By', + cell: ({ + row + }) =>
    + {row.original.estimatedBy.name} + {row.original.estimatedBy.name} +
    + }), columnHelper.accessor('created', { + header: 'Created', + cell: ({ + row + }) => <> + {row.original.created} {row.original.createdTime} + + }), columnHelper.accessor('expectedClose', { + header: 'Expected Close', + cell: ({ + row + }) => <> + {row.original.expectedClose} {row.original.expectedCloseTime} + + }), columnHelper.accessor('status', { + header: 'Status', + cell: ({ + row + }) => { + const color = row.original.status === 'Declined' ? 'badge-label bg-danger-subtle text-danger badge-label fs-xs' : row.original.status === 'In Review' ? 'badge-label bg-info-subtle text-info fs-xs' : row.original.status === 'Approved' ? 'badge-label bg-success-subtle text-success badge-label fs-xs' : row.original.status === 'Pending' ? 'badge-label bg-warning-subtle text-warning fs-xs' : 'badge-label bg-secondary-subtle text-secondary fs-xs'; + return {row.original.status}; + } + }), { + header: 'Actions', + cell: ({ + row + }) =>
    + + + +
    + }]; + const [data, setData] = useState(() => [...estimates]); + const [globalFilter, setGlobalFilter] = useState(''); + const [sorting, setSorting] = useState([]); + const [pagination, setPagination] = useState({ + pageIndex: 0, + pageSize: 8 + }); + const [selectedRowIds, setSelectedRowIds] = useState({}); + const table = useReactTable({ + data, + columns, + state: { + sorting, + globalFilter, + pagination, + rowSelection: selectedRowIds + }, + onSortingChange: setSorting, + onGlobalFilterChange: setGlobalFilter, + onPaginationChange: setPagination, + onRowSelectionChange: setSelectedRowIds, + getCoreRowModel: getCoreRowModel(), + getSortedRowModel: getSortedRowModel(), + getFilteredRowModel: getFilteredRowModel(), + getPaginationRowModel: getPaginationRowModel(), + globalFilterFn: 'includesString', + enableColumnFilters: true, + enableRowSelection: true + }); + const pageIndex = table.getState().pagination.pageIndex; + const pageSize = table.getState().pagination.pageSize; + const totalItems = table.getFilteredRowModel().rows.length; + const start = pageIndex * pageSize + 1; + const end = Math.min(start + pageSize - 1, totalItems); + const [showDeleteModal, setShowDeleteModal] = useState(false); + const toggleDeleteModal = () => { + setShowDeleteModal(!showDeleteModal); + }; + const handleDelete = () => { + const selectedIds = new Set(Object.keys(selectedRowIds)); + setData(old => old.filter((_, idx) => !selectedIds.has(idx.toString()))); + setSelectedRowIds({}); + setPagination({ + ...pagination, + pageIndex: 0 + }); + setShowDeleteModal(false); + }; + return + +
    +
    + setGlobalFilter(e.target.value)} /> + +
    + + {Object.keys(selectedRowIds).length > 0 && } + + + setShowModal(false)} /> +
    + +
    + Filter By: + +
    + + +
    + +
    + + +
    + +
    + +
    +
    +
    + + + {table.getRowModel().rows.length > 0 && + + } + + +
    ; +}; +export default EstimationsTable; \ No newline at end of file diff --git a/src/views/apps/crm/estimations/data.js b/src/views/apps/crm/estimations/data.js new file mode 100644 index 0000000..4f5457b --- /dev/null +++ b/src/views/apps/crm/estimations/data.js @@ -0,0 +1,209 @@ +import user1 from '@/assets/images/users/user-1.jpg'; +import user2 from '@/assets/images/users/user-2.jpg'; +import user3 from '@/assets/images/users/user-3.jpg'; +import user4 from '@/assets/images/users/user-4.jpg'; +import user5 from '@/assets/images/users/user-5.jpg'; +import user6 from '@/assets/images/users/user-6.jpg'; +import user7 from '@/assets/images/users/user-7.jpg'; +import user8 from '@/assets/images/users/user-8.jpg'; +import user9 from '@/assets/images/users/user-9.jpg'; +import user10 from '@/assets/images/users/user-10.jpg'; +import logoAirbnb from '@/assets/images/logos/airbnb.svg'; +import logoAmazon from '@/assets/images/logos/amazon.svg'; +import logoApple from '@/assets/images/logos/apple.svg'; +import logoAsana from '@/assets/images/logos/asana.svg'; +import logoDropbox from '@/assets/images/logos/dropbox.svg'; +import logoFigma from '@/assets/images/logos/figma.svg'; +import logoMeta from '@/assets/images/logos/meta.svg'; +import logoSlack from '@/assets/images/logos/slack.svg'; +import logoMicrosoft from '@/assets/images/logos/microsoft.svg'; +import logoOpenai from '@/assets/images/logos/openai.svg'; +import logoShell from '@/assets/images/logos/shell.svg'; +export const estimates = [{ + id: '#EST00042', + project: 'CRM System Redesign', + client: { + name: 'Airbnb', + logo: logoAirbnb + }, + value: '$25,000', + estimatedBy: { + name: 'Jason Miller', + avatar: user5 + }, + created: '15 Jul, 2025', + createdTime: '09:30 AM', + expectedClose: '05 Aug, 2025', + expectedCloseTime: '06:00 PM', + status: 'In Review' +}, { + id: '#EST00043', + project: 'Lead Tracking Module', + client: { + name: 'Amazon', + logo: logoAmazon + }, + value: '$14,200', + estimatedBy: { + name: 'Ava Green', + avatar: user4 + }, + created: '17 Jul, 2025', + createdTime: '10:15 AM', + expectedClose: '02 Aug, 2025', + expectedCloseTime: '04:30 PM', + status: 'Approved' +}, { + id: '#EST00044', + project: 'Marketing Automation', + client: { + name: 'Apple Inc.', + logo: logoApple + }, + value: '$32,000', + estimatedBy: { + name: 'Liam Scott', + avatar: user2 + }, + created: '18 Jul, 2025', + createdTime: '01:40 PM', + expectedClose: '10 Aug, 2025', + expectedCloseTime: '01:00 PM', + status: 'Pending' +}, { + id: '#EST00045', + project: 'Sales Pipeline Setup', + client: { + name: 'Asana Studio', + logo: logoAsana + }, + value: '$21,800', + estimatedBy: { + name: 'Noah Carter', + avatar: user3 + }, + created: '19 Jul, 2025', + createdTime: '03:00 PM', + expectedClose: '08 Aug, 2025', + expectedCloseTime: '05:45 PM', + status: 'Declined' +}, { + id: '#EST00046', + project: 'Support Portal Development', + client: { + name: 'Dropbox Inc.', + logo: logoDropbox + }, + value: '$27,500', + estimatedBy: { + name: 'Emily Stone', + avatar: user1 + }, + created: '20 Jul, 2025', + createdTime: '11:20 AM', + expectedClose: '15 Aug, 2025', + expectedCloseTime: '09:00 AM', + status: 'In Review' +}, { + id: '#EST00047', + project: 'Client Onboarding System', + client: { + name: 'Figma Design', + logo: logoFigma + }, + value: '$16,600', + estimatedBy: { + name: 'Sophia White', + avatar: user6 + }, + created: '21 Jul, 2025', + createdTime: '02:00 PM', + expectedClose: '06 Aug, 2025', + expectedCloseTime: '12:00 PM', + status: 'Sent' +}, { + id: '#EST00048', + project: 'Customer Insights Dashboard', + client: { + name: 'Meta', + logo: logoMeta + }, + value: '$29,900', + estimatedBy: { + name: 'Mason Lee', + avatar: user7 + }, + created: '22 Jul, 2025', + createdTime: '11:00 AM', + expectedClose: '10 Aug, 2025', + expectedCloseTime: '04:00 PM', + status: 'In Review' +}, { + id: '#EST00049', + project: 'Workflow Automation Engine', + client: { + name: 'Slack', + logo: logoSlack + }, + value: '$33,750', + estimatedBy: { + name: 'Olivia James', + avatar: user8 + }, + created: '23 Jul, 2025', + createdTime: '09:30 AM', + expectedClose: '14 Aug, 2025', + expectedCloseTime: '11:30 AM', + status: 'Approved' +}, { + id: '#EST00050', + project: 'Partner API Integration', + client: { + name: 'Microsoft', + logo: logoMicrosoft + }, + value: '$17,600', + estimatedBy: { + name: 'Ella Kim', + avatar: user9 + }, + created: '24 Jul, 2025', + createdTime: '10:45 AM', + expectedClose: '12 Aug, 2025', + expectedCloseTime: '03:15 PM', + status: 'Pending' +}, { + id: '#EST00051', + project: 'Mobile CRM App Build', + client: { + name: 'ChatGPT', + logo: logoOpenai + }, + value: '$40,000', + estimatedBy: { + name: 'Daniel Park', + avatar: user10 + }, + created: '25 Jul, 2025', + createdTime: '02:30 PM', + expectedClose: '20 Aug, 2025', + expectedCloseTime: '05:00 PM', + status: 'Sent' +}, { + id: '#EST00052', + project: 'Smart Contact Syncing', + client: { + name: 'Shell Petro.', + logo: logoShell + }, + value: '$13,250', + estimatedBy: { + name: 'Chloe Nguyen', + avatar: user4 + }, + created: '26 Jul, 2025', + createdTime: '01:10 PM', + expectedClose: '16 Aug, 2025', + expectedCloseTime: '11:00 AM', + status: 'Declined' +}]; \ No newline at end of file diff --git a/src/views/apps/crm/estimations/index.jsx b/src/views/apps/crm/estimations/index.jsx new file mode 100644 index 0000000..92a25ba --- /dev/null +++ b/src/views/apps/crm/estimations/index.jsx @@ -0,0 +1,16 @@ +import { Col, Container, Row } from 'react-bootstrap'; +import EstimationsCard from './components/EstimationsCard'; +import PageBreadcrumb from '@/components/PageBreadcrumb'; +import EstimationsTable from './components/EstimationsTable'; +const Index = () => { + return + + + + + + + + ; +}; +export default Index; \ No newline at end of file diff --git a/src/views/apps/crm/leads/components/AddNewLeadModal.jsx b/src/views/apps/crm/leads/components/AddNewLeadModal.jsx new file mode 100644 index 0000000..d3bf2ed --- /dev/null +++ b/src/views/apps/crm/leads/components/AddNewLeadModal.jsx @@ -0,0 +1,90 @@ +import { Button, Col, Form, FormControl, FormGroup, FormLabel, FormSelect, Modal, ModalBody, ModalFooter, ModalHeader, ModalTitle, Row } from 'react-bootstrap'; +const AddNewLeadModal = ({ + show, + toggleModal +}) => { + return + + Add New Lead + + +
    + + + + + Lead Name + + + + + + + Company + + + + + + + Email + + + + + + + Phone + + + + + + + Amount (USD) + + + + + + + Status + + + + + + + + + + + + + + + Assign To + + + + + + + + + + + + + + + + +
    +
    ; +}; +export default AddNewLeadModal; \ No newline at end of file diff --git a/src/views/apps/crm/leads/index.jsx b/src/views/apps/crm/leads/index.jsx new file mode 100644 index 0000000..682a6d4 --- /dev/null +++ b/src/views/apps/crm/leads/index.jsx @@ -0,0 +1,236 @@ +import { Button, Card, CardBody, CardFooter, CardHeader, Col, Container, OverlayTrigger, Row, Tooltip } from 'react-bootstrap'; +import { leadsData } from '@/views/apps/crm/data'; +import PageBreadcrumb from '@/components/PageBreadcrumb'; +import { TbEdit, TbEye, TbPlus, TbTrash } from 'react-icons/tb'; +import { LuDollarSign, LuSearch, LuShuffle } from 'react-icons/lu'; +import { createColumnHelper, getCoreRowModel, getFilteredRowModel, getPaginationRowModel, getSortedRowModel, useReactTable } from '@tanstack/react-table'; +import { Link } from "react-router"; +import { useState } from 'react'; +import DataTable from '@/components/table/DataTable'; +import TablePagination from '@/components/table/TablePagination'; +import DeleteConfirmationModal from '@/components/table/DeleteConfirmationModal'; +import { currency } from '@/helpers'; +import { useToggle } from 'usehooks-ts'; +import AddNewLeadModal from '@/views/apps/crm/leads/components/AddNewLeadModal'; +const columnHelper = createColumnHelper(); +const priceRangeFilterFn = (row, columnId, value) => { + const amount = row.getValue(columnId); + if (!value) return true; + if (value === '500000+') return amount > 500000; + const [min, max] = value.split('-').map(Number); + return amount >= min && amount <= max; +}; +const Leads = () => { + const columns = [{ + id: 'select', + maxSize: 45, + size: 45, + header: ({ + table + }) => , + cell: ({ + row + }) => , + enableSorting: false, + enableColumnFilter: false + }, columnHelper.accessor('id', { + header: 'Lead Id' + }), columnHelper.accessor('customer', { + header: 'Customer' + }), columnHelper.accessor('company', { + header: 'Company', + enableSorting: false, + cell: ({ + row + }) =>
    +
    + Product +
    + + {row.original.company} + +
    + }), columnHelper.accessor('email', { + header: 'Email' + }), columnHelper.accessor('phone', { + header: 'Phone' + }), columnHelper.accessor('amount', { + header: 'amount (usd)', + enableColumnFilter: true, + filterFn: priceRangeFilterFn, + cell: ({ + row + }) => <> + {currency} + {row.original.amount} + + }), columnHelper.accessor('tag', { + header: 'Tags', + cell: ({ + row + }) => {row.original.tag.label} + }), columnHelper.accessor('assigned', { + header: 'Assigned', + cell: ({ + row + }) => {row.original.assigned.name}}> + Product + + }), columnHelper.accessor('status', { + header: 'Status', + cell: ({ + row + }) => {row.original.status} + }), columnHelper.accessor('created', { + header: 'Created' + }), { + header: 'Actions', + cell: ({ + row + }) =>
    + + + +
    + }]; + const [data, setData] = useState(() => [...leadsData]); + const [globalFilter, setGlobalFilter] = useState(''); + const [sorting, setSorting] = useState([]); + const [columnFilters, setColumnFilters] = useState([]); + const [pagination, setPagination] = useState({ + pageIndex: 0, + pageSize: 8 + }); + const [selectedRowIds, setSelectedRowIds] = useState({}); + const table = useReactTable({ + data, + columns, + state: { + sorting, + globalFilter, + columnFilters, + pagination, + rowSelection: selectedRowIds + }, + onSortingChange: setSorting, + onGlobalFilterChange: setGlobalFilter, + onColumnFiltersChange: setColumnFilters, + onRowSelectionChange: setSelectedRowIds, + onPaginationChange: setPagination, + getCoreRowModel: getCoreRowModel(), + getSortedRowModel: getSortedRowModel(), + getFilteredRowModel: getFilteredRowModel(), + getPaginationRowModel: getPaginationRowModel(), + globalFilterFn: 'includesString', + enableColumnFilters: true, + enableRowSelection: true, + filterFns: { + priceRange: priceRangeFilterFn + } + }); + const pageIndex = table.getState().pagination.pageIndex; + const pageSize = table.getState().pagination.pageSize; + const totalItems = table.getFilteredRowModel().rows.length; + const start = pageIndex * pageSize + 1; + const end = Math.min(start + pageSize - 1, totalItems); + const [showDeleteModal, setShowDeleteModal] = useState(false); + const [showDealModal, toggleDealModal] = useToggle(false); + const toggleDeleteModal = () => { + setShowDeleteModal(!showDeleteModal); + }; + const handleDelete = () => { + const selectedIds = new Set(Object.keys(selectedRowIds)); + setData(old => old.filter((_, idx) => !selectedIds.has(idx.toString()))); + setSelectedRowIds({}); + setPagination({ + ...pagination, + pageIndex: 0 + }); + setShowDeleteModal(false); + }; + return + + + + + + +
    +
    + setGlobalFilter(e.target.value)} /> + +
    + + {Object.keys(selectedRowIds).length > 0 && } +
    + +
    + Filter By: + +
    + + + +
    + +
    + + +
    + +
    + +
    +
    +
    + + + + + + {table.getRowModel().rows.length > 0 && + + } + + + + +
    + +
    +
    ; +}; +export default Leads; \ No newline at end of file diff --git a/src/views/apps/crm/opportunities/index.jsx b/src/views/apps/crm/opportunities/index.jsx new file mode 100644 index 0000000..cb06eb3 --- /dev/null +++ b/src/views/apps/crm/opportunities/index.jsx @@ -0,0 +1,188 @@ +import PageBreadcrumb from '@/components/PageBreadcrumb'; +import { CardBody, CardFooter, Col, Row } from 'react-bootstrap'; +import { createColumnHelper, getCoreRowModel, getFilteredRowModel, getPaginationRowModel, getSortedRowModel, useReactTable } from '@tanstack/react-table'; +import { Link } from "react-router"; +import { toPascalCase } from '@/helpers/casing'; +import { useState } from 'react'; +import clsx from 'clsx'; +import { opportunities } from '@/views/apps/crm/data'; +import { LuCircleAlert, LuSearch, LuShuffle } from 'react-icons/lu'; +import { LiaCheckCircle } from 'react-icons/lia'; +import DataTable from '@/components/table/DataTable'; +import TablePagination from '@/components/table/TablePagination'; +const columnHelper = createColumnHelper(); +const Opportunities = () => { + const columns = [columnHelper.accessor('id', { + header: 'ID' + }), columnHelper.accessor('productBy', { + header: 'Opportunity', + enableSorting: false, + cell: ({ + row + }) =>
    +
    + Product +
    +
    +

    + + {row.original.productName} + +

    +

    By: {row.original.productBy}

    +
    +
    + }), columnHelper.accessor('customerName', { + header: 'Contact Person', + enableSorting: false, + cell: ({ + row + }) =>
    +
    + Product +
    +
    +

    + + {row.original.customerName} + +

    +

    {row.original.customerEmail}

    +
    +
    + }), columnHelper.accessor('stage', { + header: 'Stage', + enableColumnFilter: true + }), columnHelper.accessor('amount', { + header: 'Value(usd)' + }), columnHelper.accessor('closeDate', { + header: 'Close Date' + }), columnHelper.accessor('source', { + header: 'Lead Source' + }), columnHelper.accessor('owner', { + header: 'Owner ', + enableSorting: false + }), columnHelper.accessor('status', { + header: 'Status', + filterFn: 'equalsString', + enableColumnFilter: true, + cell: ({ + row + }) => + {toPascalCase(row.original.status)} + + }), columnHelper.accessor('priority', { + header: 'Status', + filterFn: 'equalsString', + enableColumnFilter: true, + cell: ({ + row + }) => + {toPascalCase(row.original.priority)} + + })]; + const [data, _setData] = useState(() => [...opportunities]); + const [globalFilter, setGlobalFilter] = useState(''); + const [sorting, setSorting] = useState([]); + const [columnFilters, setColumnFilters] = useState([]); + const [pagination, setPagination] = useState({ + pageIndex: 0, + pageSize: 8 + }); + const table = useReactTable({ + data, + columns, + state: { + sorting, + globalFilter, + columnFilters, + pagination + }, + onSortingChange: setSorting, + onGlobalFilterChange: setGlobalFilter, + onColumnFiltersChange: setColumnFilters, + onPaginationChange: setPagination, + getCoreRowModel: getCoreRowModel(), + getSortedRowModel: getSortedRowModel(), + getFilteredRowModel: getFilteredRowModel(), + getPaginationRowModel: getPaginationRowModel(), + globalFilterFn: 'includesString', + enableColumnFilters: true + }); + const pageIndex = table.getState().pagination.pageIndex; + const pageSize = table.getState().pagination.pageSize; + const totalItems = table.getFilteredRowModel().rows.length; + const start = pageIndex * pageSize + 1; + const end = Math.min(start + pageSize - 1, totalItems); + return
    + + + + +
    +
    +
    +
    + setGlobalFilter(e.target.value)} /> + +
    +
    + +
    + Filter By: + +
    + + +
    + +
    + + +
    + +
    + + +
    + +
    + +
    +
    +
    + + + + + + {table.getRowModel().rows.length > 0 && + + } +
    + +
    +
    ; +}; +export default Opportunities; \ No newline at end of file diff --git a/src/views/apps/crm/pipeline/components/Board.jsx b/src/views/apps/crm/pipeline/components/Board.jsx new file mode 100644 index 0000000..3a8fed4 --- /dev/null +++ b/src/views/apps/crm/pipeline/components/Board.jsx @@ -0,0 +1,43 @@ +import { useKanbanContext } from '@/context/useKanbanContext'; +import { DragDropContext, Draggable, Droppable } from '@hello-pangea/dnd'; +import { Button, CardBody } from 'react-bootstrap'; +import { TbPlus } from 'react-icons/tb'; +import TaskItem from '@/views/apps/crm/pipeline/components/TaskItem'; +import SimpleBar from "simplebar-react"; +const Board = () => { + const { + onDragEnd, + sections, + getAllTasksPerSection, + newTaskModal + } = useKanbanContext(); + return + +
    + {sections.map(section => + {provided =>
    +
    +
    + {section.title} ({getAllTasksPerSection(section.id).length}) +
    + +
    + +
      + {getAllTasksPerSection(section.id).map((task, idx) => + {provided =>
    • + +
    • } +
      )} + {provided.placeholder} +
    +
    +
    } +
    )} +
    +
    +
    ; +}; +export default Board; \ No newline at end of file diff --git a/src/views/apps/crm/pipeline/components/Modals.jsx b/src/views/apps/crm/pipeline/components/Modals.jsx new file mode 100644 index 0000000..22330b1 --- /dev/null +++ b/src/views/apps/crm/pipeline/components/Modals.jsx @@ -0,0 +1,122 @@ +import { useKanbanContext } from '@/context/useKanbanContext'; +import { Button, Col, Form, FormControl, FormGroup, FormLabel, Modal, ModalBody, ModalFooter, ModalHeader, ModalTitle, Row } from 'react-bootstrap'; +import { Controller } from 'react-hook-form'; +import { toPascalCase } from '@/helpers/casing'; +const variants = ['primary', 'secondary', 'success', 'danger', 'warning', 'info', 'light', 'dark']; +const Modals = () => { + const { + newTaskModal, + taskForm, + taskFormData, + sectionFormData, + sectionModal, + sectionForm + } = useKanbanContext(); + return <> + +
    + + {taskFormData ? 'Edit Deal' : 'Add New Deal'} + + + + Title + } /> + + + + User Name + } /> + + + + Company Name + } /> + + + Amount + } /> + + + Date + } /> + + + + + + +
    +
    + + +
    + + {sectionFormData ? 'Edit New Section' : 'Add New Section'} + + + + + Title + <> + + } /> + + + Variant + { + const idx = e.target.selectedIndex; + field.onChange(variants[idx]); + }}> + {variants.map((variant, idx) => )} + } /> + + + + + + + +
    +
    + ; +}; +export default Modals; \ No newline at end of file diff --git a/src/views/apps/crm/pipeline/components/PipelineHeader.jsx b/src/views/apps/crm/pipeline/components/PipelineHeader.jsx new file mode 100644 index 0000000..a38a150 --- /dev/null +++ b/src/views/apps/crm/pipeline/components/PipelineHeader.jsx @@ -0,0 +1,44 @@ +import { useKanbanContext } from '@/context/useKanbanContext'; +import { CardHeader } from 'react-bootstrap'; +import { LuCalendarCheck, LuSearch, LuShuffle } from 'react-icons/lu'; +import { TbPlus } from 'react-icons/tb'; +const PipelineHeader = () => { + const { + sectionModal + } = useKanbanContext(); + return +
    + + +
    + +
    +
    + + +
    + +
    + + +
    +
    + + +
    ; +}; +export default PipelineHeader; \ No newline at end of file diff --git a/src/views/apps/crm/pipeline/components/PipelinePage.jsx b/src/views/apps/crm/pipeline/components/PipelinePage.jsx new file mode 100644 index 0000000..f22a156 --- /dev/null +++ b/src/views/apps/crm/pipeline/components/PipelinePage.jsx @@ -0,0 +1,18 @@ +import { Card } from 'react-bootstrap'; +import { KanbanProvider } from '@/context/useKanbanContext'; +import { kanbanSectionsData, KanbanTaskData } from '@/views/apps/crm/pipeline/data'; +import PipelineHeader from '@/views/apps/crm/pipeline/components/PipelineHeader'; +import Board from '@/views/apps/crm/pipeline/components/Board'; +import Modals from '@/views/apps/crm/pipeline/components/Modals'; +const PipelinePage = () => { + return +
    + + + + + +
    +
    ; +}; +export default PipelinePage; \ No newline at end of file diff --git a/src/views/apps/crm/pipeline/components/TaskItem.jsx b/src/views/apps/crm/pipeline/components/TaskItem.jsx new file mode 100644 index 0000000..7b34025 --- /dev/null +++ b/src/views/apps/crm/pipeline/components/TaskItem.jsx @@ -0,0 +1,79 @@ +import { useKanbanContext } from '@/context/useKanbanContext'; +import { Link } from "react-router"; +import { Card, CardBody, Dropdown, DropdownItem, DropdownMenu, DropdownToggle } from 'react-bootstrap'; +import { TbBan, TbCalendarTime, TbChecklist, TbDotsVertical, TbEdit, TbMessageDots, TbShare, TbTrash } from 'react-icons/tb'; +import { currency } from '@/helpers'; +const TaskItem = ({ + item +}) => { + const { + newTaskModal, + taskForm + } = useKanbanContext(); + return <> + + +
    +
    +
    + + {item.title} + +
    + {item.company} +
    + + + + + + + + Share + + newTaskModal.toggle(item.sectionId, item.id)}> + + Edit + + + + Block + + taskForm.deleteRecord(item.id)}> + + Delete + + + +
    +
    +
    + Mark Allen + {item.userName} +
    +
    + +
    {item.date}
    +
    +
    +
    +
    +
    + + {item.messages} + + + {item.tasks} + +
    + + {currency} + {item.amount} + +
    +
    +
    +
    + ; +}; +export default TaskItem; \ No newline at end of file diff --git a/src/views/apps/crm/pipeline/data.js b/src/views/apps/crm/pipeline/data.js new file mode 100644 index 0000000..0131385 --- /dev/null +++ b/src/views/apps/crm/pipeline/data.js @@ -0,0 +1,183 @@ +import user1 from '@/assets/images/users/user-1.jpg'; +import user2 from '@/assets/images/users/user-2.jpg'; +import user3 from '@/assets/images/users/user-3.jpg'; +import user4 from '@/assets/images/users/user-4.jpg'; +import user5 from '@/assets/images/users/user-5.jpg'; +import user6 from '@/assets/images/users/user-6.jpg'; +import user7 from '@/assets/images/users/user-7.jpg'; +import user8 from '@/assets/images/users/user-8.jpg'; +import user9 from '@/assets/images/users/user-9.jpg'; +export const kanbanSectionsData = [{ + id: '501', + title: 'Lead', + variant: 'warning' +}, { + id: '502', + title: 'Negotiation', + variant: 'info' +}, { + id: '503', + title: 'Won', + variant: 'success' +}, { + id: '504', + title: 'Lost', + variant: 'danger' +}]; +export const KanbanTaskData = [{ + id: '601', + sectionId: '501', + title: "AI Analytics Dashboard", + user: user4, + userName: "Mark Allen", + company: "Amazon Web Services", + date: "30 May, 2025", + messages: 2, + tasks: 3, + amount: 95000, + status: "lead" +}, { + id: '602', + sectionId: '501', + title: "Mobile App Redesign", + user: user2, + userName: "Alex Carter", + company: "ByteCraft Studios", + date: "12 Jun, 2025", + messages: 1, + tasks: 5, + amount: 72000, + status: "lead" +}, { + id: '603', + sectionId: '501', + title: "Website Revamp", + user: user5, + userName: "Emily Rose", + company: "NextGen UI", + date: "18 Jun, 2025", + messages: 4, + tasks: 2, + amount: 45500, + status: "lead" +}, { + id: '604', + sectionId: '501', + title: "Campaign Strategy", + user: user6, + userName: "Ryan King", + company: "Visionary Labs", + date: "05 Jul, 2025", + messages: 0, + tasks: 1, + amount: 23000, + status: "lead" +}, { + id: '605', + sectionId: '502', + title: "Product Demo Scheduling", + user: user8, + userName: "Nina White", + company: "Innovexa", + date: "15 Jul, 2025", + messages: 3, + tasks: 4, + amount: 18750, + status: "negotiation" +}, { + id: '606', + sectionId: '502', + title: "CRM Integration Task", + user: user9, + userName: "Amit Rao", + company: "CoreSync Ltd.", + date: "22 Jul, 2025", + messages: 7, + tasks: 4, + amount: 39900, + status: "negotiation" +}, { + id: '607', + sectionId: '503', + title: "Enterprise License Upgrade", + user: user1, + userName: "Sophia Lee", + company: "Zentrix Corp", + date: "01 Jul, 2025", + messages: 5, + tasks: 7, + amount: 120000, + status: "won" +}, { + id: '608', + sectionId: '503', + title: "Custom CRM Implementation", + user: user2, + userName: "Mark J.", + company: "DeltaSoft", + date: "28 Jun, 2025", + messages: 3, + tasks: 1, + amount: 89500, + status: "won" +}, { + id: '609', + sectionId: '503', + title: "API Subscription Expansion", + user: user3, + userName: "Raj Patel", + company: "Netwise Solutions", + date: "25 Jun, 2025", + messages: 1, + tasks: 5, + amount: 58000, + status: "won" +}, { + id: '610', + sectionId: '503', + title: "Annual Cloud Retainer", + user: user5, + userName: "Tina Ray", + company: "SkyVault Inc.", + date: "21 Jun, 2025", + messages: 9, + tasks: 6, + amount: 135000, + status: "won" +}, { + id: '611', + sectionId: '503', + title: "Marketing Automation Deal", + user: user6, + userName: "Mohit Chauhan", + company: "CloudReach", + date: "18 Jun, 2025", + messages: 5, + tasks: 4, + amount: 62500, + status: "won" +}, { + id: '612', + sectionId: '504', + title: "E-commerce Platform Proposal", + user: user7, + userName: "Julia Mason", + company: "QuickCart", + date: "14 Jul, 2025", + messages: 2, + tasks: 6, + amount: 55000, + status: "lost" +}, { + id: '613', + sectionId: '504', + title: "Social Media Integration Deal", + user: user8, + userName: "Ethan Cruz", + company: "BuzzPro Media", + date: "10 Jul, 2025", + messages: 8, + tasks: 3, + amount: 38400, + status: "lost" +}]; \ No newline at end of file diff --git a/src/views/apps/crm/pipeline/index.jsx b/src/views/apps/crm/pipeline/index.jsx new file mode 100644 index 0000000..9ee9eac --- /dev/null +++ b/src/views/apps/crm/pipeline/index.jsx @@ -0,0 +1,11 @@ +import { Container } from 'react-bootstrap'; +import PageBreadcrumb from '@/components/PageBreadcrumb'; +import PipelinePage from '@/views/apps/crm/pipeline/components/PipelinePage'; +const Index = () => { + return + + + + ; +}; +export default Index; \ No newline at end of file diff --git a/src/views/apps/crm/proposals/components/ProposalsCard.jsx b/src/views/apps/crm/proposals/components/ProposalsCard.jsx new file mode 100644 index 0000000..7f6f5d3 --- /dev/null +++ b/src/views/apps/crm/proposals/components/ProposalsCard.jsx @@ -0,0 +1,49 @@ +import React from 'react'; +import { Card, CardBody, Col, Row } from 'react-bootstrap'; +import { TbArrowDown, TbArrowUp, TbClock, TbCurrencyDollar } from 'react-icons/tb'; +const ProposalsCard = () => { + const cards = [{ + value: '38', + change: '+12.4%', + icon: , + desc: 'Total proposals submitted' + }, { + value: '19', + change: '+9.8%', + icon: , + desc: 'Approved proposals' + }, { + value: '7', + change: '-4.2%', + icon: , + desc: 'Declined proposals' + }, { + value: '$112,000', + change: 'Top value', + icon: , + desc: 'Highest proposal value' + }, { + value: <> + 3.2 days + , + change: '+0.8%', + icon: , + desc: 'Avg. review time' + }]; + return + {cards.map((card, index) => + + +
    +
    {card.value}
    + + {card.change} {card.icon} + +
    +

    {card.desc}

    +
    +
    + )} +
    ; +}; +export default ProposalsCard; \ No newline at end of file diff --git a/src/views/apps/crm/proposals/components/ProposalsModal.jsx b/src/views/apps/crm/proposals/components/ProposalsModal.jsx new file mode 100644 index 0000000..0d61933 --- /dev/null +++ b/src/views/apps/crm/proposals/components/ProposalsModal.jsx @@ -0,0 +1,103 @@ +import { Button, Col, Form, FormControl, FormGroup, FormLabel, Modal, ModalBody, ModalFooter, ModalHeader, ModalTitle, Row } from "react-bootstrap"; +import FlatPicker from 'react-flatpickr'; +const ProposalsModal = ({ + show, + onHide +}) => { + return + + Create New Proposal + + +
    + + + + + + Proposale Id + + + + + + + + Subject + + + + + + + + Send To (Client) + + + + + + + + Value (USD) + + + + + + + + Status + + + + + + + + + + + + + + + Tags + + + + + + + + Created Date + + + + + + + + Open Till + + + + + + + + + + +
    +
    ; +}; +export default ProposalsModal; \ No newline at end of file diff --git a/src/views/apps/crm/proposals/components/ProposalsTable.jsx b/src/views/apps/crm/proposals/components/ProposalsTable.jsx new file mode 100644 index 0000000..f53e314 --- /dev/null +++ b/src/views/apps/crm/proposals/components/ProposalsTable.jsx @@ -0,0 +1,202 @@ +import { createColumnHelper, getCoreRowModel, getFilteredRowModel, getPaginationRowModel, getSortedRowModel, useReactTable } from '@tanstack/react-table'; +import { Link } from "react-router"; +import { useState } from 'react'; +import { Button, Card, CardFooter, CardHeader } from 'react-bootstrap'; +import { LuDollarSign, LuSearch, LuShuffle } from 'react-icons/lu'; +import { TbEdit, TbEye, TbPlus, TbTrash } from 'react-icons/tb'; +import DataTable from '@/components/table/DataTable'; +import DeleteConfirmationModal from '@/components/table/DeleteConfirmationModal'; +import TablePagination from '@/components/table/TablePagination'; +import ProposalsModal from './ProposalsModal'; +import { proposals } from '../data'; +const columnHelper = createColumnHelper(); +const ProposalsTable = () => { + const [showModal, setShowModal] = useState(false); + const columns = [{ + id: 'select', + header: ({ + table + }) => , + cell: ({ + row + }) => , + enableSorting: false, + enableColumnFilter: false + }, columnHelper.accessor('id', { + header: 'Estimate ID', + cell: ({ + row + }) => + {row.original.id} + + }), columnHelper.accessor('subject', { + header: 'Subject' + }), columnHelper.accessor('sendTo', { + header: 'Send To', + cell: ({ + row + }) =>
    +
    + {row.original.sendTo.name} +
    + + {row.original.sendTo.name} + +
    + }), columnHelper.accessor('value', { + header: 'Value' + }), columnHelper.accessor('created', { + header: 'Created', + cell: ({ + row + }) => <> + {row.original.created} {row.original.createdTime} + + }), columnHelper.accessor('openTill', { + header: 'Open Till', + cell: ({ + row + }) => <> + {row.original.openTill} {row.original.openTillTime} + + }), columnHelper.accessor('status', { + header: 'Status', + cell: ({ + row + }) => { + const color = row.original.status === 'Declined' ? 'badge-label bg-danger-subtle text-danger badge-label fs-xs' : row.original.status === 'In Review' ? 'badge-label bg-info-subtle text-info fs-xs' : row.original.status === 'Approved' ? 'badge-label bg-success-subtle text-success badge-label fs-xs' : row.original.status === 'Pending' ? 'badge-label bg-warning-subtle text-warning fs-xs' : 'badge-label bg-secondary-subtle text-secondary fs-xs'; + return {row.original.status}; + } + }), { + header: 'Actions', + cell: ({ + row + }) =>
    + + + +
    + }]; + const [data, setData] = useState(() => [...proposals]); + const [globalFilter, setGlobalFilter] = useState(''); + const [sorting, setSorting] = useState([]); + const [pagination, setPagination] = useState({ + pageIndex: 0, + pageSize: 8 + }); + const [selectedRowIds, setSelectedRowIds] = useState({}); + const table = useReactTable({ + data, + columns, + state: { + sorting, + globalFilter, + pagination, + rowSelection: selectedRowIds + }, + onSortingChange: setSorting, + onGlobalFilterChange: setGlobalFilter, + onPaginationChange: setPagination, + onRowSelectionChange: setSelectedRowIds, + getCoreRowModel: getCoreRowModel(), + getSortedRowModel: getSortedRowModel(), + getFilteredRowModel: getFilteredRowModel(), + getPaginationRowModel: getPaginationRowModel(), + globalFilterFn: 'includesString', + enableColumnFilters: true, + enableRowSelection: true + }); + const pageIndex = table.getState().pagination.pageIndex; + const pageSize = table.getState().pagination.pageSize; + const totalItems = table.getFilteredRowModel().rows.length; + const start = pageIndex * pageSize + 1; + const end = Math.min(start + pageSize - 1, totalItems); + const [showDeleteModal, setShowDeleteModal] = useState(false); + const toggleDeleteModal = () => { + setShowDeleteModal(!showDeleteModal); + }; + const handleDelete = () => { + const selectedIds = new Set(Object.keys(selectedRowIds)); + setData(old => old.filter((_, idx) => !selectedIds.has(idx.toString()))); + setSelectedRowIds({}); + setPagination({ + ...pagination, + pageIndex: 0 + }); + setShowDeleteModal(false); + }; + return + +
    +
    + setGlobalFilter(e.target.value)} /> + +
    + + {Object.keys(selectedRowIds).length > 0 && } + + + setShowModal(false)} /> +
    + +
    + Filter By: + +
    + + +
    + +
    + + +
    + +
    + +
    +
    +
    + + + {table.getRowModel().rows.length > 0 && + + } + + +
    ; +}; +export default ProposalsTable; \ No newline at end of file diff --git a/src/views/apps/crm/proposals/data.js b/src/views/apps/crm/proposals/data.js new file mode 100644 index 0000000..79779fd --- /dev/null +++ b/src/views/apps/crm/proposals/data.js @@ -0,0 +1,181 @@ +import logoGoogle from '@/assets/images/logos/google.svg'; +import logoApple from '@/assets/images/logos/apple.svg'; +import logoMeta from '@/assets/images/logos/meta.svg'; +import logoFigma from '@/assets/images/logos/figma.svg'; +import logoAirbnb from '@/assets/images/logos/airbnb.svg'; +import logoAsana from '@/assets/images/logos/asana.svg'; +import logoMicrosoft from '@/assets/images/logos/microsoft.svg'; +import logoDropbox from '@/assets/images/logos/dropbox.svg'; +import logoOpenai from '@/assets/images/logos/openai.svg'; +import logoHandm from '@/assets/images/logos/h&m.svg'; +import logoShell from '@/assets/images/logos/shell.svg'; +export const proposals = [{ + id: '#PS008101', + subject: 'SEO Optimization Campaign', + sendTo: { + name: 'Google Inc.', + logo: logoGoogle + }, + value: '$18,900', + created: '12 Jul, 2025', + createdTime: '10:00 AM', + openTill: '30 Jul, 2025', + openTillTime: '11:59 PM', + status: 'Pending' +}, { + id: '#PS008102', + subject: 'New Mobile App Development', + sendTo: { + name: 'Apple Inc.', + logo: logoApple + }, + value: '$35,000', + created: '18 Jul, 2025', + createdTime: '3:15 PM', + openTill: '15 Aug, 2025', + openTillTime: '12:00 PM', + status: 'Approved' +}, { + id: '#PS008103', + subject: 'Marketing Retargeting Plan', + sendTo: { + name: 'Meta Platforms', + logo: logoMeta + }, + value: '$22,750', + created: '22 Jul, 2025', + createdTime: '9:30 AM', + openTill: '10 Aug, 2025', + openTillTime: '5:00 PM', + status: 'Declined' +}, { + id: '#PS008104', + subject: 'UI/UX Redesign for SaaS App', + sendTo: { + name: 'Figma Inc.', + logo: logoFigma + }, + value: '$9,800', + created: '24 Jul, 2025', + createdTime: '11:20 AM', + openTill: '07 Aug, 2025', + openTillTime: '6:00 PM', + status: 'In Review' +}, { + id: '#PS008105', + subject: 'Cloud Infrastructure Setup', + sendTo: { + name: 'AirBNB', + logo: logoAirbnb + }, + value: '$45,000', + created: '26 Jul, 2025', + createdTime: '9:10 AM', + openTill: '09 Aug, 2025', + openTillTime: '5:00 PM', + status: 'Approved' +}, { + id: '#PS008106', + subject: 'Digital Marketing Strategy', + sendTo: { + name: 'Asana', + logo: logoAsana + }, + value: '$27,600', + created: '25 Jul, 2025', + createdTime: '2:30 PM', + openTill: '08 Aug, 2025', + openTillTime: '3:00 PM', + status: 'Pending' +}, { + id: '#PS008107', + subject: 'Backend API Integration', + sendTo: { + name: 'Microsoft Enterprise', + logo: logoMicrosoft + }, + value: '$14,200', + created: '23 Jul, 2025', + createdTime: '1:00 PM', + openTill: '01 Aug, 2025', + openTillTime: '2:00 PM', + status: 'Sent' +}, { + id: '#PS008108', + subject: 'Performance Audit Report', + sendTo: { + name: 'Dropbox', + logo: logoDropbox + }, + value: '$6,500', + created: '20 Jul, 2025', + createdTime: '4:45 PM', + openTill: '28 Jul, 2025', + openTillTime: '11:00 AM', + status: 'Declined' +}, { + id: '#PS008109', + subject: 'Data Migration Strategy', + sendTo: { + name: 'Dropbox Inc.', + logo: logoDropbox + }, + value: '$19,400', + created: '19 Jul, 2025', + createdTime: '3:20 PM', + openTill: '03 Aug, 2025', + openTillTime: '10:00 AM', + status: 'Pending' +}, { + id: '#PS008110', + subject: 'Customer Portal UI Design', + sendTo: { + name: 'ChatGPT', + logo: logoOpenai + }, + value: '$31,000', + created: '18 Jul, 2025', + createdTime: '12:15 PM', + openTill: '02 Aug, 2025', + openTillTime: '6:00 PM', + status: 'Approved' +}, { + id: '#PS008111', + subject: 'Mobile Analytics Dashboard', + sendTo: { + name: 'Mixpanel', + logo: logoHandm + }, + value: '$15,900', + created: '16 Jul, 2025', + createdTime: '4:00 PM', + openTill: '30 Jul, 2025', + openTillTime: '5:00 PM', + status: 'Sent' +}, { + id: '#PS008112', + subject: 'AI-Powered Lead Generator', + sendTo: { + name: 'OpenAI', + logo: logoOpenai + }, + value: '$52,300', + created: '21 Jul, 2025', + createdTime: '1:45 PM', + openTill: '04 Aug, 2025', + openTillTime: '11:00 AM', + status: 'In Review' +}, { + id: '#PS008113', + subject: 'Enterprise Security Audit', + sendTo: { + name: 'Cloudflare', + logo: logoShell + }, + value: '$40,750', + created: '22 Jul, 2025', + createdTime: '9:15 AM', + openTill: '06 Aug, 2025', + openTillTime: '4:00 PM', + status: 'Declined' +}]; \ No newline at end of file diff --git a/src/views/apps/crm/proposals/index.jsx b/src/views/apps/crm/proposals/index.jsx new file mode 100644 index 0000000..601aedd --- /dev/null +++ b/src/views/apps/crm/proposals/index.jsx @@ -0,0 +1,16 @@ +import PageBreadcrumb from '@/components/PageBreadcrumb'; +import { Col, Container, Row } from 'react-bootstrap'; +import ProposalsCard from './components/ProposalsCard'; +import ProposalsTable from './components/ProposalsTable'; +const Page = () => { + return + + + + + + + + ; +}; +export default Page; \ No newline at end of file diff --git a/src/views/apps/crm/types.js b/src/views/apps/crm/types.js new file mode 100644 index 0000000..8cec2e9 --- /dev/null +++ b/src/views/apps/crm/types.js @@ -0,0 +1 @@ +export {}; \ No newline at end of file diff --git a/src/views/apps/email/components/EmailSidebar.jsx b/src/views/apps/email/components/EmailSidebar.jsx new file mode 100644 index 0000000..fa9cdd5 --- /dev/null +++ b/src/views/apps/email/components/EmailSidebar.jsx @@ -0,0 +1,53 @@ +import { emailSidebarMenu } from '@/views/apps/email/data'; +import clsx from 'clsx'; +import { Link } from "react-router"; +import { TbChartDonutFilled } from 'react-icons/tb'; +import SimpleBar from "simplebar-react"; +const EmailSidebar = () => { + const labels = [{ + name: 'Business', + variant: 'primary' + }, { + name: 'Personal', + variant: 'purple' + }, { + name: 'Friends', + variant: 'info' + }, { + name: 'Family', + variant: 'warning' + }]; + return +
    + + Compose + +
    + {emailSidebarMenu.map(({ + badge, + link, + label, + icon: Icon + }, idx) => + + {label} + {badge && {badge.text}} + )} + +
    + Labels +
    + {labels.map(({ + name, + variant + }, idx) => + + {name} + )} +
    +
    +
    ; +}; +export default EmailSidebar; \ No newline at end of file diff --git a/src/views/apps/email/data.js b/src/views/apps/email/data.js new file mode 100644 index 0000000..f70fb5a --- /dev/null +++ b/src/views/apps/email/data.js @@ -0,0 +1,253 @@ +import { TbAlertCircle, TbArchive, TbArrowForwardUp, TbBan, TbClock, TbClockPause, TbFolder, TbInbox, TbMailOpened, TbPencil, TbSend, TbStar, TbTag, TbTrash } from 'react-icons/tb'; +import user1 from '@/assets/images/users/user-1.jpg'; +import user10 from '@/assets/images/users/user-10.jpg'; +import user2 from '@/assets/images/users/user-2.jpg'; +import user3 from '@/assets/images/users/user-3.jpg'; +import user5 from '@/assets/images/users/user-5.jpg'; +import user6 from '@/assets/images/users/user-6.jpg'; +import user7 from '@/assets/images/users/user-7.jpg'; +import user8 from '@/assets/images/users/user-8.jpg'; +import user9 from '@/assets/images/users/user-9.jpg'; +export const actions = [{ + icon: TbTrash, + label: 'Delete' +}, { + icon: TbMailOpened, + label: 'Mark as Read' +}, { + icon: TbTag, + label: 'Tag' +}, { + icon: TbArchive, + label: 'Archive' +}, { + icon: TbFolder, + label: 'Move to Folder' +}, { + icon: TbArrowForwardUp, + label: 'Forward' +}, { + icon: TbClockPause, + label: 'Snooze' +}, { + icon: TbAlertCircle, + label: 'Mark as Important' +}]; +export const emails = [{ + id: 1, + isStarred: true, + avatar: user5, + name: 'Amanda Reyes', + subject: 'Design Review & Feedback', + snippet: 'I’ve reviewed the updated UI mockups. Great work overall—just a few...', + attachments: 3, + date: 'Apr 20', + time: '10:12 AM', + isRead: false +}, { + id: 2, + isStarred: true, + avatar: user2, + name: 'George Thomas', + subject: 'Request for Meeting', + snippet: 'Are you available for a quick sync-up this week regarding the roadmap?', + attachments: 1, + date: 'Apr 19', + time: '4:45 PM', + isRead: false +}, { + id: 3, + isStarred: false, + variant: 'text-bg-primary', + name: 'Lucas Martin', + subject: 'Q2 Marketing Strategy', + snippet: "Here's the proposed outline for our Q2 campaign and goals...", + attachments: 2, + date: 'Apr 19', + time: '11:30 AM', + isRead: true +}, { + id: 4, + isStarred: true, + avatar: user6, + name: 'Sophia Lee', + subject: 'Final Invoice Attached', + snippet: 'Attached is the invoice for the April sprint deliverables. Let me know...', + attachments: 1, + date: 'Apr 18', + time: '6:05 PM', + isRead: true +}, { + id: 5, + isStarred: false, + variant: 'text-bg-danger', + name: 'Daniel Kim', + subject: 'Team Offsite Agenda', + snippet: 'Here’s a rough outline for the team offsite activities next month...', + attachments: 0, + date: 'Apr 18', + time: '1:20 PM', + isRead: true +}, { + id: 6, + isStarred: false, + variant: 'bg-purple-subtle text-purple', + name: 'Chloe Bennett', + subject: 'Welcome to the Project!', + snippet: 'Excited to have you on board. Let’s have a quick intro call tomorrow...', + attachments: 0, + date: 'Apr 17', + time: '9:18 AM', + isRead: true +}, { + id: 7, + isStarred: true, + avatar: user6, + name: 'James Carter', + subject: 'Meeting Follow-up Notes', + snippet: 'Thanks for the insights today. Please find the summary and action points...', + attachments: 1, + date: 'Apr 17', + time: '2:45 PM', + isRead: false +}, { + id: 8, + isStarred: false, + avatar: user7, + name: 'Sophia Allen', + subject: 'Project Files Delivered', + snippet: 'The final batch of designs and documentation has been uploaded to the drive...', + attachments: 2, + date: 'Apr 16', + time: '11:05 AM', + isRead: true +}, { + id: 9, + isStarred: false, + avatar: user8, + name: 'Michael Chen', + subject: 'Re: Budget Estimate', + snippet: 'The budget looks good overall, but we might need to adjust the Q3 allocations...', + attachments: 1, + date: 'Apr 15', + time: '6:28 PM', + isRead: false +}, { + id: 10, + isStarred: false, + variant: 'text-bg-dark', + name: 'Emma Watson', + subject: 'Collaboration Opportunity', + snippet: 'I’d love to chat about a possible partnership on our upcoming launch event...', + attachments: 0, + date: 'Apr 14', + time: '3:59 PM', + isRead: true +}, { + id: 11, + isStarred: true, + avatar: user10, + name: 'Daniel White', + subject: 'Reschedule Request', + snippet: 'Can we move our call to Friday afternoon instead? Something urgent came up...', + attachments: 0, + date: 'Apr 13', + time: '10:20 AM', + isRead: true +}, { + id: 12, + isStarred: true, + avatar: user3, + name: 'James Walker', + subject: 'Monthly Report Submission', + snippet: 'Please find the attached monthly performance report for your review...', + attachments: 1, + date: 'Apr 16', + time: '11:42 AM', + isRead: false +}, { + id: 13, + isStarred: false, + variant: 'text-bg-warning', + name: 'Emma Johnson', + subject: 'Design Assets Update', + snippet: 'I’ve uploaded the latest illustrations and icons to the shared folder...', + attachments: 0, + date: 'Apr 16', + time: '8:09 AM', + isRead: true +}, { + id: 14, + isStarred: true, + avatar: user9, + name: 'Noah Patel', + subject: 'Updated Meeting Schedule', + snippet: "Please review the adjusted times for next week's client meetings...", + attachments: 2, + date: 'Apr 15', + time: '4:55 PM', + isRead: true +}, { + id: 15, + isStarred: false, + avatar: user3, + name: 'Ava Thompson', + subject: 'Client Feedback Notes', + snippet: 'Attached is the client feedback from last week’s demo session...', + attachments: 1, + date: 'Apr 15', + time: '9:32 AM', + isRead: true +}, { + id: 16, + isStarred: false, + avatar: user1, + name: 'Liam Garcia', + subject: 'Weekly Sync Meeting', + snippet: 'Let’s discuss blockers and updates on the current sprints in our sync...', + attachments: 0, + date: 'Apr 14', + time: '3:30 PM', + isRead: true +}]; +export const emailSidebarMenu = [{ + label: 'Inbox', + icon: TbInbox, + link: '/inbox', + badge: { + variant: 'danger', + text: '21' + } +}, { + label: 'Sent', + icon: TbSend, + link: '' +}, { + label: 'Starred', + icon: TbStar, + link: '' +}, { + label: 'Scheduled', + icon: TbClock, + link: '' +}, { + label: 'Drafts', + icon: TbPencil, + link: '', + badge: { + variant: 'secondary', + text: '9' + } +}, { + label: 'Important', + icon: TbAlertCircle, + link: '' +}, { + label: 'Spam', + icon: TbBan, + link: '' +}, { + label: 'Trash', + icon: TbTrash, + link: '' +}]; \ No newline at end of file diff --git a/src/views/apps/email/email-compose/components/NewEmail.jsx b/src/views/apps/email/email-compose/components/NewEmail.jsx new file mode 100644 index 0000000..d8cdf8f --- /dev/null +++ b/src/views/apps/email/email-compose/components/NewEmail.jsx @@ -0,0 +1,141 @@ +import { useState } from 'react'; +import { Button, Card, CardHeader, Collapse, Dropdown, DropdownDivider, DropdownItem, DropdownMenu, DropdownToggle, Offcanvas, OverlayTrigger, Tooltip } from 'react-bootstrap'; +import { LuSearch } from 'react-icons/lu'; +import { TbChevronDown, TbMenu2, TbSend2, TbSettings, TbTrash, TbX } from 'react-icons/tb'; +import EmailSidebar from '@/views/apps/email/components/EmailSidebar'; +import useToggle from '@/hooks/useToggle'; +import CustomQuill from "@/components/CustomQuill"; +import SimpleBar from "simplebar-react"; +const modules = { + toolbar: [[{ + header: [false, 1, 2, 3, 4, 5, 6] + }], ['bold', 'italic', 'underline', 'strike'], [{ + color: [] + }, { + background: [] + }], ['blockquote', 'code-block'], [{ + list: 'ordered' + }, { + list: 'bullet' + }], ['link', 'image', 'video']] +}; +const NewEmail = () => { + const [show, setShow] = useState(false); + const { + isTrue: isCcOpen, + toggle: toggleCc + } = useToggle(); + const { + isTrue: isBccOpen, + toggle: toggleBcc + } = useToggle(); + const [value, setValue] = useState(`

    + Hi + + James + + , +

    +

    I hope you're doing well.

    +

    I'm reaching out regarding the latest updates on our project. Please find the summary below:

    +
      +
    • All UI components have been reviewed and finalized.
    • +
    • The mobile responsiveness is now optimized across all breakpoints.
    • +
    • We’re awaiting final client feedback before deployment.
    • +
    +

    Let me know if you need anything else or if there's anything you'd like us to adjust.

    +

    +
    +

    +

    Best regards,

    +

    + Damian +

    `); + return <> + setShow(false)} className="offcanvas-lg offcanvas-start outlook-left-menu outlook-left-menu-sm" tabIndex={-1} id="emailSidebaroffcanvas"> + + + + + +
    + + +
    +
    + +

    Compose Message

    +
    + +
    + + To: + + +
    + +
    + + Cc: + +
    +
    + +
    + + Bcc: + +
    +
    +
    + +
    +
    + +
    +
    +
    + + + + + Send & Archive + Schedule Send + Save as Draft + + Discard + + + Settings}> + + + Delete}> + + +
    +
    +
    +
    + ; +}; +export default NewEmail; \ No newline at end of file diff --git a/src/views/apps/email/email-compose/index.jsx b/src/views/apps/email/email-compose/index.jsx new file mode 100644 index 0000000..dcc7e9f --- /dev/null +++ b/src/views/apps/email/email-compose/index.jsx @@ -0,0 +1,12 @@ +import { Container } from 'react-bootstrap'; +import PageBreadcrumb from '@/components/PageBreadcrumb'; +import NewEmail from './components/NewEmail'; +const Index = () => { + return + +
    + +
    +
    ; +}; +export default Index; \ No newline at end of file diff --git a/src/views/apps/email/email-templates/index.jsx b/src/views/apps/email/email-templates/index.jsx new file mode 100644 index 0000000..f19f403 --- /dev/null +++ b/src/views/apps/email/email-templates/index.jsx @@ -0,0 +1,46 @@ +import { Row, Col, Container, Card, CardBody } from "react-bootstrap"; +import confirmImg from "@/assets/images/emails/confirm.png"; +import activatedImg from "@/assets/images/emails/activated.png"; +import marketingImg from "@/assets/images/emails/marketing.png"; +import invoiceImg from "@/assets/images/emails/invoice.png"; +import reportsImg from "@/assets/images/emails/reports.png"; +import resetPasswordImg from "@/assets/images/emails/reset-password.png"; +import warningImg from "@/assets/images/emails/warning-mail.png"; +import PageBreadcrumb from '@/components/PageBreadcrumb'; +const emailTemplates = [{ + title: "Basic Action", + image: confirmImg +}, { + title: "Activated Account", + image: activatedImg +}, { + title: "Marketing", + image: marketingImg +}, { + title: "Invoice", + image: invoiceImg +}, { + title: "Reports", + image: reportsImg +}, { + title: "Reset Password", + image: resetPasswordImg +}, { + title: "Warning", + image: warningImg +}]; +export default function EmailTemplates() { + return + + + + + {emailTemplates.map((item, index) => +

    {item.title}

    + {item.title} + )} +
    +
    +
    +
    ; +} \ No newline at end of file diff --git a/src/views/apps/email/inbox/[inboxId]/components/EmailDetails.jsx b/src/views/apps/email/inbox/[inboxId]/components/EmailDetails.jsx new file mode 100644 index 0000000..fe43ec5 --- /dev/null +++ b/src/views/apps/email/inbox/[inboxId]/components/EmailDetails.jsx @@ -0,0 +1,310 @@ +import { Link } from "react-router"; +import { useState } from 'react'; +import { Card, CardHeader, Collapse, Offcanvas, OverlayTrigger, Tooltip } from 'react-bootstrap'; +import { LuSearch } from 'react-icons/lu'; +import { TbArrowBigLeft, TbArrowLeftDashed, TbBold, TbDotsVertical, TbDownload, TbFileText, TbItalic, TbLink, TbMailForward, TbMailOpened, TbMenu2, TbPaperclip, TbPhoto, TbPhotoUp, TbPrinter, TbSend, TbShare3, TbStarFilled, TbVideo, TbX } from 'react-icons/tb'; +import EmailSidebar from '@/views/apps/email/components/EmailSidebar'; +import { actions } from '@/views/apps/email/data'; +import useToggle from '@/hooks/useToggle'; +import user3 from '@/assets/images/users/user-3.jpg'; +import user5 from '@/assets/images/users/user-5.jpg'; +import user6 from '@/assets/images/users/user-6.jpg'; +import SimpleBar from "simplebar-react"; +const replyToolbarButtons = [{ + title: 'Bold', + icon: TbBold +}, { + title: 'Italic', + icon: TbItalic +}, { + title: 'Attach files', + icon: TbPaperclip +}, { + title: 'Insert link', + icon: TbLink +}, { + title: 'Insert photo', + icon: TbPhotoUp +}]; +const EmailDetails = () => { + const [show, setShow] = useState(false); + const { + isTrue: isOpenCollapse1, + toggle: toggleCollapse1 + } = useToggle(); + const { + isTrue: isOpenCollapse2, + toggle: toggleCollapse2 + } = useToggle(); + const { + isTrue: isOpenCollapse3, + toggle: toggleCollapse3 + } = useToggle(true); + const { + isTrue: isOpenReply, + toggle: toggleReply + } = useToggle(); + return <> + setShow(false)} className="offcanvas-lg offcanvas-start outlook-left-menu outlook-left-menu-sm" tabIndex={-1} id="emailSidebaroffcanvas"> + + + + + +
    + + +
    +
    + +
    + Back to Inbox} placement="top"> + + + + + + {actions.slice(0, 4).map(({ + label, + icon: Icon + }, idx) => {label}} placement="top" key={idx}> + + )} +
    +
    + + +
    +
    + +

    Design Reviews & Feedback

    + +
    +
    +
    + User Avatar +
    +
    John Maxwell
    +

    john.maxwell@uxstudio.com

    +
    +
    +
    + + + + Apr 11, 07:47 AM +
    +
    + +
    +
    +

    Hey team,

    +

    + I reviewed the new dashboard layout and overall it's looking solid. The spacing and typography are much better than the previous + version. +

    +

    A couple of suggestions:

    +
      +
    • Make the chart legends slightly smaller and lighter in color.
    • +
    • Try a softer drop shadow for the card components – they feel a bit harsh right now.
    • +
    +

    Let me know if you need a quick call to discuss.

    +

    Cheers,

    +

    John

    +
    +
    +
    +
    + +
    +
    +
    + User Avatar +
    +
    Anika Patel
    +

    anika@creativemix.net

    +
    +
    +
    + + + + Apr 11, 09:05 AM +
    +
    + +
    +
    +

    Hello team,

    +

    + I did a final check on the landing page animations. Everything works smoothly except the testimonial slider – there's a tiny + jitter on loop transition. +

    +

    Maybe easing timing or delay tweaks can help fix it. Otherwise, great job!

    +

    Let me know once it's deployed to staging so I can do one last run-through.

    +

    Thanks,

    +

    Anika

    +
    +
    +
    +

    1 Attachment

    +
    +
    +
    + +
    +

    + + testimonial-glitch.mp4 + +

    +

    4.7 MB

    +
    + +
    +
    +
    +
    +
    + +
    +
    +
    + User Avatar +
    +
    Laura Chen
    +

    laura.chen@designteam.co

    +
    +
    +
    + + + + Apr 12, 11:42 AM +
    +
    + +
    +
    +

    Hi folks,

    +

    + Thanks for sharing the prototype. The color scheme and layout look clean, but I think we can still refine the mobile + responsiveness on the pricing page. +

    +

    Also, the button contrast on the footer needs more WCAG-friendly contrast – it's currently a bit hard to read.

    +

    I’ve attached some screenshots with markup for clarity.

    +

    Regards,

    +

    Laura

    +
    +
    +
    +

    2 Attachments

    +
    +
    +
    + +
    +

    + + footer-contrast-notes.pdf + +

    +

    1.2 MB

    +
    + +
    +
    + +
    +

    + + responsive-issues.png + +

    +

    850 KB

    +
    + +
    +
    +
    +
    +
    + +
    + +
    +
    + + +
    +
    + + + + +
    + + +
    + + + ; +}; +const CommonPostCard = ({ + name, + time, + children, + avatar, + description +}) => { + return + +
    + Generic placeholder image +
    +
    + + {name} + +
    +

    + {time} +

    +
    + + + + + + + + Edit Post + + + + Delete Post + + + + Share + + + + Pin to Top + + + + Report Post + + + +
    + {description &&

    {description}

    } + {children} + +
    + + Reply + + + + Liked! + + + Like + + + + Share + +
    +
    +
    ; +}; +const Post1 = () => { + return + + + Tall Image + + + + Top Right + Bottom Right + + + ; +}; +const Post2 = () => { + const comments = [{ + avatar: user1, + message: "That sounds awesome! Can't wait to see how you designed the UI.", + name: 'Liam Johnson', + time: '10 minutes ago', + reply: [{ + avatar: user2, + message: "I'm excited to see the final result! Let me know when you're ready to share.", + name: 'Sophia Martinez', + time: '5 minutes ago' + }] + }]; + return +
    + + Just finished a weekend project! Built a small weather app using React and OpenWeather API. Feeling excited to share the results with + everyone soon. 🚀 +
    +
    + {comments.map((comment, idx) =>
    1 + })} key={idx}> + Generic placeholder image +
    +
    + + {comment.name} + {' '} + {comment.time} +
    + {comment.message} +
    + {comment.reply && <> + + Reply + + {comment.reply.map((reply, idx) => +
    + + Generic placeholder image + +
    +
    + + {reply.name} + {' '} + {reply.time} +
    + {reply.message} +
    +
    +
    )} + } +
    +
    )} + +
    + + Generic placeholder image + +
    + +
    +
    +
    +
    ; +}; +const Post3 = () => { + return + + +
    + +
    + + +
    + +
    + +
    +
    ; +}; +const Post4 = () => { + return +
    🔥 Quick Poll: What’s your go-to front-end framework in 2025?
    +

    We’re gathering developer preferences for our next project. Cast your vote below! 💻

    +
    + + + + + + + +
    ; +}; +const Post5 = () => { + return +
    + 📢 You're Invited: Dev Meetup 2025 – Build with AI +
    +

    + Join developers and tech enthusiasts for an inspiring evening of AI-driven development talks, live demos, and networking opportunities. +

    +
      +
    • + Date: Friday, 25th July 2025 +
    • +
    • + Time: 6:00 PM IST +
    • +
    • + Location: Online (Zoom – link to be shared) +
    • +
    + +
    + + +
    +
    ; +}; +const AchievementPost = () => { + return + +

    🏆

    +

    Congratulations, Anika! 🎉

    + +

    + You’ve hit 1,000 followers! Your content is making waves in the community! +

    + +
    +
    +
    Posts
    + 135 +
    +
    +
    Likes
    + 8,400 +
    +
    +
    Followers
    + 1,000 +
    +
    + + + + View Profile + +
    +
    ; +}; +const Feeds = () => { + return <> + + + + + + + + + + + + + + +
    + Loading... + +
    + ; +}; +export default Feeds; \ No newline at end of file diff --git a/src/views/apps/social-feed/components/Requests.jsx b/src/views/apps/social-feed/components/Requests.jsx new file mode 100644 index 0000000..1ac3fd4 --- /dev/null +++ b/src/views/apps/social-feed/components/Requests.jsx @@ -0,0 +1,91 @@ +import { Card, CardBody, CardHeader, CardTitle, Dropdown, DropdownItem, DropdownMenu, DropdownToggle } from 'react-bootstrap'; +import { TbBug, TbCheck, TbDotsVertical, TbRocket, TbTrash } from 'react-icons/tb'; +import { Link } from "react-router"; +import user3 from '@/assets/images/users/user-3.jpg'; +import user6 from '@/assets/images/users/user-6.jpg'; +const requests = [{ + avatar: user3, + title: 'Emily Zhang', + description: 'requested to collaborate on your design project.', + badge: { + text: 'New', + className: 'bg-primary' + }, + time: '2 minutes ago', + action: 'Accept' +}, { + icon: TbRocket, + iconBg: 'text-bg-info', + title: 'New Feature:', + description: 'Suggestion for dark mode support.', + badge: { + text: 'Pending', + className: 'bg-warning text-dark' + }, + time: '10 minutes ago', + action: 'Review' +}, { + avatar: user6, + title: 'Client Feedback:', + description: 'John Doe left a review on your dashboard.', + badge: { + text: 'Feedback', + className: 'bg-secondary' + }, + time: '30 minutes ago', + action: 'Respond' +}, { + icon: TbBug, + iconBg: 'text-bg-primary', + title: 'Bug Report:', + description: 'Login form issue on Safari mobile.', + badge: { + text: 'Urgent', + className: 'bg-danger' + }, + time: '1 hour ago', + action: 'View' +}]; +const Requests = () => { + return + + Requests + + + + + + + + Mark All as Read + + + + Clear All + + + + + + + {requests.map((item, idx) =>
    +
    + {item.avatar ? {item.title} :
    + {item.icon && } +
    } + +
    +

    + {item.title} {item.description} + {item.badge.text} +

    + {item.time} +
    +
    + + +
    )} +
    +
    ; +}; +export default Requests; \ No newline at end of file diff --git a/src/views/apps/social-feed/components/SocialProfile.jsx b/src/views/apps/social-feed/components/SocialProfile.jsx new file mode 100644 index 0000000..31826b5 --- /dev/null +++ b/src/views/apps/social-feed/components/SocialProfile.jsx @@ -0,0 +1,146 @@ +import { Card, CardBody, Dropdown, DropdownDivider, DropdownItem, DropdownMenu, DropdownToggle } from 'react-bootstrap'; +import { Link } from "react-router"; +import user3 from '@/assets/images/users/user-3.jpg'; +import usFlag from '@/assets/images/flags/us.svg'; +import { TbBell, TbBook, TbCalendarEvent, TbDotsVertical, TbHome, TbLayoutGrid, TbMessageCircle, TbSettings, TbTag, TbUsers } from 'react-icons/tb'; +import clsx from 'clsx'; +const mainMenu = [{ + label: 'News Feed', + link: '', + icon: TbHome +}, { + label: 'Messages', + link: '', + icon: TbMessageCircle, + badge: { + text: '5', + variant: 'danger' + } +}, { + label: 'Friends', + link: '', + icon: TbUsers +}, { + label: 'Notifications', + link: '', + icon: TbBell, + badge: { + text: '12', + variant: 'warning' + } +}, { + label: 'Groups', + link: '', + icon: TbLayoutGrid +}, { + label: 'Pages', + link: '', + icon: TbBook +}, { + label: 'Events', + link: '', + icon: TbCalendarEvent +}, { + label: 'Settings', + link: '', + icon: TbSettings +}]; +const categories = [{ + label: 'Technology', + link: '', + variant: 'primary' +}, { + label: 'Travel', + link: '', + variant: 'success' +}, { + label: 'Lifestyle', + link: '', + variant: 'danger' +}, { + label: 'Photography', + link: '', + variant: 'info' +}]; +const SocialProfile = () => { + return + +
    +
    + avatar +
    +
    +
    + + Geneva Lee + + US +
    +

    Content Creator

    +
    +
    + + + + + +
  • + + View Profile + +
  • +
  • + + Send Message + +
  • +
  • + + Copy Profile Link + +
  • +
  • + +
  • +
  • + + Edit Profile + +
  • +
  • + + Block User + +
  • +
  • + + Report User + +
  • +
    +
    +
    +
    + +
    + {mainMenu.map((item, idx) => + + {item.label} + {item.badge && {item.badge.text}} + )} + +
    + Categories +
    + + {categories.map((category, idx) => + + {category.label} + )} +
    +
    +
    ; +}; +export default SocialProfile; \ No newline at end of file diff --git a/src/views/apps/social-feed/components/Trending.jsx b/src/views/apps/social-feed/components/Trending.jsx new file mode 100644 index 0000000..4254adf --- /dev/null +++ b/src/views/apps/social-feed/components/Trending.jsx @@ -0,0 +1,59 @@ +import { Card, CardBody, CardHeader, CardTitle, Dropdown, DropdownItem, DropdownMenu, DropdownToggle } from 'react-bootstrap'; +import { TbAlertCircle, TbDotsVertical, TbRefresh, TbSettings, TbTrendingUp } from 'react-icons/tb'; +import { Link } from "react-router"; +import clsx from 'clsx'; +const trendings = [{ + title: 'Golden Globes:', + description: 'The 27 Best moments from the Golden Globe Awards', + url: '' +}, { + title: 'World Cricket:', + description: 'India has won ICC T20 World Cup Yesterday', + url: '' +}, { + title: 'Antarctica:', + description: 'Melting of Totten Glacier could cause high risk to areas near by sea', + url: '' +}, { + title: 'Global Tournament:', + description: 'America has won Football match Yesterday', + url: '' +}]; +const Trending = () => { + return + + Trending + + + + + + + + Refresh Feed + + + + Manage Topics + + + + Report Issue + + + + + + + {trendings.map((item, idx) =>
    + + + {item.title}: {item.description} + +
    )} +
    +
    ; +}; +export default Trending; \ No newline at end of file diff --git a/src/views/apps/social-feed/index.jsx b/src/views/apps/social-feed/index.jsx new file mode 100644 index 0000000..ae2b35d --- /dev/null +++ b/src/views/apps/social-feed/index.jsx @@ -0,0 +1,34 @@ +import PageBreadcrumb from '@/components/PageBreadcrumb'; +import { Col, Row } from 'react-bootstrap'; +import SocialProfile from '@/views/apps/social-feed/components/SocialProfile'; +import Feeds from '@/views/apps/social-feed/components/Feeds'; +import Activity from '@/views/apps/social-feed/components/Activity'; +import Trending from '@/views/apps/social-feed/components/Trending'; +import Requests from '@/views/apps/social-feed/components/Requests'; +import FeaturedVideo from '@/views/apps/social-feed/components/FeaturedVideo'; +const Page = () => { + return
    + + + + + + + + + + + + + + + + + + + + + +
    ; +}; +export default Page; \ No newline at end of file diff --git a/src/views/apps/social-feed/types.js b/src/views/apps/social-feed/types.js new file mode 100644 index 0000000..8cec2e9 --- /dev/null +++ b/src/views/apps/social-feed/types.js @@ -0,0 +1 @@ +export {}; \ No newline at end of file diff --git a/src/views/apps/support-center/ticket-create/index.jsx b/src/views/apps/support-center/ticket-create/index.jsx new file mode 100644 index 0000000..e0a5fc1 --- /dev/null +++ b/src/views/apps/support-center/ticket-create/index.jsx @@ -0,0 +1,94 @@ +import React, { useState } from 'react'; +import { Card, CardBody, CardHeader, Col, Container, Row } from 'react-bootstrap'; +import { TbPlus, TbX } from 'react-icons/tb'; +import PageBreadcrumb from '@/components/PageBreadcrumb'; +const Index = () => { + const initialState = { + requester: '', + email: '', + subject: '', + priority: '', + status: '', + tags: '', + description: '' + }; + const [form, setForm] = useState(initialState); + const handleChange = e => { + setForm({ + ...form, + [e.target.id]: e.target.value + }); + }; + const handleReset = () => { + setForm(initialState); + }; + return <> + + + + + + +
    Create New Support Ticket
    +
    + +
    { + e.preventDefault(); + }} onReset={handleReset}> + +
    + + +
    +
    + + +
    +
    + + +
    + + + + + + + + + + +
    + + +
    +
    + + +
    +
    + + +
    +
    +
    +
    + +
    +
    + + ; +}; +export default Index; \ No newline at end of file diff --git a/src/views/apps/support-center/ticket-details/components/TicketDetails.jsx b/src/views/apps/support-center/ticket-details/components/TicketDetails.jsx new file mode 100644 index 0000000..0da191d --- /dev/null +++ b/src/views/apps/support-center/ticket-details/components/TicketDetails.jsx @@ -0,0 +1,122 @@ +import user4 from "@/assets/images/users/user-4.jpg"; +import user5 from "@/assets/images/users/user-5.jpg"; +import { Card, CardBody, CardHeader, Col, Row } from 'react-bootstrap'; +import { Link } from "react-router"; +import { TbArrowLeft, TbPencil, TbX } from 'react-icons/tb'; +const TicketDetails = () => { + return + + +
    #SUP-2523 - App freezes when uploading files
    + Pending +
    + + + + +
    Requested By
    +
    + Ava Sullivan + Ava Sullivan +
    + + +
    Assigned Agent
    +
    + Liam Brooks + Liam Brooks +
    + +
    + + + + +
    Priority
    + High + + +
    Created On
    +

    05 Aug, 2025 1:20 PM

    + + +
    Due Date
    +

    09 Aug, 2025

    + +
    + + +
    +
    Description
    +

    + When trying to upload files through the project form, the application becomes unresponsive after selecting a file larger than 5MB. + This issue occurs consistently across browsers. Please investigate and apply a fix. +

    +
    + +
    +
    Tags
    + Upload + Performance + UI Bug +
    + +
    +
    Activity:
    +
    +
    +
    Just Now
    +
    +
    +
    Ticket Resolved
    +

    Agent closed the ticket after applying a patch for the file upload freeze issue.

    + By Liam Brooks +
    +
    +
    +
    Today, 10:40 AM
    +
    +
    +
    Status Changed to "In Progress"
    +

    Ticket was picked up by the assigned agent for investigation.

    + By Liam Brooks +
    +
    + + +
    +
    Yesterday, 4:15 PM
    +
    +
    +
    User Comment Added
    +

    User emphasized urgency due to impact on production file uploads.

    + By Ava Sullivan +
    +
    + + +
    +
    02 Aug, 2025 - 3:00 PM
    +
    +
    +
    Ticket Created
    +

    Ticket submitted regarding the app freezing on file upload.

    + By Ava Sullivan +
    +
    + +
    + +
    + + +
    + Edit Ticket + Close Ticket + Back to List +
    +
    +
    + ; +}; +export default TicketDetails; \ No newline at end of file diff --git a/src/views/apps/support-center/ticket-details/index.jsx b/src/views/apps/support-center/ticket-details/index.jsx new file mode 100644 index 0000000..e03ec82 --- /dev/null +++ b/src/views/apps/support-center/ticket-details/index.jsx @@ -0,0 +1,18 @@ +import PageBreadcrumb from '@/components/PageBreadcrumb'; +import { Col, Container, Row } from 'react-bootstrap'; +import TicketDetails from './components/TicketDetails'; +import ChatCard from '@/components/cards/ChatCard'; +const Index = () => { + return <> + + + + + + + + + + ; +}; +export default Index; \ No newline at end of file diff --git a/src/views/apps/support-center/tickets-list/components/TicketTabel.jsx b/src/views/apps/support-center/tickets-list/components/TicketTabel.jsx new file mode 100644 index 0000000..80f4774 --- /dev/null +++ b/src/views/apps/support-center/tickets-list/components/TicketTabel.jsx @@ -0,0 +1,233 @@ +import { useState } from 'react'; +import { Button, Card, CardFooter, CardHeader, Col, Row } from 'react-bootstrap'; +import { LuSearch, LuShuffle } from 'react-icons/lu'; +import { TbAlertTriangle, TbEdit, TbEye, TbPlus, TbTrash } from 'react-icons/tb'; +import { createColumnHelper, getCoreRowModel, getFilteredRowModel, getPaginationRowModel, getSortedRowModel, useReactTable } from '@tanstack/react-table'; +import DataTable from '@/components/table/DataTable'; +import DeleteConfirmationModal from '@/components/table/DeleteConfirmationModal'; +import TablePagination from '@/components/table/TablePagination'; +import { Link } from "react-router"; +import { tickets } from '../data'; +const columnHelper = createColumnHelper(); +const TicketTabel = () => { + const [data, setData] = useState(() => [...tickets]); + const [globalFilter, setGlobalFilter] = useState(''); + const [sorting, setSorting] = useState([]); + const [columnFilters, setColumnFilters] = useState([]); + const [pagination, setPagination] = useState({ + pageIndex: 0, + pageSize: 8 + }); + const [selectedRowIds, setSelectedRowIds] = useState({}); + const [showDeleteModal, setShowDeleteModal] = useState(false); + const columns = [{ + id: 'select', + header: ({ + table + }) => , + cell: ({ + row + }) => , + enableSorting: false, + enableColumnFilter: false + }, columnHelper.accessor('id', { + header: 'ID', + cell: ({ + row + }) => {row.original.id} + }), columnHelper.accessor('requestedBy', { + header: 'Requested By', + cell: ({ + row + }) =>
    + {row.original.requestedBy} + {row.original.requestedBy} +
    + }), columnHelper.accessor('subject', { + header: 'Ticket Subject' + }), columnHelper.accessor('agent', { + header: 'Assigned Agent', + cell: ({ + row + }) =>
    + {row.original.agent} + {row.original.agent} +
    + }), columnHelper.accessor('priority', { + header: 'Priority', + cell: ({ + row + }) => { + const color = row.original.priority === 'High' ? 'text-bg-danger' : row.original.priority === 'Medium' ? 'text-bg-warning' : row.original.priority === 'Low' ? 'text-bg-primary' : 'text-bg-danger'; + return {row.original.priority}; + } + }), columnHelper.accessor('status', { + header: 'Status', + filterFn: 'equalsString', + enableColumnFilter: true, + cell: ({ + row + }) => { + let badgeClass = ''; + switch (row.original.status) { + case 'Pending': + badgeClass = 'bg-warning-subtle text-warning'; + break; + case 'In Progress': + badgeClass = 'bg-info-subtle text-info'; + break; + case 'Resolved': + badgeClass = 'bg-success-subtle text-success'; + break; + case 'Closed': + badgeClass = 'bg-secondary-subtle text-secondary'; + break; + case 'Escalated': + badgeClass = 'bg-danger-subtle text-danger'; + break; + default: + badgeClass = 'bg-secondary-subtle text-secondary'; + } + return {row.original.status}; + } + }), columnHelper.accessor('createdAt', { + header: 'Date Created', + cell: ({ + row + }) => <> + {row.original.createdAt} {row.original.createdAtTime} + + }), columnHelper.accessor('dueDate', { + header: 'Due Date' + }), { + header: 'Actions', + cell: ({ + row + }) =>
    + + + +
    + }]; + const table = useReactTable({ + data, + columns, + state: { + sorting, + globalFilter, + columnFilters, + pagination, + rowSelection: selectedRowIds + }, + onSortingChange: setSorting, + onGlobalFilterChange: setGlobalFilter, + onColumnFiltersChange: setColumnFilters, + onPaginationChange: setPagination, + onRowSelectionChange: setSelectedRowIds, + getCoreRowModel: getCoreRowModel(), + getSortedRowModel: getSortedRowModel(), + getFilteredRowModel: getFilteredRowModel(), + getPaginationRowModel: getPaginationRowModel(), + globalFilterFn: 'includesString', + enableColumnFilters: true, + enableRowSelection: true + }); + const pageIndex = table.getState().pagination.pageIndex; + const pageSize = table.getState().pagination.pageSize; + const totalItems = table.getFilteredRowModel().rows.length; + const start = pageIndex * pageSize + 1; + const end = Math.min(start + pageSize - 1, totalItems); + const toggleDeleteModal = () => { + setShowDeleteModal(!showDeleteModal); + }; + const handleDelete = () => { + const selectedIds = new Set(Object.keys(selectedRowIds)); + setData(old => old.filter((_, idx) => !selectedIds.has(idx.toString()))); + setSelectedRowIds({}); + setPagination({ + ...pagination, + pageIndex: 0 + }); + setShowDeleteModal(false); + }; + return <> + + + + +
    +
    + setGlobalFilter(e.target.value)} /> + +
    + + {Object.keys(selectedRowIds).length > 0 && } + + + New Ticket + +
    + +
    + Filter By: + +
    + + +
    + +
    + + +
    + +
    + +
    +
    +
    + + + + {table.getRowModel().rows.length > 0 && + + } + + +
    + +
    + ; +}; +export default TicketTabel; \ No newline at end of file diff --git a/src/views/apps/support-center/tickets-list/components/TicketsWidget.jsx b/src/views/apps/support-center/tickets-list/components/TicketsWidget.jsx new file mode 100644 index 0000000..af9ce84 --- /dev/null +++ b/src/views/apps/support-center/tickets-list/components/TicketsWidget.jsx @@ -0,0 +1,60 @@ +import React from 'react'; +import { Card, CardBody, Col, Row } from 'react-bootstrap'; +import CountUp from 'react-countup'; +import { TbAlertTriangle, TbCheck, TbHourglass, TbTicket } from 'react-icons/tb'; +const TicketsWidget = () => { + const ticketsData = [{ + id: 1, + title: "Open Tickets", + value: 148, + icon: , + bgColor: "bg-primary-subtle", + textColor: "text-primary" + }, { + id: 2, + title: "Resolved Tickets", + value: 1289, + icon: , + bgColor: "bg-success-subtle", + textColor: "text-success" + }, { + id: 3, + title: "Pending Tickets", + value: 93, + icon: , + bgColor: "bg-info-subtle", + textColor: "text-info" + }, { + id: 4, + title: "Escalated Tickets", + value: 25, + icon: , + bgColor: "bg-danger-subtle", + textColor: "text-danger" + }]; + return + {ticketsData.map(ticket => + + +
    +
    + + {ticket.icon} + +
    +
    + +

    + +

    +

    + {ticket.title} +

    +
    +
    +
    +
    + )} +
    ; +}; +export default TicketsWidget; \ No newline at end of file diff --git a/src/views/apps/support-center/tickets-list/data.js b/src/views/apps/support-center/tickets-list/data.js new file mode 100644 index 0000000..4fa3950 --- /dev/null +++ b/src/views/apps/support-center/tickets-list/data.js @@ -0,0 +1,206 @@ +import user1 from '@/assets/images/users/user-1.jpg'; +import user2 from '@/assets/images/users/user-2.jpg'; +import user3 from '@/assets/images/users/user-3.jpg'; +import user4 from '@/assets/images/users/user-4.jpg'; +import user5 from '@/assets/images/users/user-5.jpg'; +import user6 from '@/assets/images/users/user-6.jpg'; +import user7 from '@/assets/images/users/user-7.jpg'; +import user8 from '@/assets/images/users/user-8.jpg'; +import user9 from '@/assets/images/users/user-9.jpg'; +import user10 from '@/assets/images/users/user-10.jpg'; +import { getColor } from '@/helpers/color'; +import { TbAlertTriangle, TbChecks, TbCodeDots, TbServer2 } from 'react-icons/tb'; +const sparklineConfig = (data, color) => ({ + chart: { + type: 'area', + height: 60, + sparkline: { + enabled: true + } + }, + stroke: { + curve: 'smooth', + width: 2 + }, + series: [{ + data + }], + colors: [color], + tooltip: { + enabled: false + } +}); +const dummyNewUsers = [Math.sin(0) * 50 + 500, Math.sin(1) * 60 + 500, Math.sin(2) * 70 + 500, Math.sin(3) * 80 + 500, Math.sin(4) * 90 + 500, Math.sin(5) * 100 + 500, Math.sin(6) * 110 + 500]; +const dummyActiveUsers = [89000 + Math.sin(0) * 500, 89200 + Math.sin(1) * 600, 89700 + Math.sin(2) * 700, 90500 + Math.sin(3) * 800, 91000 + Math.sin(4) * 900, 91300 + Math.sin(5) * 1000, 92000 + Math.sin(6) * 1100]; +const dummyBlockedUsers = [2600 + Math.sin(0) * 10, 2605 + Math.sin(1) * 12, 2610 + Math.sin(2) * 15, 2608 + Math.sin(3) * 18, 2612 + Math.sin(4) * 20]; +const dummyTables = [7000 + Math.sin(0) * 150, 7100 + Math.sin(1) * 160, 7200 + Math.sin(2) * 170, 7400 + Math.sin(3) * 180, 7850 + Math.sin(4) * 200]; +export const apiStatistics = [{ + title: 'Total API Calls', + value: '1,254,300', + icon: TbServer2, + variant: 'success', + chartOptions: () => sparklineConfig(dummyNewUsers, getColor('secondary')) +}, { + title: 'Successful Conversions', + value: '1,192,450', + icon: TbChecks, + variant: 'success', + chartOptions: () => sparklineConfig(dummyActiveUsers, getColor('warning')) +}, { + title: 'Failed Requests', + value: '61,850', + icon: TbAlertTriangle, + variant: 'danger', + chartOptions: () => sparklineConfig(dummyBlockedUsers, getColor('info')) +}, { + title: 'Active Endpoints', + value: '143', + icon: TbCodeDots, + variant: 'info', + chartOptions: () => sparklineConfig(dummyTables, getColor('danger')) +}]; +export const tickets = [{ + id: '#SUP-2451', + requestedBy: 'Emily Clark', + requestedByImg: user3, + subject: 'Unable to login with 2FA', + agent: 'Daniel Ray', + agentImg: user2, + priority: 'High', + status: 'Pending', + createdAt: '04 Aug, 2025', + createdAtTime: '11:30 AM', + dueDate: '08 Aug, 2025' +}, { + id: '#SUP-2517', + requestedBy: 'Lucas Graham', + requestedByImg: user9, + subject: 'Cannot upload profile image', + agent: 'Sarah Lee', + agentImg: user1, + priority: 'Medium', + status: 'In Progress', + createdAt: '05 Aug, 2025', + createdAtTime: '2:05 PM', + dueDate: '10 Aug, 2025' +}, { + id: '#SUP-2518', + requestedBy: 'Nina Patel', + requestedByImg: user4, + subject: 'Incorrect invoice total shown', + agent: 'Alex Morgan', + agentImg: user8, + priority: 'High', + status: 'Pending', + createdAt: '05 Aug, 2025', + createdAtTime: '10:42 AM', + dueDate: '07 Aug, 2025' +}, { + id: '#SUP-2519', + requestedBy: 'Michael Foster', + requestedByImg: user6, + subject: 'Website not loading on Safari', + agent: 'Jessica Hughes', + agentImg: user5, + priority: 'Low', + status: 'Resolved', + createdAt: '04 Aug, 2025', + createdAtTime: '6:20 PM', + dueDate: '06 Aug, 2025' +}, { + id: '#SUP-2520', + requestedBy: 'Isabella Reed', + requestedByImg: user7, + subject: 'Cannot change account email', + agent: 'Daniel Ray', + agentImg: user2, + priority: 'Medium', + status: 'In Progress', + createdAt: '03 Aug, 2025', + createdAtTime: '9:50 AM', + dueDate: '08 Aug, 2025' +}, { + id: '#SUP-2521', + requestedBy: 'Olivia White', + requestedByImg: user1, + subject: "Can't access dashboard after update", + agent: 'James Carter', + agentImg: user9, + priority: 'High', + status: 'Escalated', + createdAt: '05 Aug, 2025', + createdAtTime: '7:45 AM', + dueDate: '06 Aug, 2025' +}, { + id: '#SUP-2522', + requestedBy: 'Emma King', + requestedByImg: user10, + subject: 'Feature request: export as PDF', + agent: 'Harper Wells', + agentImg: user3, + priority: 'Low', + status: 'Closed', + createdAt: '01 Aug, 2025', + createdAtTime: '4:10 PM', + dueDate: '05 Aug, 2025' +}, { + id: '#SUP-2523', + requestedBy: 'Ava Sullivan', + requestedByImg: user1, + subject: 'App freezes when uploading files', + agent: 'Liam Brooks', + agentImg: user4, + priority: 'High', + status: 'Pending', + createdAt: '05 Aug, 2025', + createdAtTime: '1:20 PM', + dueDate: '09 Aug, 2025' +}, { + id: '#SUP-2524', + requestedBy: 'Sophie Bennett', + requestedByImg: user3, + subject: 'Missing transaction history', + agent: 'Lucas Shaw', + agentImg: user6, + priority: 'Medium', + status: 'In Progress', + createdAt: '04 Aug, 2025', + createdAtTime: '4:30 PM', + dueDate: '08 Aug, 2025' +}, { + id: '#SUP-2525', + requestedBy: 'Noah Allen', + requestedByImg: user4, + subject: 'Feedback form submission error', + agent: 'Sophia Reed', + agentImg: user5, + priority: 'Low', + status: 'Resolved', + createdAt: '03 Aug, 2025', + createdAtTime: '12:00 PM', + dueDate: '06 Aug, 2025' +}, { + id: '#SUP-2526', + requestedBy: 'Ethan James', + requestedByImg: user5, + subject: "Can't generate report summary", + agent: 'Chloe Adams', + agentImg: user7, + priority: 'High', + status: 'Escalated', + createdAt: '05 Aug, 2025', + createdAtTime: '8:50 AM', + dueDate: '07 Aug, 2025' +}, { + id: '#SUP-2527', + requestedBy: 'Grace Carter', + requestedByImg: user8, + subject: 'Feature request: Dark mode toggle', + agent: 'Daniel Ray', + agentImg: user2, + priority: 'Low', + status: 'Closed', + createdAt: '02 Aug, 2025', + createdAtTime: '5:25 PM', + dueDate: '06 Aug, 2025' +}]; \ No newline at end of file diff --git a/src/views/apps/support-center/tickets-list/index.jsx b/src/views/apps/support-center/tickets-list/index.jsx new file mode 100644 index 0000000..2df5298 --- /dev/null +++ b/src/views/apps/support-center/tickets-list/index.jsx @@ -0,0 +1,14 @@ +import PageBreadcrumb from "@/components/PageBreadcrumb"; +import { Container } from "react-bootstrap"; +import TicketsWidget from "./components/TicketsWidget"; +import TicketTabel from "./components/TicketTabel"; +const Page = () => { + return <> + + + + + + ; +}; +export default Page; \ No newline at end of file diff --git a/src/views/apps/users/contacts/components/ContactCard.jsx b/src/views/apps/users/contacts/components/ContactCard.jsx new file mode 100644 index 0000000..84e1818 --- /dev/null +++ b/src/views/apps/users/contacts/components/ContactCard.jsx @@ -0,0 +1,49 @@ +import { Link } from "react-router"; +import { Card, CardBody } from 'react-bootstrap'; +import { TbRefresh } from 'react-icons/tb'; +const ContactCard = ({ + contact +}) => { + const { + flag, + name, + role, + avatar, + badge, + lastUpdated, + stats, + username, + website + } = contact; + return + + avatar +
    + {name} + UK +
    + {role}
    + {badge.label}
    + {username} | {website} +
    +   + +
    +
    +
    +
    +
    {stats.posts}
    Posts +
    +
    +
    {stats.followers}
    Followers +
    +
    +
    {stats.followings}
    Followings +
    +
    +
    +
    Updated {lastUpdated}
    +
    +
    ; +}; +export default ContactCard; \ No newline at end of file diff --git a/src/views/apps/users/contacts/data.js b/src/views/apps/users/contacts/data.js new file mode 100644 index 0000000..91a804c --- /dev/null +++ b/src/views/apps/users/contacts/data.js @@ -0,0 +1,160 @@ +import user1 from '@/assets/images/users/user-1.jpg'; +import user2 from '@/assets/images/users/user-2.jpg'; +import user3 from '@/assets/images/users/user-3.jpg'; +import user4 from '@/assets/images/users/user-4.jpg'; +import user7 from '@/assets/images/users/user-7.jpg'; +import user8 from '@/assets/images/users/user-8.jpg'; +import user9 from '@/assets/images/users/user-9.jpg'; +import caFlag from '@/assets/images/flags/ca.svg'; +import cnFlag from '@/assets/images/flags/cn.svg'; +import esFlag from '@/assets/images/flags/es.svg'; +import gbFlag from '@/assets/images/flags/gb.svg'; +import itFlag from '@/assets/images/flags/it.svg'; +import jpFlag from '@/assets/images/flags/jp.svg'; +import egFlag from '@/assets/images/flags/eg.svg'; +import usFlag from '@/assets/images/flags/us.svg'; +export const contacts = [{ + id: 1, + name: "Sophia Carter", + avatar: user1, + flag: gbFlag, + role: "Lead UI/UX Designer", + badge: { + label: "Admin", + color: "secondary" + }, + username: "@Founder", + website: "sophiacarter.com", + stats: { + posts: 134, + followers: "29.8k", + followings: 1125 + }, + lastUpdated: "1 hour ago" +}, { + id: 2, + name: "Daniel Lee", + avatar: user2, + flag: usFlag, + role: "Product Manager", + badge: { + label: "Verified", + color: "success" + }, + username: "@danielpm", + website: "daniellee.com", + stats: { + posts: 98, + followers: "12.5k", + followings: 860 + }, + lastUpdated: "2 hours ago" +}, { + id: 3, + name: "Maria Rodriguez", + avatar: user3, + flag: esFlag, + role: "Marketing Head", + badge: { + label: "Team Lead", + color: "info" + }, + username: "@maria", + website: "mariaworks.es", + stats: { + posts: 205, + followers: "18.4k", + followings: 1432 + }, + lastUpdated: "3 hours ago" +}, { + id: 4, + name: "Liam Zhang", + avatar: user4, + flag: cnFlag, + role: "Frontend Developer", + badge: { + label: "Contributor", + color: "warning" + }, + username: "@liamdev", + website: "liamzhang.cn", + stats: { + posts: 67, + followers: "9.3k", + followings: 540 + }, + lastUpdated: "10 mins ago" +}, { + id: 5, + name: "Ethan Wright", + avatar: user7, + flag: caFlag, + role: "Senior Backend Engineer", + badge: { + label: "Moderator", + color: "primary" + }, + username: "@DevOps", + website: "ethanwright.dev", + stats: { + posts: 89, + followers: "16.4k", + followings: 734 + }, + lastUpdated: "45 mins ago" +}, { + id: 6, + name: "Isabella Moretti", + avatar: user8, + flag: itFlag, + role: "Content Strategist", + badge: { + label: "Top Creator", + color: "danger" + }, + username: "@isamoretti", + website: "moretti.io", + stats: { + posts: 162, + followers: "24.7k", + followings: 921 + }, + lastUpdated: "2 hours ago" +}, { + id: 7, + name: "Kenji Tanaka", + avatar: user9, + flag: jpFlag, + role: "Full Stack Developer", + badge: { + label: "Contributor", + color: "info" + }, + username: "@kenjicode", + website: "kenjitanaka.dev", + stats: { + posts: 113, + followers: "13.9k", + followings: 678 + }, + lastUpdated: "30 mins ago" +}, { + id: 8, + name: "Amira El-Sayed", + avatar: user1, + flag: egFlag, + role: "Data Scientist", + badge: { + label: "Analyst", + color: "warning" + }, + username: "@amira.codes", + website: "amira-ai.tech", + stats: { + posts: 176, + followers: "21.1k", + followings: 998 + }, + lastUpdated: "20 mins ago" +}]; \ No newline at end of file diff --git a/src/views/apps/users/contacts/index.jsx b/src/views/apps/users/contacts/index.jsx new file mode 100644 index 0000000..8cca5a3 --- /dev/null +++ b/src/views/apps/users/contacts/index.jsx @@ -0,0 +1,96 @@ +import ContactCard from '@/views/apps/users/contacts/components/ContactCard'; +import { contacts } from '@/views/apps/users/contacts/data'; +import PageBreadcrumb from '@/components/PageBreadcrumb'; +import { Col, Container, Pagination, Row } from 'react-bootstrap'; +import { LuLayers, LuLayoutGrid, LuList, LuMapPin, LuSearch, LuUserCheck } from 'react-icons/lu'; +const Page = () => { + return + + + +
    + + +
    + + +
    + + +
    + Filter By: + +
    + + +
    + +
    + + +
    + +
    + + +
    + +
    + + + + +
    +
    + +
    +
    + +
    + + {contacts.map((contact, idx) => + + )} + + + + « + + {1} + {2} + {3} + {4} + {5} + + » + + +
    ; +}; +export default Page; \ No newline at end of file diff --git a/src/views/apps/users/permissions/data.js b/src/views/apps/users/permissions/data.js new file mode 100644 index 0000000..1de3745 --- /dev/null +++ b/src/views/apps/users/permissions/data.js @@ -0,0 +1,130 @@ +export const permissionManagementData = [{ + name: 'User Management', + roles: [{ + label: 'Administrator', + variant: 'primary' + }], + date: '24 Jun 2025', + time: '6:43 am', + users: 12 +}, { + name: 'Content Management', + roles: [{ + label: 'Administrator', + variant: 'primary' + }, { + label: 'Developer', + variant: 'danger' + }, { + label: 'Analyst', + variant: 'info' + }, { + label: 'Support', + variant: 'purple' + }, { + label: 'Trial', + variant: 'warning' + }], + date: '21 Feb 2025', + time: '11:05 am', + users: 5 +}, { + name: 'Financial Management', + roles: [{ + label: 'Administrator', + variant: 'primary' + }, { + label: 'Analyst', + variant: 'info' + }], + date: '24 Jun 2025', + time: '5:30 pm', + users: 8 +}, { + name: 'Reporting', + roles: [{ + label: 'Administrator', + variant: 'primary' + }, { + label: 'Analyst', + variant: 'info' + }], + date: '21 Feb 2025', + time: '5:20 pm', + users: 6 +}, { + name: 'Payroll', + roles: [{ + label: 'Administrator', + variant: 'primary' + }, { + label: 'Analyst', + variant: 'info' + }], + date: '20 Jun 2025', + time: '6:05 pm', + users: 4 +}, { + name: 'Disputes Management', + roles: [{ + label: 'Administrator', + variant: 'primary' + }, { + label: 'Developer', + variant: 'danger' + }, { + label: 'Support', + variant: 'purple' + }], + date: '24 Jun 2025', + time: '5:20 pm', + users: 7 +}, { + name: 'Audit Logs', + roles: [{ + label: 'Administrator', + variant: 'primary' + }], + date: '23 Jun 2025', + time: '4:00 pm', + users: 9 +}, { + name: 'API Access', + roles: [{ + label: 'Administrator', + variant: 'primary' + }, { + label: 'Trial', + variant: 'warning' + }, { + label: 'DevOps', + variant: 'info' + }], + date: '22 Jun 2025', + time: '2:35 pm', + users: 3 +}, { + name: 'Notification Center', + roles: [{ + label: 'Administrator', + variant: 'primary' + }, { + label: 'Support', + variant: 'info' + }], + date: '22 Jun 2025', + time: '8:45 am', + users: 2 +}, { + name: 'Access Logs', + roles: [{ + label: 'Administrator', + variant: 'primary' + }, { + label: 'Support', + variant: 'purple' + }], + date: '19 Jun 2025', + time: '6:10 pm', + users: 5 +}]; \ No newline at end of file diff --git a/src/views/apps/users/permissions/index.jsx b/src/views/apps/users/permissions/index.jsx new file mode 100644 index 0000000..11a617e --- /dev/null +++ b/src/views/apps/users/permissions/index.jsx @@ -0,0 +1,133 @@ +import { permissionManagementData } from '@/views/apps/users/permissions/data'; +import PageBreadcrumb from '@/components/PageBreadcrumb'; +import DataTable from '@/components/table/DataTable'; +import DeleteConfirmationModal from '@/components/table/DeleteConfirmationModal'; +import TablePagination from '@/components/table/TablePagination'; +import { createColumnHelper, getCoreRowModel, getFilteredRowModel, getPaginationRowModel, getSortedRowModel, useReactTable } from '@tanstack/react-table'; +import { useState } from 'react'; +import { Button, Card, CardFooter, CardHeader, Col, Container, Row } from 'react-bootstrap'; +import { LuSearch } from 'react-icons/lu'; +import { TbEye, TbTrash } from 'react-icons/tb'; +const Index = () => { + const columnHelper = createColumnHelper(); + const columns = [columnHelper.accessor('name', { + header: 'Name' + }), columnHelper.accessor('roles', { + header: 'Assign To', + cell: ({ + row + }) =>
    + {row.original.roles.map((role, idx) => + {role.label} + )} +
    , + enableSorting: false + }), columnHelper.accessor('date', { + header: 'Status', + cell: ({ + row + }) => <> + {row.original.date}, {row.original.time} + + }), columnHelper.accessor('users', { + header: 'Users' + }), { + header: 'Actions', + cell: ({ + row + }) =>
    + + +
    + }]; + const [data, setData] = useState(() => [...permissionManagementData]); + const [globalFilter, setGlobalFilter] = useState(''); + const [sorting, setSorting] = useState([]); + const [pagination, setPagination] = useState({ + pageIndex: 0, + pageSize: 8 + }); + const [selectedRowIds, setSelectedRowIds] = useState({}); + const table = useReactTable({ + data, + columns, + state: { + sorting, + globalFilter, + pagination, + rowSelection: selectedRowIds + }, + onSortingChange: setSorting, + onGlobalFilterChange: setGlobalFilter, + onPaginationChange: setPagination, + onRowSelectionChange: setSelectedRowIds, + getCoreRowModel: getCoreRowModel(), + getSortedRowModel: getSortedRowModel(), + getFilteredRowModel: getFilteredRowModel(), + getPaginationRowModel: getPaginationRowModel(), + globalFilterFn: 'includesString', + enableRowSelection: true + }); + const pageIndex = table.getState().pagination.pageIndex; + const pageSize = table.getState().pagination.pageSize; + const totalItems = table.getFilteredRowModel().rows.length; + const start = pageIndex * pageSize + 1; + const end = Math.min(start + pageSize - 1, totalItems); + const [showDeleteModal, setShowDeleteModal] = useState(false); + const toggleDeleteModal = () => { + setShowDeleteModal(!showDeleteModal); + }; + const handleDelete = () => { + const selectedIds = new Set(Object.keys(selectedRowIds)); + setData(old => old.filter((_, idx) => !selectedIds.has(idx.toString()))); + setSelectedRowIds({}); + setPagination({ + ...pagination, + pageIndex: 0 + }); + setShowDeleteModal(false); + }; + return + + + + + + +
    +
    + setGlobalFilter(e.target.value)} /> + +
    + {Object.keys(selectedRowIds).length > 0 && } +
    +
    + +
    +
    + + {table.getRowModel().rows.length > 0 && + + } + +
    + +
    +
    ; +}; +export default Index; \ No newline at end of file diff --git a/src/views/apps/users/profile/components/Account.jsx b/src/views/apps/users/profile/components/Account.jsx new file mode 100644 index 0000000..511d061 --- /dev/null +++ b/src/views/apps/users/profile/components/Account.jsx @@ -0,0 +1,423 @@ +import { Button, CardBody, CardHeader, CardTitle, Col, FormControl, FormLabel, Nav, NavItem, NavLink, Row, TabContainer, TabContent, Table, TabPane } from 'react-bootstrap'; +import { TbArrowBackUp, TbBrandFacebook, TbBrandGithub, TbBrandInstagram, TbBrandLinkedin, TbBrandSkype, TbBrandX, TbBriefcase, TbBuildingSkyscraper, TbCamera, TbChecklist, TbDeviceFloppy, TbHeart, TbHome, TbMapPin, TbMoodSmile, TbPencil, TbQuote, TbSettings, TbShare3, TbUser, TbUserCircle, TbWorld } from 'react-icons/tb'; +import { taskData } from '../data'; +import { Link } from "react-router"; +import user3 from '@/assets/images/users/user-3.jpg'; +import user2 from '@/assets/images/users/user-2.jpg'; +import user4 from '@/assets/images/users/user-4.jpg'; +import small1 from '@/assets/images/stock/small-1.jpg'; +import small2 from '@/assets/images/stock/small-2.jpg'; +import small3 from '@/assets/images/stock/small-3.jpg'; +import user1 from '@/assets/images/users/user-1.jpg'; +const Account = () => { + return
    + + +
    + My Account +
    + +
    + + + +

    I'm an Admin Template Author dedicated to building clean, efficient, and highly customizable dashboards for developers and businesses. My goal is to create UI solutions that are modern, scalable, and easy to integrate.

    +

    I specialize in crafting developer-friendly admin panels and UI kits using frameworks like Bootstrap, Tailwind CSS, React, Vue, Angular, Laravel, and Next.js. My templates are designed to accelerate development and provide a strong foundation for web apps, SaaS platforms, and enterprise tools.

    +

    I focus on delivering well-structured, pixel-perfect layouts with a user-centric approach—ensuring responsive design, clean code, and seamless user experiences. Whether you're building a CRM, analytics dashboard, or backend system, my templates are made to help you build faster and smarter.

    +

    Professional Experience:

    +
    +
    +
    2023 – Present
    +
    +
    +
    Lead UI Developer
    +

    Developing scalable and reusable UI components for SaaS dashboards using React, Tailwind CSS, and TypeScript.

    + at CraftCode Studio +
    +
    +
    +
    2021 – 2023
    +
    +
    +
    Frontend Engineer
    +

    Built modern, responsive admin templates and UI kits using Vue, Bootstrap 5, and Laravel Blade.

    + at CodeNova +
    +
    +
    +
    2019 – 2021
    +
    +
    +
    UI/UX Designer & Developer
    +

    Designed and developed dashboard layouts and admin panel concepts, focusing on accessibility and performance.

    + as Freelancer +
    +
    +
    +
    2017 – 2019
    +
    +
    +
    Web Designer
    +

    Created responsive HTML/CSS templates and themes for clients in eCommerce and portfolio niches.

    + at PixelFrame Agency +
    +
    +
    +
    2015 – 2017
    +
    +
    +
    Junior Frontend Developer
    +

    Maintained and updated legacy UI projects, gaining hands-on experience in HTML, CSS, jQuery, and Bootstrap 3.

    + at DevLaunch +
    +
    +
    +

    Tasks Overview:

    +
    + + + + + + + + + + + + + + {taskData.map((item, idx) => + + + + + + + + + )} + +
    TaskStatusAssigned ByStart DatePriorityProgressTotal Time Spent +
    +
    {item.title}
    + {item.due} +
    {item.status.label} +
    +
    + avatar +
    +
    +
    {item.assignedBy.name}
    +

    {item.assignedBy.email}

    +
    +
    +
    {item.startDate}{item.priority.label}{item.progress}{item.timeSpent}
    +
    + + +
    + +
    + + + + + + + + ; +}; +const Index = () => { + return <> + + + + + + + + + + + + + + + + + + + + + + + + + + + ; +}; +export default Index; \ No newline at end of file diff --git a/src/views/ui/notifications/index.jsx b/src/views/ui/notifications/index.jsx new file mode 100644 index 0000000..b70b185 --- /dev/null +++ b/src/views/ui/notifications/index.jsx @@ -0,0 +1,268 @@ +import LogoSm from '@/assets/images/logo-sm.png'; +import ComponentCard from '@/components/cards/ComponentCard'; +import PageBreadcrumb from '@/components/PageBreadcrumb'; +import useToggle from '@/hooks/useToggle'; +import { useState } from 'react'; +import { Button, Col, Container, Form, FormSelect, Row, Toast, ToastBody, ToastContainer, ToastHeader } from 'react-bootstrap'; +const Basic = () => { + const { + isTrue: isOpen, + toggle: hide + } = useToggle(); + return +

    + Toasts are as flexible as you need and have very little required markup. At a minimum, we require a single element to contain your “toasted” + content and strongly encourage a dismiss button. +

    +
    + + + brand-logo + BRAND + 11 mins ago + + Hello, world! This is a toast message. + +
    +
    ; +}; +const Placement = () => { + const { + isTrue: isOpen, + toggle: hide + } = useToggle(); + return +

    + Place toasts with custom CSS as you need them. The top right is often used for notifications, as is the top middle. If you’re only ever going + to show one toast at a time, put the positioning styles right on the .toast. +

    + +
    +
    + + + brand-logo + BRAND + 11 mins ago + + Hello, world! This is a toast message. + +
    +
    + +
    ; +}; +const PlacementToast = () => { + const [position, setPosition] = useState('top-start'); + return +

    + Place toasts with custom CSS as you need them. The top right is often used for notifications, as is the top middle. If you’re only ever going + to show one toast at a time, put the positioning styles right on the + .toast. +

    +
    +
    + + setPosition(e?.currentTarget.value)} id="selectToastPlacement"> + + + + + + + + + + + +
    +
    +
    + + + + logo-dark +   + BRAND + 11 mins ago + + Hello, world! This is a toast message. + + +
    +
    ; +}; +const LiveToast = () => { + const { + isTrue: isOpen, + setTrue: show, + setFalse: hide + } = useToggle(false); + return +

    + Click the button below to show a toast (positioned with our utilities in the Toop Right corner) that has been hidden by default. +

    + + + + + brand-logo + BRAND + 11 mins ago + + Hello, world! This is a toast message. + + +
    ; +}; +const Translucent = () => { + const { + isTrue: isOpenTranslucent, + toggle: hideTranslucent + } = useToggle(true); + return +

    + Toasts are slightly translucent, too, so they blend over whatever they might appear over. For browsers that support the backdrop-filter CSS + property, we’ll also attempt to blur the elements under a toast. +

    +
    + + + brand-logo + BRAND + 11 mins ago + + Hello, world! This is a toast message. + +
    +
    ; +}; +const Stacking = () => { + const { + isTrue: isOpenToast1, + toggle: toggleToast1 + } = useToggle(true); + const { + isTrue: isOpenToast2, + toggle: toggleToast2 + } = useToggle(true); + return +

    When you have multiple toasts, we default to vertiaclly stacking them in a readable manner.

    +
    +
    + + + + brand-logo + BRAND + just now + + See? Just like this. + + + + brand-logo + BRAND + 2 seconds ago + + Heads up, toasts will stack automatically + + +
    +
    +
    ; +}; +const CustomContent = () => { + const { + isTrue: isOpenCustom1, + setFalse: hideCustom1 + } = useToggle(true); + const { + isTrue: isOpenCustom2, + setFalse: hideCustom2 + } = useToggle(true); + const { + isTrue: isOpenCustom3, + setFalse: hideCustom3 + } = useToggle(true); + const { + isTrue: isOpenCustom4, + setFalse: hideCustom4 + } = useToggle(true); + return + +
    + Hello, world! This is a toast message. +
    +
    + +
    + Hello, world! This is a toast message. +
    +
    + + + Hello, world! This is a toast message. +
    + +   + +
    +
    +
    + + + Hello, world! This is a toast message. +
    + +   + +
    +
    +
    +
    ; +}; +const Index = () => { + return <> + + + + + + + + + + + + + + + + + ; +}; +export default Index; \ No newline at end of file diff --git a/src/views/ui/offcanvas/data.js b/src/views/ui/offcanvas/data.js new file mode 100644 index 0000000..9fcd39f --- /dev/null +++ b/src/views/ui/offcanvas/data.js @@ -0,0 +1,33 @@ +export const backdropOptions = [{ + name: 'Enable body scrolling', + scroll: true, + backdrop: false, + variant: 'primary' +}, { + name: 'Enable backdrop (default)', + scroll: false, + backdrop: true, + variant: 'secondary' +}, { + name: 'Enable both scrolling & backdrop', + scroll: true, + backdrop: true, + variant: 'success' +}]; +export const placementOptions = [{ + name: 'Left', + placement: 'start', + variant: 'primary' +}, { + name: 'Right', + placement: 'end', + variant: 'secondary' +}, { + name: 'Top', + placement: 'top', + variant: 'success' +}, { + name: 'Bottom', + placement: 'bottom', + variant: 'info' +}]; \ No newline at end of file diff --git a/src/views/ui/offcanvas/index.jsx b/src/views/ui/offcanvas/index.jsx new file mode 100644 index 0000000..2ed00fb --- /dev/null +++ b/src/views/ui/offcanvas/index.jsx @@ -0,0 +1,184 @@ +import ComponentCard from '@/components/cards/ComponentCard'; +import PageBreadcrumb from '@/components/PageBreadcrumb'; +import useToggle from '@/hooks/useToggle'; +import { Button, Col, Container, Offcanvas, OffcanvasBody, OffcanvasHeader, OffcanvasTitle, Row } from 'react-bootstrap'; +import { backdropOptions, placementOptions } from './data'; +const DefaultOffcanvas = () => { + const { + isTrue, + toggle + } = useToggle(); + return +

    + You can trigger an offcanvas using a link with + href or a button with data-bs-target, but both must include data-bs-toggle="offcanvas". +

    +
    + +
    + + + + Offcanvas + + + +
    Some text as placeholder. In real life you can have the elements you have chosen. Like, text, images, lists, etc.
    +
    List
    +
      +
    • Nemo enim ipsam voluptatem quia aspernatur
    • +
    • Neque porro quisquam est, qui dolorem
    • +
    • Quis autem vel eum iure qui in ea
    • +
    +
      +
    • At vero eos et accusamus et iusto odio dignissimos
    • +
    • Et harum quidem rerum facilis
    • +
    • Temporibus autem quibusdam et aut officiis
    • +
    +
    +
    +
    ; +}; +const OffcanvasBackdrop = () => { + const OffCanvasWithBackdrop = ({ + name, + ...props + }) => { + const { + isTrue, + toggle + } = useToggle(); + return <> + +   + + + + {name} + + + +
    Some text as placeholder. In real life you can have the elements you have chosen. Like, text, images, lists, etc.
    +
    List
    +
      +
    • Nemo enim ipsam voluptatem quia aspernatur
    • +
    • Neque porro quisquam est, qui dolorem
    • +
    • Quis autem vel eum iure qui in ea
    • +
    +
      +
    • At vero eos et accusamus et iusto odio dignissimos
    • +
    • Et harum quidem rerum facilis
    • +
    • Temporibus autem quibusdam et aut officiis
    • +
    +
    +
    + ; + }; + return +

    + When an offcanvas and its backdrop are visible, + <body> scrolling is disabled. Use data-bs-scroll to enable scrolling and data-bs-backdrop to + control the backdrop visibility. +

    + {backdropOptions.map((offcanvas, idx) => )} +
    ; +}; +const OffcanvasPlacement = () => { + const OffcanvasPlacement = ({ + name, + ...props + }) => { + const { + isTrue, + toggle + } = useToggle(); + return <> + + + + + Offcanvas {name} + + + +
    Some text as placeholder. In real life you can have the elements you have chosen. Like, text, images, lists, etc.
    +
    List
    +
      +
    • Nemo enim ipsam voluptatem quia aspernatur
    • +
    • Neque porro quisquam est, qui dolorem
    • +
    • Quis autem vel eum iure qui in ea
    • +
    +
    +
    + ; + }; + return +

    + .offcanvas-start positions the offcanvas on the left, + .offcanvas-end on the right, .offcanvas-top displays it from the top, and .offcanvas-bottom displays it + from the bottom of the viewport. +

    +
    + {placementOptions.map((props, idx) => )} +
    +
    ; +}; +const DarkOffcanvas = () => { + const { + isTrue, + toggle + } = useToggle(); + return +

    + Customize the look of offcanvases using utility classes to suit different themes, such as dark navbars. Add .text-bg-dark to + .offcanvas and .btn-close-white to .btn-close + for dark styling. +

    + + + +
    Dark Offcanvas
    + + + + + + + + +
    ; +}; +const ColorPlaceholders = () => { + return +

    + By default, the placeholder uses currentColor. This can be overriden with a custom color or utility class. +

    + + + + + + + + + +
    ; +}; +const WidthPlaceholders = () => { + return +

    + You can change the width through grid column classes, width utilities, or inline styles. +

    + + +
    + +   + +
    ; +}; +const SizingPlaceholders = () => { + return +

    + The size of .placeholders are based on the typographic style of the parent element. Customize them with sizing modifiers: + .placeholder-lg,.placeholder-sm, or .placeholder-xs. +

    + + + + +
    ; +}; +const WorksPlaceholder = () => { + return +

    + Create placeholders with the .placeholder class and a grid column class (e.g., .col-6) to set the width + . They can replace the text inside an element or as be added as a modifier class to an existing component. +

    + + + +
    ; +}; +const HoverPopovers = () => { + const hoverPopover = + Ohh Wow ! + And here's some amazing content. It's very engaging. Right? + ; + return + + + + ; +}; +const CustomPopovers = () => { + const customPopover = variant => + Primary Popover + This popover is themed via CSS variables. + ; + return +
    + + + + + + + + + + + + + + + + + + + + + +
    +
    ; +}; +const DismissOnPopover = () => { + const dismissiblePopover = + Quick Tips + And here's some amazing content. It's very engaging. Right? + ; + return + + + + ; +}; +const FourDirections = () => { + const directions = [{ + placement: 'top' + }, { + placement: 'bottom' + }, { + placement: 'right' + }, { + placement: 'left' + }]; + return +
    + {(directions || []).map((direction, idx) => + This popover appears above the button. Great for tips or info. + }> + + )} +
    +
    ; +}; +const DisabledPopover = () => { + const disabledPopover = + This button is disabled, but the popover still works. + ; + return + + + + + + ; +}; +const Index = () => { + return <> + + + + + + + + + + + + + + + + ; +}; +export default Index; \ No newline at end of file diff --git a/src/views/ui/progress/index.jsx b/src/views/ui/progress/index.jsx new file mode 100644 index 0000000..e995b09 --- /dev/null +++ b/src/views/ui/progress/index.jsx @@ -0,0 +1,125 @@ +import ComponentCard from '@/components/cards/ComponentCard'; +import PageBreadcrumb from '@/components/PageBreadcrumb'; +import { Button, Col, Container, ProgressBar, Row } from 'react-bootstrap'; +const Example = () => { + return +

    A progress bar can be used to show a user how far along he/she is in a process.

    + + + + + +
    ; +}; +const HeightProgressBar = () => { + return +

    + We only set a height value on the .progress, so if you change that value the inner .progress-bar will + automatically resize accordingly. Use .progress-sm,.progress-md,.progress-lg,.progress-xl + classes. +

    + + + + + + +
    ; +}; +const MultipleBars = () => { + return +

    Include multiple progress bars in a progress component if you need.

    + + + + + +
    ; +}; +const AnimatedStripes = () => { + return +

    + The striped gradient can also be animated. Add + .progress-bar-animated to .progress-bar to animate the stripes right to left via CSS3 animations. +

    + +
    ; +}; +const LabelsBar = () => { + return +

    + Add labels to your progress bars by placing text within the + .progress-bar. +

    + + +
    ; +}; +const BackgroundBar = () => { + return +

    Use background utility classes to change the appearance of individual progress bars.

    + + + + + + +
    ; +}; +const StripedBar = () => { + return +

    + Add .progress-bar-striped to any + .progress-bar to apply a stripe via CSS gradient over the progress bar’s background color. +

    + + + + + +
    ; +}; +const StepsProgressBar = () => { + return +
    + + + + +
    +
    ; +}; +const Index = () => { + return <> + + + + + + + + + + + + + + + + + + ; +}; +export default Index; \ No newline at end of file diff --git a/src/views/ui/spinners/index.jsx b/src/views/ui/spinners/index.jsx new file mode 100644 index 0000000..1c4cc78 --- /dev/null +++ b/src/views/ui/spinners/index.jsx @@ -0,0 +1,136 @@ +import ComponentCard from '@/components/cards/ComponentCard'; +import PageBreadcrumb from '@/components/PageBreadcrumb'; +import Spinner from '@/components/Spinner'; +import { Col, Container, Row } from 'react-bootstrap'; +const colorVariants = ['primary', 'secondary', 'success', 'danger', 'warning', 'info', 'dark', 'light']; +const BorderedSpinners = () => { + return +

    Use border spinners as lightweight loading indicators.

    + +
    ; +}; +const ColorsSpinners = () => { + return +

    + Use text color utilities like .text-primary,.text-success, or .text-danger to style the spinner, which + inherits its color from currentColor. +

    + {colorVariants.slice(0, 10).map((color, idx) => { + return ; + })} +
    ; +}; +const AlignmentSpinner = () => { + return +

    + Bootstrap spinners use rem,currentColor, and inline-flex for easy sizing and alignment. +

    +
    + +
    +
    ; +}; +const ButtonsSpinner = () => { + return + + +
    + + + + +
    + + +
    + + + + +
    + +
    +
    ; +}; +const GrowingSpinners = () => { + return +

    + Bootstrap spinners use rem,currentColor, and inline-flex for easy resizing, coloring, and alignment. +

    + +
    ; +}; +const ColorGrowingSpinners = () => { + return +

    + The grow spinner also uses currentColor, so apply classes like .text-primary, .text-warning, or + .text-info to customize its color. +

    + + {colorVariants.slice(0, 10).map((color, idx) => { + return ; + })} +
    ; +}; +const SpinnersSizes = () => { + const sizes = ['lg', 'md', 'sm']; + return + + {(sizes || []).map((size, idx) => { + return + + + ; + })} + + + + + + ; +}; +const Page = () => { + return <> + + + + + + + + + + + + + + + + + ; +}; +export default Page; \ No newline at end of file diff --git a/src/views/ui/tabs/index.jsx b/src/views/ui/tabs/index.jsx new file mode 100644 index 0000000..5a873f3 --- /dev/null +++ b/src/views/ui/tabs/index.jsx @@ -0,0 +1,571 @@ +import ComponentCard from '@/components/cards/ComponentCard'; +import PageBreadcrumb from '@/components/PageBreadcrumb'; +import { Card, CardBody, CardHeader, CardTitle, Col, Container, Nav, NavItem, NavLink, Row, TabContainer, TabContent, TabPane } from 'react-bootstrap'; +import { TbBriefcase, TbHome, TbInfoCircle, TbMail, TbSettings, TbUser, TbUserCircle } from 'react-icons/tb'; +const text1 = 'This dashboard provides a quick overview of your recent activity, performance metrics, and system status. You can easily monitor key indicators, recent logins, pending tasks, and overall user engagement.'; +const text2 = 'View your latest interactions and actions taken across the platform. This includes recent file uploads, comments, status updates, and notification history to keep you up to date with ongoing changes.'; +const text3 = 'Customize your account preferences including theme options, notification settings, and privacy controls. Adjust layout configurations to suit your workflow and manage integration with third-party services.'; +const tabContents = [{ + id: '1', + title: 'Overview', + text: text1, + variant: 'info', + icon: 'tabler:home' +}, { + id: '2', + title: 'Activity', + text: text2, + variant: 'danger', + icon: 'tabler:user-circle' +}, { + id: '3', + title: 'Settings', + text: text3, + variant: 'secondary', + icon: 'tabler:settings' +}]; +const DefaultTabs = () => { + return +

    Simple widget of tabbable panes of local content.

    + + + + {(tabContents || []).map((tab, idx) => { + return + + {tab.text} + + ; + })} + + +
    ; +}; +const TabsJustified = () => { + return +

    + Using class .nav-justified, you can force your + tab menu items to use the full available width. +

    + + + + +

    + Get a high-level summary of recent activity, key performance indicators, and important announcements. Stay informed and make quick + decisions based on real-time insights. +

    +
    + +

    + Customize your profile, update personal information, and manage security settings like passwords and 2FA. Keep your account secure and + up to date with your latest details. +

    +
    + +

    + Configure system preferences, theme options, and notification settings. Easily adapt the platform to fit your workflow and preferences. +

    +
    + +

    + View and manage all ongoing projects, tasks, and milestones. Collaborate with your team and track progress in real-time. +

    +
    + +

    + Need help? Reach out to our support team or browse the help center for common questions, guides, and documentation. +

    +
    +
    +
    +
    ; +}; +const TabsVerticalLeft = () => { + return +

    + You can stack your navigation by changing the flex item direction with the + .flex-column utility. +

    + + + + + + + + +

    + Welcome to your dashboard. Get an at-a-glance view of your recent activity, top stats, and personalized suggestions to enhance + productivity and stay on track. +

    +
      +
    • View total project status
    • +
    • Quick links to recent files
    • +
    • Weekly performance charts
    • +
    +

    Your dashboard is tailored to your activity and roles. Stay informed and always one step ahead.

    +
    + +

    Manage your personal details, change your profile photo, and update your contact information.

    +
      +
    • Name, Email, Phone
    • +
    • Change Password
    • +
    • Activity logs and preferences
    • +
    +

    Keeping your profile up to date ensures a better and more secure experience.

    +
    + +

    Customize your preferences, notification options, and privacy settings.

    +
      +
    • Theme selection: Light / Dark mode
    • +
    • Email & push notification toggles
    • +
    • Linked accounts and integrations
    • +
    +

    Settings help personalize your interface and improve your workflow efficiency.

    +
    + +

    Track all your active, completed, and upcoming projects in one place.

    +
      +
    • Kanban board and Gantt charts
    • +
    • Task assignments and deadlines
    • +
    • Progress indicators and timelines
    • +
    +

    Use collaboration tools, upload documents, and manage deliverables directly from here.

    +
    + +

    Need assistance? Access our help center or contact our support team directly.

    +
      +
    • Browse FAQs and tutorials
    • +
    • Submit a support ticket
    • +
    • Live chat with support agents
    • +
    +

    We’re here 24/7 to assist you with anything you need—technical or account-related.

    +
    +
    + +
    +
    +
    ; +}; +const TabsVerticalRight = () => { + return +

    + You can add the .nav-pills-* class to the .nav element to apply colored pill styles. +

    + + + + + +

    + Welcome to your dashboard. Get an at-a-glance view of your recent activity, top stats, and personalized suggestions to enhance + productivity and stay on track. +

    +
      +
    • View total project status
    • +
    • Quick links to recent files
    • +
    • Weekly performance charts
    • +
    +

    Your dashboard is tailored to your activity and roles. Stay informed and always one step ahead.

    +
    + +

    Manage your personal details, change your profile photo, and update your contact information.

    +
      +
    • Name, Email, Phone
    • +
    • Change Password
    • +
    • Activity logs and preferences
    • +
    +

    Keeping your profile up to date ensures a better and more secure experience.

    +
    + +

    Customize your preferences, notification options, and privacy settings.

    +
      +
    • Theme selection: Light / Dark mode
    • +
    • Email & push notification toggles
    • +
    • Linked accounts and integrations
    • +
    +

    Settings help personalize your interface and improve your workflow efficiency.

    +
    + +

    Track all your active, completed, and upcoming projects in one place.

    +
      +
    • Kanban board and Gantt charts
    • +
    • Task assignments and deadlines
    • +
    • Progress indicators and timelines
    • +
    +

    Use collaboration tools, upload documents, and manage deliverables directly from here.

    +
    + +

    Need assistance? Access our help center or contact our support team directly.

    +
      +
    • Browse FAQs and tutorials
    • +
    • Submit a support ticket
    • +
    • Live chat with support agents
    • +
    +

    We’re here 24/7 to assist you with anything you need—technical or account-related.

    +
    +
    + + + + +
    +
    +
    ; +}; +const TabsBordered = () => { + return +

    + The navigation item can have a simple bottom border as well. Just specify the class + .nav-bordered. +

    + + + + +

    + Welcome to our online platform! Here, we strive to offer the best products and services tailored to your lifestyle. Whether you're + redecorating your home or looking for expert advice on the latest trends, we've got you covered. +

    +
    + +

    + Hi! I am an avid explorer, constantly seeking new adventures and insights. My passions include technology, literature, travel, fitness, + and self-development. I enjoy learning new skills and sharing knowledge with others to foster personal growth. +

    +
    + +

    + Nestled in the heart of the city, a charming cafe offers a peaceful retreat from the urban hustle. Its inviting ambiance, with its cozy + decor and warm lighting, provides the perfect setting for relaxation or a productive meeting. +

    +
    + +

    + Our company is dedicated to offering high-quality services and products designed to enrich your life. With a focus on sustainability and + innovation, we aim to create lasting value for our customers. Join us on our journey to make everyday living better! +

    +
    +
    +
    +
    ; +}; +const BorderedTabswithColoredBorder = () => { + return +

    + You can add the .nav-bordered-* class to the .nav element to apply colored border styles. +

    + + + + +

    + Welcome to our online platform! Here, we strive to offer the best products and services tailored to your lifestyle. Whether you're + redecorating your home or looking for expert advice on the latest trends, we've got you covered. +

    +
    + +

    + Hi! I am an avid explorer, constantly seeking new adventures and insights. My passions include technology, literature, travel, fitness, + and self-development. I enjoy learning new skills and sharing knowledge with others to foster personal growth. +

    +
    + +

    + Nestled in the heart of the city, a charming cafe offers a peaceful retreat from the urban hustle. Its inviting ambiance, with its cozy + decor and warm lighting, provides the perfect setting for relaxation or a productive meeting. +

    +
    + +

    + Our company is dedicated to offering high-quality services and products designed to enrich your life. With a focus on sustainability and + innovation, we aim to create lasting value for our customers. Join us on our journey to make everyday living better! +

    +
    +
    +
    +
    ; +}; +const IconsTabs = () => { + return +

    + The navigation item can have a simple bottom border as well. Just specify the class + .nav-bordered. +

    + + + + +

    + Discover our platform designed to make your daily life easier. From modern interiors to smart home gadgets, our curated selection is + tailored for comfort, functionality, and style. +

    +
    + +

    + Hello! I’m a creative thinker who thrives on innovation and meaningful connections. I enjoy exploring tech trends, reading insightful + books, and traveling to experience new cultures and cuisines. +

    +
    + +

    + A peaceful workspace can make all the difference. That’s why we offer customizable setups, soundproofing tips, and productivity tools to + help you stay focused and inspired every day. +

    +
    + +

    + We’re a team of innovators passionate about creating seamless experiences. Our mission is to deliver solutions that merge design, + functionality, and purpose in every project we undertake. +

    +
    + +

    + Our recent projects range from mobile app development to full-scale branding initiatives. We believe in data-driven strategies paired + with creative storytelling to drive results. +

    +
    + +

    + Have questions or ideas? We'd love to hear from you! Reach out through our contact form, social media, or drop by our office for a chat + over coffee. +

    +
    +
    +
    +
    ; +}; +const CardWithTabs = () => { + return + + +
    + Card with Tabs +
    + +
    + + + +

    + Welcome to your financial dashboard. Here, you can monitor real-time updates on your income, expenses, savings, and investments. Our + tools are designed to help you make informed decisions and achieve your financial goals faster. +

    +
    + +

    + View and manage all your bank accounts, credit cards, and loan details in one place. Link your financial institutions securely and + keep track of balances, transactions, and payment schedules with ease. +

    +
    + +

    + Customize your preferences including budgeting alerts, currency format, report frequency, and security settings. Enable multi-factor + authentication and choose how you'd like to receive account activity notifications. +

    +
    +
    +
    +
    +
    ; +}; +const Index = () => { + return <> + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + ; +}; +export default Index; \ No newline at end of file diff --git a/src/views/ui/tooltips/index.jsx b/src/views/ui/tooltips/index.jsx new file mode 100644 index 0000000..3e94ab1 --- /dev/null +++ b/src/views/ui/tooltips/index.jsx @@ -0,0 +1,147 @@ +import ComponentCard from '@/components/cards/ComponentCard'; +import PageBreadcrumb from '@/components/PageBreadcrumb'; +import { Button, Col, Container, OverlayTrigger, Row, Tooltip } from 'react-bootstrap'; +import { toPascalCase } from '@/helpers/casing'; +const colorVariants = ['primary', 'danger', 'info', 'success', 'secondary', 'warning', 'dark']; +const BasicTooltips = () => { + return +

    Hover over the links below to see tooltips.

    +

    + Powerful admin features like + Manage your dashboard easily}> + + custom dashboards + + +   and UI components help you build scalable web applications efficiently. This template includes pre-built pages, clean layouts, and + reusable code blocks to boost your development workflow. From user management to analytics and settings, everything is modular and + developer-friendly. Create modern admin panels with  + Built with Bootstrap 5}> + + responsive design + + +   and seamless UX. Get started quickly with a professional-grade  + Tailored for developers}> + + UI toolkit + + +   and supercharge your app with  + Includes charts, tables, forms and more}> + + powerful components + + +   and flexible layouts. +

    +
    ; +}; +const DisabledElements = () => { + return +

    + Elements with the disabled attribute aren’t interactive, meaning users cannot focus, hover, or click them to trigger a tooltip + (or popover). As a workaround, you’ll want to trigger the tooltip from a wrapper <div> or <span>, + ideally made keyboard-focusable using tabindex="0", and override the + pointer-events on the disabled element. +

    + Disabled tooltip}> + + + + +
    ; +}; +const HoverElements = () => { + return +

    + Elements with the disabled attribute aren’t interactive, meaning users cannot focus, hover, or click them to trigger a tooltip + (or popover). As a workaround, you’ll want to trigger the tooltip from a wrapper <div> or <span>, + ideally made keyboard-focusable using tabindex="0", and override the + pointer-events on the disabled element. +

    + Tooltip appears on hover only}> + + +
    ; +}; +const FourDirections = () => { + return +

    Hover over the buttons below to see the four tooltips directions: top, right, bottom, and left.

    +
    + Tooltip on top}> + + + Tooltip on bottom}> + + + Tooltip on left}> + + + Tooltip on right}> + + +
    +
    ; +}; +const HTMLTags = () => { + return +

    And with custom HTML added:

    + + New Tooltip with HTML
    + Custom message here! + }> + +
    +
    ; +}; +const ColorTooltips = () => { + return +

    + We set a custom class with ex. + data-bs-custom-class="primary-tooltip" to scope our background-color primary appearance and use it to override a local CSS + variable. +

    +
    + {colorVariants.map((color, idx) => { + return This top tooltip {color} is themed via CSS variables.}> + + ; + })} +
    +
    ; +}; +const Index = () => { + return <> + + + + + + + + + + + + + + + + ; +}; +export default Index; \ No newline at end of file diff --git a/src/views/ui/typography/index.jsx b/src/views/ui/typography/index.jsx new file mode 100644 index 0000000..a769d4c --- /dev/null +++ b/src/views/ui/typography/index.jsx @@ -0,0 +1,300 @@ +import ComponentCard from '@/components/cards/ComponentCard'; +import PageBreadcrumb from '@/components/PageBreadcrumb'; +import { Col, Container, Row } from 'react-bootstrap'; +const DisplayHeadings = () => { + return +

    Display 1

    +

    Display 2

    +

    Display 3

    +

    Display 4

    +

    Display 5

    +

    Display 6

    +
    ; +}; +const Headings = () => { + return +

    + Heading 1 Sub Heading +

    +

    + Heading 2 Sub Heading +

    +

    + Heading 3 Sub Heading +

    +

    + Heading 4 Sub Heading +

    +
    + Heading 5 Sub Heading +
    +
    + Heading 6 Sub Heading +
    +
    ; +}; +const NamingASource = () => { + return +

    A well-known quote, contained in a blockquote element.

    +
    +
    +

    "Design is not just what it looks like and feels like. Design is how it works."

    +
    +
    + Steve Jobs in Design Philosophy +
    +
    +
    ; +}; +const InlineTextElements = () => { + return +

    Styling for common inline HTML5 elements.

    +

    Your title goes here

    +

    + You can use the mark tag to highlight text. +

    +

    + This line of text is meant to be treated as deleted text. +

    +

    + This line of text is meant to be treated as no longer accurate. +

    +

    + This line of text is meant to be treated as an addition to thedocument. +

    +

    + This line of text will render as underlined +

    +

    + This line of text is meant to be treated as fine print. +

    +

    + This line rendered as bold text. +

    +

    + This line rendered as italicized text. +

    +

    + Nulla attr vitae elit libero, a pharetra augue. +

    +
    ; +}; +const Unordered = () => { + return +

    A list of items in which the order does not explicitly matter.

    +
      +
    • Fully responsive design
    • +
    • Built with Bootstrap 5 framework
    • +
    • Clean and modern UI components
    • +
    • Cross-browser compatibility
    • +
    • + Multiple form elements and validations +
        +
      • Rich input controls
      • +
      • Step-based form wizards
      • +
      • Real-time validation
      • +
      • Customizable styles
      • +
      +
    • +
    • Advanced chart and graph libraries
    • +
    • Integrated data tables and sorting
    • +
    • Developer-friendly code structure
    • +
    +
    ; +}; +const Ordered = () => { + return +

    A list of items in which the order does explicitly matter.

    +
      +
    1. Install all dependencies
    2. +
    3. Configure project environment settings
    4. +
    5. Set up folder structure and routing
    6. +
    7. Integrate UI components and layout
    8. +
    9. + Implement core modules +
        +
      1. Authentication & Authorization
      2. +
      3. Dashboard widgets and metrics
      4. +
      5. User profile management
      6. +
      7. Notification & messaging systems
      8. +
      +
    10. +
    11. Connect backend APIs and test data flow
    12. +
    13. Optimize performance and responsive design
    14. +
    15. Final testing and deployment
    16. +
    +
    ; +}; +const Unstyled = () => { + return +

    + This only applies to immediate children list items, meaning you will need to add the class for any nested lists as well. +

    +
      +
    • Install project dependencies
    • +
    • + Configure build settings +
        +
      • Update environment variables
      • +
      +
    • +
    • Setup project structure and routes
    • +
    • Launch local development server
    • +
    +
    Inline List
    +

    + Display list items horizontally using display: inline-block; and appropriate spacing. +

    +
      +
    • HTML
    • +
    • CSS
    • +
    • JavaScript
    • +
    +
    ; +}; +const Abbreviations = () => { + return +

    Add .initialism to an abbreviation for a slightly smaller font-size.

    +

    + attr +

    +

    + + HTML + +

    +
    ; +}; +const Alignment = () => { + return +

    Use text utilities as needed to change the alignment of your blockquote.

    +
    +
    +

    "Design is not just what it looks like and feels like. Design is how it works."

    +
    +
    + Steve Jobs in Steve Jobs Biography +
    +
    +
    +
    +

    "Simplicity is the ultimate sophistication."

    +
    +
    + Leonardo da Vinci in Design Philosophy +
    +
    +
    ; +}; +const Inline = () => { + return +

    + Remove a list's bullets and apply some light margin with a combination of two classes, .list-inline and .list-inline-item. +

    +
      +
    • This is a list item.
    • +
    • And another one.
    • +
    • But they're displayed inline.
    • +
    +
    ; +}; +const Blockquotes = () => { + return +

    + For quoting blocks of content from another source within your document. Wrap + <blockquote class="blockquote"> around any + HTML as the quote. +

    +
    +

    "Good design is obvious. Great design is transparent."

    +
    +
    + Joe Sparano in Design Principles +
    +

    Use text utilities as needed to change the alignment of your blockquote.

    +
    +

    "First, solve the problem. Then, write the code."

    +
    +
    + John Johnson in Developer Wisdom +
    +
    +

    "Simplicity is the soul of efficiency."

    +
    +
    + Austin Freeman in Efficiency in Design +
    +
    ; +}; +const DescriptionListAlignment = () => { + return +

    + Align terms and descriptions horizontally by using our grid system’s predefined classes (or semantic mixins). For longer terms, you can + optionally add a.text-truncate class to truncate the text with an ellipsis. +

    +
    +
    Dashboard
    +
    An overview panel that displays key metrics and activity summaries.
    +
    Form Validation
    +
    +

    Includes validation for all major input types with real-time feedback.

    +

    Built-in support for custom rules and error messages.

    +
    +
    Responsive Grid
    +
    Utilizes Bootstrap’s flexible grid layout for consistent responsiveness across devices.
    +
    User Management Module
    +
    Easily manage roles, permissions, and user profiles from a single interface.
    +
    Nested Features
    +
    +
    +
    Email Notifications
    +
    Customizable alerts and triggers integrated into app workflows.
    +
    +
    +
    +
    ; +}; +const Index = () => { + return <> + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + ; +}; +export default Index; \ No newline at end of file diff --git a/src/views/ui/utilities/index.jsx b/src/views/ui/utilities/index.jsx new file mode 100644 index 0000000..ee23817 --- /dev/null +++ b/src/views/ui/utilities/index.jsx @@ -0,0 +1,418 @@ +import small1 from '@/assets/images/stock/small-1.jpg'; +import small3 from '@/assets/images/stock/small-3.jpg'; +import user2 from '@/assets/images/users/user-2.jpg'; +import user4 from '@/assets/images/users/user-4.jpg'; +import ComponentCard from '@/components/cards/ComponentCard'; +import PageBreadcrumb from '@/components/PageBreadcrumb'; +import { Link } from "react-router"; +import { Col, Container, Row } from 'react-bootstrap'; +const ColorAndBackground = () => { + return +

    + Color and background helpers combine the power of our + .text-* utilities and .bg-* utilities in one class. Using our Sass color-contrast() function, we + automatically determine a contrasting color for a particular background-color. +

    +
    +
    Primary with contrasting color (.text-bg-primary)
    +
    Secondary with contrasting color (.text-bg-secondary)
    +
    Success with contrasting color (.text-bg-success)
    +
    Danger with contrasting color (.text-bg-danger)
    +
    Warning with contrasting color (.text-bg-warning)
    +
    Info with contrasting color (.text-bg-info)
    +
    Light with contrasting color (.text-bg-light)
    +
    Dark with contrasting color (.text-bg-dark)
    +
    +
    ; +}; +const BackgroundOpacity = () => { + return +

    + background-color utilities are generated with Sass using CSS variables. This allows for real-time color changes without + compilation and dynamic alpha transparency changes. +

    +
    This is default primary background
    +
    This is 75% opacity primary background
    +
    This is 50% opacity primary background
    +
    This is 25% opacity primary background
    +
    This is 10% opacity success background
    +
    This is default dark background
    +
    This is 75% opacity dark background
    +
    This is 50% opacity dark background
    +
    This is 25% opacity dark background
    +
    This is 10% opacity success background
    +
    ; +}; +const TextOpacityColor = () => { + return +

    + Text color utilities are generated with Sass using CSS variables. This allows for real-time color changes without compilation and dynamic + alpha transparency changes. +

    +
    This is default primary text
    +
    This is 75% opacity primary text
    +
    This is 50% opacity primary text
    +
    This is 25% opacity primary text
    +
    ; +}; +const Opacity = () => { + return +

    + The opacity property sets the opacity level for an element. The opacity level describes the transparency level, where + 1 is not transparent at all, .5 is 50% visible, and 0 is completely transparent. Set the + opacity of an element using + + .opacity-{'{'}value{'}'} + + utilities. +

    + +
    +
    100%
    +
    75%
    +
    50%
    +
    25%
    +
    +
    ; +}; +const BorderRadius = () => { + return +

    Add classes to an element to easily round its corners.

    +
    + rounded + rounded-top + rounded-end + rounded-bottom + rounded-start + rounded-circle + rounded-pill +
    +
    ; +}; +const PointerEvents = () => { + return +

    + Bootstrap provides .pe-none and .pe-auto + classes to prevent or add element interactions. +

    +

    + + This link + + can not be clicked. +

    +

    + + This link + + can be clicked (this is default behavior). +

    +

    + + This link + + can not be clicked because the + pointer-events property is inherited from its parent. However, + + this link + + has a pe-auto class and can be clicked. +

    +
    ; +}; +const BorderRadiusSize = () => { + return +

    + Use the scaling classes for larger or smaller rounded corners. Sizes range from 0 to 5. +

    +
    + rounded-0 + rounded-1 + rounded-2 + rounded-3 + rounded-4 + rounded-5 +
    +
    ; +}; +const TextSelection = () => { + return +

    + Use user-select-all, user-select-auto, or + user-select-none class to the content which is selected when the user interacts with it. +

    + +

    This paragraph will be entirely selected when clicked by the user.

    +

    This paragraph has default select behavior.

    +

    This paragraph will not be selectable when clicked by the user.

    +
    ; +}; +const Overflow = () => { + return +

    + Adjust the overflow property on the fly with four default values and classes. These classes are not responsive by default. +

    +
    +
    + This is an example of using .overflow-auto on an element with set width and height dimensions. By design, this content will + vertically scroll. +
    +
    + This is an example of using .overflow-hidden on an element with set width and height dimensions. +
    +
    + This is an example of using .overflow-visible on an element with set width and height add more text dimensions ubold admin + dashboard template. +
    +
    + This is an example of using .overflow-scroll on an element with set width and height dimensions. +
    +
    +
    ; +}; +const PositionInArrange = () => { + return +

    + Arrange elements easily with the edge positioning utilities. The format is + + {'{'}property{'}'}-{'{'}position{'}'} + + . +

    +
    +
    +
    +
    +
    +
    +
    +
    + ; +}; +const PositionInCenter = () => { + return +

    + In addition, you can also center the elements with the transform utility class .translate-middle. +

    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    ; +}; +const PositionInAxis = () => { + return +

    + By adding .translate-middle-x or + .translate-middle-y classes, elements can be positioned only in horizontal or vertical direction. +

    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    + ; +}; +const Shadows = () => { + return +

    + Width utilities are generated from the utility API in + _utilities.scss. Includes support for + 25%, 50%, 75%, 100%, and + auto by default. Modify those values as you need to generate different utilities here. +

    +
    No shadow
    +
    Small shadow
    +
    Regular shadow
    +
    Larger shadow
    +
    ; +}; +const Width = () => { + return +

    + While shadows on components are disabled by default in Bootstrap and can be enabled via + $enable-shadows, you can also quickly add or remove a shadow with our + box-shadow utility classes. Includes support for .shadow-none and three default sizes (which have associated + variables to match). +

    +
    Width 25%
    +
    Width 50%
    +
    Width 75%
    +
    Width 100%
    +
    Width auto
    +
    ; +}; +const Height = () => { + return +

    + Height utilities are generated from the utility API in + _utilities.scss. Includes support for + 25%, 50%, 75%, 100%, and + auto by default. Modify those values as you need to generate different utilities here. +

    +
    +
    Height25%
    +
    Height50%
    +
    Height75%
    +
    Height100%
    +
    Height auto
    +
    +
    ; +}; +const ObjectFit = () => { + return +

    + Change the value of the + + object-fit + property + + with our responsive object-fit utility classes. This property tells the content to fill the parent container in a variety of + ways, such as preserving the aspect ratio or stretching to take up as much space as possible. +

    +
    +
    + ... +

    + .object-fit-contain +

    +
    +
    + ... +

    + .object-fit-cover +

    +
    +
    + ... +

    + .object-fit-fill +

    +
    +
    + ... +

    + .object-fit-scale +

    +
    +
    + ... +

    + .object-fit-none +

    +
    +
    +
    ; +}; +const Zindex = () => { + return +

    + Use z-index utilities to stack elements on top of one another. Requires a position value other than + static, which can be set with custom styles or using our + + position utilities + + . +

    +
    +
    +
    +
    +
    +
    +
    + ; +}; +const Index = () => { + return <> + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + ; +}; +export default Index; \ No newline at end of file diff --git a/src/views/ui/videos/index.jsx b/src/views/ui/videos/index.jsx new file mode 100644 index 0000000..0525cb1 --- /dev/null +++ b/src/views/ui/videos/index.jsx @@ -0,0 +1,49 @@ +import ComponentCard from '@/components/cards/ComponentCard'; +import PageBreadcrumb from '@/components/PageBreadcrumb'; +import { Col, Container, Row } from 'react-bootstrap'; +const ResponsiveEmbedVideo219 = () => { + return +
    +