diff --git a/webclient/.eslintrc.cjs b/webclient/.eslintrc.cjs index 657a95555..b34daa501 100644 --- a/webclient/.eslintrc.cjs +++ b/webclient/.eslintrc.cjs @@ -36,12 +36,7 @@ module.exports = { "error", ["script-setup", "composition"], // "script-setup", "composition", "composition-vue2", or "options" ], - "vue/multi-word-component-names": [ - "error", - { - ignores: ["[...slug]", "api", "index", "search", "[id]", "[name]"], - }, - ], + "vue/multi-word-component-names": "off", "vue/component-name-in-template-casing": ["error", "PascalCase", { registeredComponentsOnly: false }], "vue/custom-event-name-casing": ["error", "camelCase"], "vue/define-macros-order": "error", @@ -71,7 +66,7 @@ module.exports = { "vue/prefer-separate-static-class": "error", "vue/require-macro-variable-name": "error", "vue/require-typed-ref": "error", - "vue/static-class-names-order": "error", // we may want to disable this rule if it does not work well with tailwind + "vue/static-class-names-order": "off", "vue/v-for-delimiter-style": "error", "vue/no-constant-condition": "error", }, diff --git a/webclient/README.md b/webclient/README.md index 8b88465e3..dbfdb11a6 100644 --- a/webclient/README.md +++ b/webclient/README.md @@ -29,7 +29,11 @@ pnpm install ## Run -Ensure that _NavigaTUM-server_ is running in the background: +Ensure that _NavigaTUM-server_ is running in the background. +By default, the webclient will connect to the server on `https://nav.tum.de`. +If you want to connect to a local version instead, change `VITE_APP_URL` in [`env/.env`](./env/.env) to `http://localhost:3003`. + +To get a local server running, please: - either via following the [guide to local development](../server/README.md), or - via [docker](https://docs.docker.com/) @@ -42,9 +46,6 @@ Ensure that _NavigaTUM-server_ is running in the background: docker run -it --rm -p 8080:8080 --network navigatum-net -e MIELI_SEARCH_ADDR=search ghcr.io/tum-dev/navigatum-server:main /bin/navigatum-main-api ``` -By default, the webclient will connect to the server on `http://localhost:8080`. -If you want to connect to the public API instead, change `VITE_APP_URL` in [`env/.env`](./env/.env) to `https://nav.tum.de`. - ```sh pnpm run dev ``` @@ -87,7 +88,7 @@ If you serve the release build with a webserver (such as Nginx) you need to sele The language-selector is working in development and this differentialtion is only happening in the build. For the theme we can not do so for some reason (If you know of a better way, hit us up). -To test a different theme, you can change `$theme` [here](./src/assets/variables.scss) and `theme='...'` [here](./index.html). Values are `light` and `dark`. +To test a different theme, you can change `theme='...'` [here](./index.html). Values are `light` and `dark`. ## Architecture @@ -104,9 +105,7 @@ webclient │ ├── api_types/ # 🠔 code generated via openapi.yaml for typechecking reasons │ ├── assets/ # 🠔 Static assets such as icons │ │ ├── md/ # 🠔 Static pages written in markdown. Served at `/about/`. -│ │ ├── variables.scss # 🠔 Include-script for Spectre.CSS │ │ ├── main.scss # 🠔 Sass CSS code for all non-view parts -│ │ ├── spectre-all.scss # 🠔 Include-script for Spectre.CSS │ │ └── logos # 🠔 The Logos used by the app │ ├── components/ # 🠔 Vue components, which are used in views. │ ├── pages/ # 🠔 The views are parts of App.vue, which are loaded dynamically based on our routes. diff --git a/webclient/build.sh b/webclient/build.sh index 45fcc29af..9ad5e82b3 100755 --- a/webclient/build.sh +++ b/webclient/build.sh @@ -5,18 +5,8 @@ set -e # fail on first error mkdir -p ../dist rm -fr ../dist -for THEME in light dark -do - # make sure we are really only building the right theme - sed -i "s/\$theme: .*/\$theme: \"${THEME}\";/" src/assets/variables.scss - sed -i "s/["config"] & { router?: Router }; +export type OptionsParam = Options | Record; declare global { namespace Cypress { interface Chainable { - mount: mount; + mount>( + component: Component, + options?: OptionsParam, + ): Cypress.Chainable<{ + wrapper: VueWrapper>; + component: VueWrapper>["vm"]; + }>; } } } diff --git a/webclient/cypress/e2e/feedback.cy.ts b/webclient/cypress/e2e/feedback.cy.ts index dbba32d36..43531d7a9 100644 --- a/webclient/cypress/e2e/feedback.cy.ts +++ b/webclient/cypress/e2e/feedback.cy.ts @@ -2,10 +2,13 @@ describe("Check if opening the feedback form works from every subview", () => { it("main page", () => { cy.intercept("GET", "/api/get/root?lang=de", { fixture: "get/root.de.json" }); cy.visit("http://localhost:3000/"); - cy.contains("Standorte"); + cy.contains("Sites"); - cy.get('[data-cy="main-footer"]').scrollIntoView(); - checkFeedbackForm('[data-cy="open-feedback-footer"]'); + cy.get("footer").scrollIntoView(); + cy.contains("Send Feedback").should("not.exist"); + cy.intercept("POST", "/api/feedback/get_token", { statusCode: 201, fixture: "feedback/get_token.json" }); + cy.get("footer").contains("Feedback").click({ scrollBehavior: false }); + cy.contains("Send Feedback").should("exist"); }); it("search page", () => { cy.intercept("GET", "/api/search?q=fsmb&limit_buildings=10&limit_rooms=30&limit_all=30&lang=de", { @@ -13,22 +16,31 @@ describe("Check if opening the feedback form works from every subview", () => { }); cy.visit("http://localhost:3000/search?q=fsmb"); - checkFeedbackForm('[data-cy="open-feedback-search"]'); + cy.contains("Send Feedback").should("not.exist"); + cy.intercept("POST", "/api/feedback/get_token", { statusCode: 201, fixture: "feedback/get_token.json" }); + cy.get("footer").contains("Feedback").click(); + cy.contains("Send Feedback").should("exist"); }); it("details page (general feedback)", () => { cy.intercept("GET", "/api/get/mi?lang=de", { fixture: "get/mi.de.json" }); cy.visit("http://localhost:3000/view/mi"); cy.get('[data-cy="open-feedback-details"]').should("exist", { timeout: 10_000 }); // wait for the site to be interactive - checkFeedbackForm('[data-cy="open-feedback-details"]'); + cy.contains("Send Feedback").should("not.exist"); + cy.intercept("POST", "/api/feedback/get_token", { statusCode: 201, fixture: "feedback/get_token.json" }); + cy.get("footer").contains("Feedback").click(); + cy.contains("Send Feedback").should("exist"); }); -}); + it("details page (general feedback)", () => { + cy.intercept("GET", "/api/get/mi?lang=de", { fixture: "get/mi.de.json" }); + cy.visit("http://localhost:3000/view/mi"); + cy.get('[data-cy="open-feedback-details"]').should("exist", { timeout: 10_000 }); // wait for the site to be interactive -function checkFeedbackForm(selector_which_should_open_the_modal: string) { - cy.get('[data-cy="feedback-modal"]').should("not.exist"); - cy.intercept("POST", "/api/feedback/get_token", { statusCode: 201, fixture: "feedback/get_token.json" }); - cy.get(selector_which_should_open_the_modal).click({ scrollBehavior: false }); - cy.get('[data-cy="feedback-modal"]').should("exist"); -} + cy.contains("Send Feedback").should("not.exist"); + cy.intercept("POST", "/api/feedback/get_token", { statusCode: 201, fixture: "feedback/get_token.json" }); + cy.get('[data-cy="open-feedback-details"]').click({ scrollBehavior: false }); + cy.contains("Send Feedback").should("exist"); + }); +}); export {}; diff --git a/webclient/cypress/e2e/frontpage.cy.ts b/webclient/cypress/e2e/frontpage.cy.ts index 36ae7bd48..e60f14e36 100644 --- a/webclient/cypress/e2e/frontpage.cy.ts +++ b/webclient/cypress/e2e/frontpage.cy.ts @@ -9,7 +9,7 @@ describe("Check if navigating from the frontpage works as expected", () => { it("navigating to an initally hidden entry", () => { cy.intercept("GET", "/api/get/root?lang=de", { fixture: "get/root.de.json" }); cy.visit("http://localhost:3000/"); - cy.contains("mehr").click(); + cy.contains("more").click(); cy.intercept("GET", "/api/get/garching-interims?lang=de", { fixture: "get/garching-interims.de.json" }); cy.contains("Interims").click(); cy.url().should("include", "/site/"); diff --git a/webclient/cypress/e2e/search.cy.ts b/webclient/cypress/e2e/search.cy.ts index f5e58510f..1a9f11265 100644 --- a/webclient/cypress/e2e/search.cy.ts +++ b/webclient/cypress/e2e/search.cy.ts @@ -25,7 +25,7 @@ describe("Check if the search page works as expected", () => { cy.get("input").clear(); cy.get("input").type("fsmpic{enter}"); cy.url().should("include", "/search?q=fsmpic"); - cy.contains("5502.U1.234M"); + cy.contains("5101.EG.257"); //go back cy.go(-1); diff --git a/webclient/cypress/support/component-index.html b/webclient/cypress/support/component-index.html index f46521eae..18e51cb62 100644 --- a/webclient/cypress/support/component-index.html +++ b/webclient/cypress/support/component-index.html @@ -1,14 +1,13 @@ - + Components App - - +
diff --git a/webclient/cypress/support/component.ts b/webclient/cypress/support/component.ts index 0e90934cf..74b796730 100644 --- a/webclient/cypress/support/component.ts +++ b/webclient/cypress/support/component.ts @@ -2,7 +2,10 @@ import { createPinia } from "pinia"; // or Vuex import { createI18n } from "vue-i18n"; import { mount } from "cypress/vue"; import { createMemoryHistory, createRouter } from "vue-router"; +import type { Router } from "vue-router"; +import type { Component } from "vue"; import { routes } from "../../src/router"; +import type { OptionsParam } from "../../cypress"; // We recommend that you pull this out // into a constants file that you share with @@ -16,7 +19,7 @@ const i18nOptions = { warnHtmlMessage: true, }; -Cypress.Commands.add("mount", (component, options = {}) => { +Cypress.Commands.add("mount", (component: Component, options: OptionsParam = {}) => { options.global = options.global || {}; options.global.plugins = options.global.plugins || []; options.global.plugins = options.global.plugins || []; @@ -32,11 +35,15 @@ Cypress.Commands.add("mount", (component, options = {}) => { } // Add router plugin - options.global.plugins.push({ - install(app) { - app.use(options.router); - }, - }); + if (options.router !== undefined) { + options.global.plugins.push({ + install(app) { + app.use(options.router as Router); + }, + }); + } + // eslint-disable-next-line @typescript-eslint/ban-ts-comment + // @ts-ignore return mount(component, options); }); diff --git a/webclient/env/.env.production b/webclient/env/.env.production index d3308bf99..9b2347fa6 100644 --- a/webclient/env/.env.production +++ b/webclient/env/.env.production @@ -1 +1 @@ -VITE_APP_URL= +VITE_APP_URL=https://nav.tum.de diff --git a/webclient/index.html b/webclient/index.html index 6c9d4adaf..828b29ac3 100644 --- a/webclient/index.html +++ b/webclient/index.html @@ -1,5 +1,5 @@ - + diff --git a/webclient/nginx.conf b/webclient/nginx.conf index 7f5154cec..a269c34fd 100644 --- a/webclient/nginx.conf +++ b/webclient/nginx.conf @@ -19,14 +19,6 @@ http { # Do not show the version of nginx running on the server server_tokens off; - # theme detection - map $cookie_theme $THEME { - default "light"; - - "dark" "dark"; - "light" "light"; - } - # we allow other sites to fetch from us as we don't have any login/.. functionality => no cookies add_header 'Access-Control-Allow-Origin' '*' always; add_header 'Access-Control-Allow-Methods' 'GET, OPTIONS' always; @@ -78,20 +70,21 @@ http { } location / { - add_header Cache-Control no-cache; # disable caching, as we do not want to have theme/language related issues + expires 1h; + add_header Cache-Control "public"; # we allow other sites to fetch from us as we don't have any login/.. functionality => no cookies add_header 'Access-Control-Allow-Origin' '*' always; - add_header 'Access-Control-Allow-Methods' 'GET, OPTIONS' always; - expires 360s; # 360s=5min - try_files /$THEME.html /404.html; + add_header 'Access-Control-Allow-Methods' 'GET, OPTIONS' always + expires 1h; + try_files /index.html /404.html; } location = /api { - add_header Cache-Control no-cache; # disable caching, as we do not want to have theme/language related issues + add_header Cache-Control "public"; # we allow other sites to fetch from us as we don't have any login/.. functionality => no cookies add_header 'Access-Control-Allow-Origin' '*' always; add_header 'Access-Control-Allow-Methods' 'GET, OPTIONS' always; - expires 360s; # 360s=5min - try_files /$THEME.html /404.html; + expires 1h; + try_files /index.html /404.html; } location /assets/ { diff --git a/webclient/package.json b/webclient/package.json index 4dd618c35..6f9bb98eb 100644 --- a/webclient/package.json +++ b/webclient/package.json @@ -1,6 +1,6 @@ { "name": "navigatum", - "version": "0.1.0", + "version": "1.5.0", "scripts": { "cy:run:chrome:e2e": "cypress run --browser chrome --e2e", "cy:run:firefox:e2e": "cypress run --browser firefox:dev --e2e", @@ -16,36 +16,40 @@ "build-only": "vite build", "type-check": "vue-tsc --noEmit", "lint": "eslint . --ext .vue,.jsx,.cjs,.mjs,.ts,.tsx,.cts,.mts --fix --ignore-path .gitignore", - "format": "prettier --write ." + "format": "prettier --plugin=prettier-plugin-tailwindcss --write ." }, "dependencies": { + "@headlessui/vue": "1.7.16", + "@heroicons/vue": "2.1.1", "@vueuse/core": "10.9.0", "maplibre-gl": "4.1.0", "markdown-it-prism": "2.3.0", + "nightwind": "^1.1.13", "pinia": "2.1.7", - "spectre.css": "github:Valexr/spectre#dfe3bc2c59d23cd4bfd43c690aae3655576ff708", - "swagger-ui-dist": "5.11.10", + "swagger-ui": "^5.11.10", "swaggerdark": "github:octycs/SwaggerDark#f02d394c8ff698cdd93e09c2188b058d2d686ca3", "unplugin-vue-markdown": "0.26.0", "vue": "3.4.21", - "vue-router": "4.3.0" + "vue-router": "4.3.0", + "vue3-carousel": "0.3.1" }, "devDependencies": { "@intlify/unplugin-vue-i18n": "3.0.0", "@rushstack/eslint-patch": "1.7.2", - "@types/swagger-ui-dist": "3.30.4", + "@types/swagger-ui": "^3.52.4", "@vitejs/plugin-vue": "5.0.4", "@vue/eslint-config-prettier": "9.0.0", "@vue/eslint-config-typescript": "12.0.0", "@vue/tsconfig": "0.5.1", "autoprefixer": "10.4.18", - "cypress": "13.6.6", + "cypress": "^13.6.6", "eslint": "8.57.0", "eslint-plugin-vue": "9.22.0", "isomorphic-fetch": "3.0.0", "npm-run-all2": "6.1.2", "postcss": "8.4.35", "prettier": "3.2.5", + "prettier-plugin-tailwindcss": "0.5.11", "sass": "1.71.1", "stylelint-scss": "6.2.1", "tailwindcss": "3.4.1", diff --git a/webclient/pnpm-lock.yaml b/webclient/pnpm-lock.yaml index f62a6d4d8..340de25d3 100644 --- a/webclient/pnpm-lock.yaml +++ b/webclient/pnpm-lock.yaml @@ -5,6 +5,12 @@ settings: excludeLinksFromLockfile: false dependencies: + '@headlessui/vue': + specifier: 1.7.16 + version: 1.7.16(vue@3.4.21) + '@heroicons/vue': + specifier: 2.1.1 + version: 2.1.1(vue@3.4.21) '@vueuse/core': specifier: 10.9.0 version: 10.9.0(vue@3.4.21) @@ -14,14 +20,14 @@ dependencies: markdown-it-prism: specifier: 2.3.0 version: 2.3.0 + nightwind: + specifier: ^1.1.13 + version: 1.1.13(tailwindcss@3.4.1) pinia: specifier: 2.1.7 version: 2.1.7(typescript@5.4.2)(vue@3.4.21) - spectre.css: - specifier: github:Valexr/spectre#dfe3bc2c59d23cd4bfd43c690aae3655576ff708 - version: github.com/Valexr/spectre/dfe3bc2c59d23cd4bfd43c690aae3655576ff708 - swagger-ui-dist: - specifier: 5.11.10 + swagger-ui: + specifier: ^5.11.10 version: 5.11.10 swaggerdark: specifier: github:octycs/SwaggerDark#f02d394c8ff698cdd93e09c2188b058d2d686ca3 @@ -35,6 +41,9 @@ dependencies: vue-router: specifier: 4.3.0 version: 4.3.0(vue@3.4.21) + vue3-carousel: + specifier: 0.3.1 + version: 0.3.1(vue@3.4.21) devDependencies: '@intlify/unplugin-vue-i18n': @@ -43,9 +52,9 @@ devDependencies: '@rushstack/eslint-patch': specifier: 1.7.2 version: 1.7.2 - '@types/swagger-ui-dist': - specifier: 3.30.4 - version: 3.30.4 + '@types/swagger-ui': + specifier: ^3.52.4 + version: 3.52.4 '@vitejs/plugin-vue': specifier: 5.0.4 version: 5.0.4(vite@5.1.5)(vue@3.4.21) @@ -62,7 +71,7 @@ devDependencies: specifier: 10.4.18 version: 10.4.18(postcss@8.4.35) cypress: - specifier: 13.6.6 + specifier: ^13.6.6 version: 13.6.6 eslint: specifier: 8.57.0 @@ -82,6 +91,9 @@ devDependencies: prettier: specifier: 3.2.5 version: 3.2.5 + prettier-plugin-tailwindcss: + specifier: 0.5.11 + version: 0.5.11(prettier@3.2.5) sass: specifier: 1.71.1 version: 1.71.1 @@ -117,7 +129,6 @@ packages: /@alloc/quick-lru@5.2.0: resolution: {integrity: sha512-UrcABB+4bUrFABwbluTIBErXwvbsU/V7TZWfmbgJfbkwiBuziS9gxdODUyuiecfdGQ85jglMW6juS3+z5TsKLw==} engines: {node: '>=10'} - dev: true /@ampproject/remapping@2.2.1: resolution: {integrity: sha512-lFMjJTrFL3j7L9yBxwYfCq2k6qqwHyzuUl/XBnif78PWTJYyL/dfowQHWE3sp6U6ZzqWiiIZnpTMO96zhkjwtg==} @@ -420,6 +431,21 @@ packages: '@babel/plugin-syntax-typescript': 7.23.3(@babel/core@7.23.9) dev: true + /@babel/runtime-corejs3@7.24.0: + resolution: {integrity: sha512-HxiRMOncx3ly6f3fcZ1GVKf+/EROcI9qwPgmij8Czqy6Okm/0T37T4y2ZIlLUuEUFjtM7NRsfdCO8Y3tAiJZew==} + engines: {node: '>=6.9.0'} + dependencies: + core-js-pure: 3.36.0 + regenerator-runtime: 0.14.1 + dev: false + + /@babel/runtime@7.24.0: + resolution: {integrity: sha512-Chk32uHMg6TnQdvw2e9IlqPpFX/6NLuK0Ys2PqLb7/gL5uFn9mXvK715FGLlOLQrcO4qIkNHkvPGktzzXexsFw==} + engines: {node: '>=6.9.0'} + dependencies: + regenerator-runtime: 0.14.1 + dev: false + /@babel/template@7.23.9: resolution: {integrity: sha512-+xrD2BWLpvHKNmX2QbpdpsBaWnRxahMwJjO+KZk2JOElj5nSmKezyS1B4u+QbHMTX69t4ukm6hh9lsYQ7GHCKA==} engines: {node: '>=6.9.0'} @@ -455,6 +481,10 @@ packages: '@babel/helper-validator-identifier': 7.22.20 to-fast-properties: 2.0.0 + /@braintree/sanitize-url@7.0.0: + resolution: {integrity: sha512-GMu2OJiTd1HSe74bbJYQnVvELANpYiGFZELyyTM1CR0sdv5ReQAcJ/c/8pIrPab3lO11+D+EpuGLUxqz+y832g==} + dev: false + /@colors/colors@1.5.0: resolution: {integrity: sha512-ooWCrlZP11i8GImSjTHYHLkvFDP48nS4+204nGb1RiX/WXYHmJA2III9/e2DWVabCESdW7hBAEzHRqUn9OUVvQ==} engines: {node: '>=0.1.90'} @@ -750,6 +780,23 @@ packages: engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} dev: true + /@headlessui/vue@1.7.16(vue@3.4.21): + resolution: {integrity: sha512-nKT+nf/q6x198SsyK54mSszaQl/z+QxtASmgMEJtpxSX2Q0OPJX0upS/9daDyiECpeAsvjkoOrm2O/6PyBQ+Qg==} + engines: {node: '>=10'} + peerDependencies: + vue: ^3.2.0 + dependencies: + vue: 3.4.21(typescript@5.4.2) + dev: false + + /@heroicons/vue@2.1.1(vue@3.4.21): + resolution: {integrity: sha512-Yi5nh/89L193ALgHyJUQUdNLsKXPrrE3yj5yiR8WAlo7nZyXGxGauQcEAmBsa2XJGMhBMuEdoOiuZ8wEwTBxVQ==} + peerDependencies: + vue: '>= 3' + dependencies: + vue: 3.4.21(typescript@5.4.2) + dev: false + /@humanwhocodes/config-array@0.11.14: resolution: {integrity: sha512-3T8LkOmg45BV5FICb15QQMsyUSWrQ8AygVfC7ZG32zOalnqrilm018ZVCw0eapXux8FtA33q8PSRSstjee3jSg==} engines: {node: '>=10.10.0'} @@ -856,17 +903,14 @@ packages: '@jridgewell/set-array': 1.1.2 '@jridgewell/sourcemap-codec': 1.4.15 '@jridgewell/trace-mapping': 0.3.20 - dev: true /@jridgewell/resolve-uri@3.1.1: resolution: {integrity: sha512-dSYZh7HhCDtCKm4QakX0xFpsRDqjjtZf/kjI/v3T3Nwt5r8/qz/M19F9ySyOqU94SXBmeG9ttTul+YnR4LOxFA==} engines: {node: '>=6.0.0'} - dev: true /@jridgewell/set-array@1.1.2: resolution: {integrity: sha512-xnkseuNADM0gt2bs+BvhO0p78Mk762YnZdsuzFV018NoG1Sj1SCQvpSqa7XUaTam5vAGasABV9qXASMKnFMwMw==} engines: {node: '>=6.0.0'} - dev: true /@jridgewell/sourcemap-codec@1.4.15: resolution: {integrity: sha512-eF2rxCRulEKXHTRiDrDy6erMYWqNw4LPdQ8UQA4huuxaQsVeRPFl2oM8oDGxMFhJUWZf9McpLtJasDDZb/Bpeg==} @@ -876,7 +920,6 @@ packages: dependencies: '@jridgewell/resolve-uri': 3.1.1 '@jridgewell/sourcemap-codec': 1.4.15 - dev: true /@mapbox/geojson-rewind@0.5.2: resolution: {integrity: sha512-tJaT+RbYGJYStt7wI3cq4Nl4SXxG8W7JDG5DMJu97V25RnbNg3QtQtf+KD+VLjNpWKYsRvXDNmNrBgEETr1ifA==} @@ -952,12 +995,10 @@ packages: dependencies: '@nodelib/fs.stat': 2.0.5 run-parallel: 1.2.0 - dev: true /@nodelib/fs.stat@2.0.5: resolution: {integrity: sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==} engines: {node: '>= 8'} - dev: true /@nodelib/fs.walk@1.2.8: resolution: {integrity: sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==} @@ -965,7 +1006,6 @@ packages: dependencies: '@nodelib/fs.scandir': 2.1.5 fastq: 1.15.0 - dev: true /@pkgr/utils@2.4.2: resolution: {integrity: sha512-POgTXhjrTfbTV63DiFXav4lBHiICLKKwDeaKn9Nphwj7WH6m0hMMCaJkMyRWjgtPFyRKRVoMXXjczsTQRDEhYw==} @@ -1091,6 +1131,414 @@ packages: resolution: {integrity: sha512-RbhOOTCNoCrbfkRyoXODZp75MlpiHMgbE5MEBZAnnnLyQNgrigEj4p0lzsMDyc1zVsJDLrivB58tgg3emX0eEA==} dev: true + /@swagger-api/apidom-ast@0.97.0: + resolution: {integrity: sha512-KpPyC8x5ZrB4l9+jgl8FAhokedh+8b5VuBTTdTJKFf+x5uznMiBf/MZTWgvsIk8/9MtjkQYUN1qgVzEPiKWvHg==} + dependencies: + '@babel/runtime-corejs3': 7.24.0 + '@swagger-api/apidom-error': 0.97.0 + '@types/ramda': 0.29.11 + ramda: 0.29.1 + ramda-adjunct: 4.1.1(ramda@0.29.1) + unraw: 3.0.0 + dev: false + + /@swagger-api/apidom-core@0.97.0: + resolution: {integrity: sha512-3LYlN0Cox0FBFNZqmgi7VyJ4MXppCmZoFjlurT+Y90ND1y2lCidcwjAthr3QpV8b+UCc7MG3APBGRfwqaYZ2IA==} + dependencies: + '@babel/runtime-corejs3': 7.24.0 + '@swagger-api/apidom-ast': 0.97.0 + '@swagger-api/apidom-error': 0.97.0 + '@types/ramda': 0.29.11 + minim: 0.23.8 + ramda: 0.29.1 + ramda-adjunct: 4.1.1(ramda@0.29.1) + short-unique-id: 5.0.3 + stampit: 4.3.2 + dev: false + + /@swagger-api/apidom-error@0.97.0: + resolution: {integrity: sha512-Y2YRnsJSXp+MdgwwMSCtidzJfy/bL6CZEpc+5aWUw1mphTjfLZC66uA4btUgUevyiT6mNHXm8tUmGomHA7Izdw==} + dependencies: + '@babel/runtime-corejs3': 7.24.0 + dev: false + + /@swagger-api/apidom-json-pointer@0.97.0: + resolution: {integrity: sha512-9vcgePgcYXUiYEqnvx8Ew04j8JtfenosysbSuGgRs93Ls8mQ/+ndIOklHaXJzNjBZZxqxS0p6QLFcj1jpUiojQ==} + dependencies: + '@babel/runtime-corejs3': 7.24.0 + '@swagger-api/apidom-core': 0.97.0 + '@swagger-api/apidom-error': 0.97.0 + '@types/ramda': 0.29.11 + ramda: 0.29.1 + ramda-adjunct: 4.1.1(ramda@0.29.1) + dev: false + + /@swagger-api/apidom-ns-api-design-systems@0.97.0: + resolution: {integrity: sha512-uSTIEX4q9XWoP9TQq9nEtW5xG3hVQN2VD5spYoxvYlzUOtg12yxkVgu776eq0kVZd74acZhKIF7mn3uiqaQcHA==} + requiresBuild: true + dependencies: + '@babel/runtime-corejs3': 7.24.0 + '@swagger-api/apidom-core': 0.97.0 + '@swagger-api/apidom-error': 0.97.0 + '@swagger-api/apidom-ns-openapi-3-1': 0.97.0 + '@types/ramda': 0.29.11 + ramda: 0.29.1 + ramda-adjunct: 4.1.1(ramda@0.29.1) + ts-mixer: 6.0.4 + dev: false + optional: true + + /@swagger-api/apidom-ns-asyncapi-2@0.97.0: + resolution: {integrity: sha512-buEQSrXdtjoAkqIWSZ448HlvnareupthIoObYELp25LVuQwhxxVSY3NR0aCIR37GHgSchrmPBVcsvPMtXV96BA==} + requiresBuild: true + dependencies: + '@babel/runtime-corejs3': 7.24.0 + '@swagger-api/apidom-core': 0.97.0 + '@swagger-api/apidom-ns-json-schema-draft-7': 0.97.0 + '@types/ramda': 0.29.11 + ramda: 0.29.1 + ramda-adjunct: 4.1.1(ramda@0.29.1) + ts-mixer: 6.0.4 + dev: false + optional: true + + /@swagger-api/apidom-ns-json-schema-draft-4@0.97.0: + resolution: {integrity: sha512-eBMIPxX4huNDGle6TOfSe1kKS1/HvL6w66GWWLFxZW2doCQHMADgjo7j/kVowrXiJtEoMgjBVp3W30WkcwBVug==} + dependencies: + '@babel/runtime-corejs3': 7.24.0 + '@swagger-api/apidom-ast': 0.97.0 + '@swagger-api/apidom-core': 0.97.0 + '@types/ramda': 0.29.11 + ramda: 0.29.1 + ramda-adjunct: 4.1.1(ramda@0.29.1) + stampit: 4.3.2 + dev: false + + /@swagger-api/apidom-ns-json-schema-draft-6@0.97.0: + resolution: {integrity: sha512-tRbg3/b4aJGfcODc0HDngZDjBdhPAv8OZM1OZdsqI4EEIw3PI/wpd+b6b8a5udOjAdbUYqnYsq6gCylCDNBnzw==} + requiresBuild: true + dependencies: + '@babel/runtime-corejs3': 7.24.0 + '@swagger-api/apidom-core': 0.97.0 + '@swagger-api/apidom-error': 0.97.0 + '@swagger-api/apidom-ns-json-schema-draft-4': 0.97.0 + '@types/ramda': 0.29.11 + ramda: 0.29.1 + ramda-adjunct: 4.1.1(ramda@0.29.1) + stampit: 4.3.2 + dev: false + optional: true + + /@swagger-api/apidom-ns-json-schema-draft-7@0.97.0: + resolution: {integrity: sha512-0GITsoa6kVVkoKBUxyeODmh6vjGXuvDQZd3Vxs1nz0c/O6ZR+VBfBB3JW5wzhVr+WCXebaOJGDyWkxJMHKycxw==} + requiresBuild: true + dependencies: + '@babel/runtime-corejs3': 7.24.0 + '@swagger-api/apidom-core': 0.97.0 + '@swagger-api/apidom-error': 0.97.0 + '@swagger-api/apidom-ns-json-schema-draft-6': 0.97.0 + '@types/ramda': 0.29.11 + ramda: 0.29.1 + ramda-adjunct: 4.1.1(ramda@0.29.1) + stampit: 4.3.2 + dev: false + optional: true + + /@swagger-api/apidom-ns-openapi-2@0.97.0: + resolution: {integrity: sha512-5gOA9FiO1J9OxJhcVBeXdm77kuh2cwPXG6Sh/DOlbk733Pz9v9W0aQgpLi5Ltsgagxe1sHhBqxJ1asw10QFzzw==} + requiresBuild: true + dependencies: + '@babel/runtime-corejs3': 7.24.0 + '@swagger-api/apidom-core': 0.97.0 + '@swagger-api/apidom-error': 0.97.0 + '@swagger-api/apidom-ns-json-schema-draft-4': 0.97.0 + '@types/ramda': 0.29.11 + ramda: 0.29.1 + ramda-adjunct: 4.1.1(ramda@0.29.1) + ts-mixer: 6.0.4 + dev: false + optional: true + + /@swagger-api/apidom-ns-openapi-3-0@0.97.0: + resolution: {integrity: sha512-fbnN87SF0WN/4DcSpceuo+NUtkAGeicMIucEMF+LIIiCAF27Xi5d6Q823i9DgOEfJtifHKVj6Zhl/zSKAD2eyw==} + dependencies: + '@babel/runtime-corejs3': 7.24.0 + '@swagger-api/apidom-core': 0.97.0 + '@swagger-api/apidom-error': 0.97.0 + '@swagger-api/apidom-ns-json-schema-draft-4': 0.97.0 + '@types/ramda': 0.29.11 + ramda: 0.29.1 + ramda-adjunct: 4.1.1(ramda@0.29.1) + ts-mixer: 6.0.4 + dev: false + + /@swagger-api/apidom-ns-openapi-3-1@0.97.0: + resolution: {integrity: sha512-DyvkTim+t7iVKyze6N3tITsfyElthmOwOcxwOjKj/3lySEy61DuY4X2FaPD5+owftVDxMs4Q6F9Chm7qv91a+Q==} + dependencies: + '@babel/runtime-corejs3': 7.24.0 + '@swagger-api/apidom-ast': 0.97.0 + '@swagger-api/apidom-core': 0.97.0 + '@swagger-api/apidom-ns-openapi-3-0': 0.97.0 + '@types/ramda': 0.29.11 + ramda: 0.29.1 + ramda-adjunct: 4.1.1(ramda@0.29.1) + ts-mixer: 6.0.4 + dev: false + + /@swagger-api/apidom-ns-workflows-1@0.97.0: + resolution: {integrity: sha512-eIuoTRSITlUtMjpM3J0H9b2rVeEVu13i/Fv6+ZMPob0yHmQBWo9bnLjxxnfEZkpvp050worKULfNMdJV8NKBkA==} + requiresBuild: true + dependencies: + '@babel/runtime-corejs3': 7.24.0 + '@swagger-api/apidom-core': 0.97.0 + '@swagger-api/apidom-ns-openapi-3-1': 0.97.0 + '@types/ramda': 0.29.11 + ramda: 0.29.1 + ramda-adjunct: 4.1.1(ramda@0.29.1) + ts-mixer: 6.0.4 + dev: false + optional: true + + /@swagger-api/apidom-parser-adapter-api-design-systems-json@0.97.0: + resolution: {integrity: sha512-ZDzaiTHMEpz0kM0/iyHEjySTf0xoLKDJwJiSxKNuew141k0rakTVeVisxXeq+6JQi2eC6KuyS98DHMe7hEIVUw==} + requiresBuild: true + dependencies: + '@babel/runtime-corejs3': 7.24.0 + '@swagger-api/apidom-core': 0.97.0 + '@swagger-api/apidom-ns-api-design-systems': 0.97.0 + '@swagger-api/apidom-parser-adapter-json': 0.97.0 + '@types/ramda': 0.29.11 + ramda: 0.29.1 + ramda-adjunct: 4.1.1(ramda@0.29.1) + dev: false + optional: true + + /@swagger-api/apidom-parser-adapter-api-design-systems-yaml@0.97.0: + resolution: {integrity: sha512-5/BziPWqrHLr91VR+EC4pXt/fNToWMmvG+d7RVjksHinrjps2E6HA+oZOhqKqA2LRCLNjGhNUptXzRMDjjtenw==} + requiresBuild: true + dependencies: + '@babel/runtime-corejs3': 7.24.0 + '@swagger-api/apidom-core': 0.97.0 + '@swagger-api/apidom-ns-api-design-systems': 0.97.0 + '@swagger-api/apidom-parser-adapter-yaml-1-2': 0.97.0 + '@types/ramda': 0.29.11 + ramda: 0.29.1 + ramda-adjunct: 4.1.1(ramda@0.29.1) + dev: false + optional: true + + /@swagger-api/apidom-parser-adapter-asyncapi-json-2@0.97.0: + resolution: {integrity: sha512-XLD/YZifnhezRQY5ADQQAje5G5qtZ4GAbXk//1sRNe3R/qCk1pDxmRYr27yzt8w1XhfM+9VQmCTI21ZFpNFQOA==} + requiresBuild: true + dependencies: + '@babel/runtime-corejs3': 7.24.0 + '@swagger-api/apidom-core': 0.97.0 + '@swagger-api/apidom-ns-asyncapi-2': 0.97.0 + '@swagger-api/apidom-parser-adapter-json': 0.97.0 + '@types/ramda': 0.29.11 + ramda: 0.29.1 + ramda-adjunct: 4.1.1(ramda@0.29.1) + dev: false + optional: true + + /@swagger-api/apidom-parser-adapter-asyncapi-yaml-2@0.97.0: + resolution: {integrity: sha512-whyThDiGN4FoNirgY0XtXF7IJeU6NfsrBwjaxCkYBuSPslZBoWy4ojEQbfg+2HqNLbnHKJyvabh9/tSIxgB92A==} + requiresBuild: true + dependencies: + '@babel/runtime-corejs3': 7.24.0 + '@swagger-api/apidom-core': 0.97.0 + '@swagger-api/apidom-ns-asyncapi-2': 0.97.0 + '@swagger-api/apidom-parser-adapter-yaml-1-2': 0.97.0 + '@types/ramda': 0.29.11 + ramda: 0.29.1 + ramda-adjunct: 4.1.1(ramda@0.29.1) + dev: false + optional: true + + /@swagger-api/apidom-parser-adapter-json@0.97.0: + resolution: {integrity: sha512-MPhAX77Z9Csti+Kljtbrl/ez2H610R4fQg0RnkNW40f4e6TXeOogT5tmceeWP+IKGAKX45HA1JpVPxdtSJn3ww==} + requiresBuild: true + dependencies: + '@babel/runtime-corejs3': 7.24.0 + '@swagger-api/apidom-ast': 0.97.0 + '@swagger-api/apidom-core': 0.97.0 + '@swagger-api/apidom-error': 0.97.0 + '@types/ramda': 0.29.11 + ramda: 0.29.1 + ramda-adjunct: 4.1.1(ramda@0.29.1) + tree-sitter: 0.20.4 + tree-sitter-json: 0.20.2 + web-tree-sitter: 0.20.3 + dev: false + optional: true + + /@swagger-api/apidom-parser-adapter-openapi-json-2@0.97.0: + resolution: {integrity: sha512-HtaoRN7wnVB2ilxs/RpLBR7+MwIfUqUcdCzC/EVV788CnSbutwj61W3jR2w9BRXeANJ4K2APcvU4W7WiI9Sugg==} + requiresBuild: true + dependencies: + '@babel/runtime-corejs3': 7.24.0 + '@swagger-api/apidom-core': 0.97.0 + '@swagger-api/apidom-ns-openapi-2': 0.97.0 + '@swagger-api/apidom-parser-adapter-json': 0.97.0 + '@types/ramda': 0.29.11 + ramda: 0.29.1 + ramda-adjunct: 4.1.1(ramda@0.29.1) + dev: false + optional: true + + /@swagger-api/apidom-parser-adapter-openapi-json-3-0@0.97.0: + resolution: {integrity: sha512-psfxh7k671HukibaY53cems0fcsLQP8U5lQPzVDevEGJQoguAWHyV2C5kOr52XOJInmsN5E+COEn6oPzsIaDCg==} + requiresBuild: true + dependencies: + '@babel/runtime-corejs3': 7.24.0 + '@swagger-api/apidom-core': 0.97.0 + '@swagger-api/apidom-ns-openapi-3-0': 0.97.0 + '@swagger-api/apidom-parser-adapter-json': 0.97.0 + '@types/ramda': 0.29.11 + ramda: 0.29.1 + ramda-adjunct: 4.1.1(ramda@0.29.1) + dev: false + optional: true + + /@swagger-api/apidom-parser-adapter-openapi-json-3-1@0.97.0: + resolution: {integrity: sha512-PJpcLhS441ATFjbCHHhVUPd8K1JZaiFQJS7yfQEKQmA5MlBRh3w7mqCJAbZN49wuMkelTdB8qJJlVEGUDSxX5Q==} + requiresBuild: true + dependencies: + '@babel/runtime-corejs3': 7.24.0 + '@swagger-api/apidom-core': 0.97.0 + '@swagger-api/apidom-ns-openapi-3-1': 0.97.0 + '@swagger-api/apidom-parser-adapter-json': 0.97.0 + '@types/ramda': 0.29.11 + ramda: 0.29.1 + ramda-adjunct: 4.1.1(ramda@0.29.1) + dev: false + optional: true + + /@swagger-api/apidom-parser-adapter-openapi-yaml-2@0.97.0: + resolution: {integrity: sha512-X5saN/AElpS+LohbSjNPesUPWYOM8Wb19+OD7/WS1r6AVRIlj5gKLy3vO7BLBvaER5G73qYylfrPxCoUPlpZZg==} + requiresBuild: true + dependencies: + '@babel/runtime-corejs3': 7.24.0 + '@swagger-api/apidom-core': 0.97.0 + '@swagger-api/apidom-ns-openapi-2': 0.97.0 + '@swagger-api/apidom-parser-adapter-yaml-1-2': 0.97.0 + '@types/ramda': 0.29.11 + ramda: 0.29.1 + ramda-adjunct: 4.1.1(ramda@0.29.1) + dev: false + optional: true + + /@swagger-api/apidom-parser-adapter-openapi-yaml-3-0@0.97.0: + resolution: {integrity: sha512-kBW6atIN0rONf9kjNeE5eHkxb3amfby0vxKfk+9fiRdQbJVCg4UiWOFmU5rD9bc2smtLWSQNkjlMkKS3i2/4Wg==} + requiresBuild: true + dependencies: + '@babel/runtime-corejs3': 7.24.0 + '@swagger-api/apidom-core': 0.97.0 + '@swagger-api/apidom-ns-openapi-3-0': 0.97.0 + '@swagger-api/apidom-parser-adapter-yaml-1-2': 0.97.0 + '@types/ramda': 0.29.11 + ramda: 0.29.1 + ramda-adjunct: 4.1.1(ramda@0.29.1) + dev: false + optional: true + + /@swagger-api/apidom-parser-adapter-openapi-yaml-3-1@0.97.0: + resolution: {integrity: sha512-cclRwQ9IQj6sFLUCDzqRbbbplQfKdt9xz8YONvtq4XBHZO6Ab8z5CF3A9eLiuW1TJZ3y0QU7xmI6h5jWwUrC9w==} + requiresBuild: true + dependencies: + '@babel/runtime-corejs3': 7.24.0 + '@swagger-api/apidom-core': 0.97.0 + '@swagger-api/apidom-ns-openapi-3-1': 0.97.0 + '@swagger-api/apidom-parser-adapter-yaml-1-2': 0.97.0 + '@types/ramda': 0.29.11 + ramda: 0.29.1 + ramda-adjunct: 4.1.1(ramda@0.29.1) + dev: false + optional: true + + /@swagger-api/apidom-parser-adapter-workflows-json-1@0.97.0: + resolution: {integrity: sha512-UvnISzq5JDG43sTIJ2oE8u8qALHmBKbYMGncYgUdlHx7z5RgPAWxIRDWH40YFzUSuKSRNp4TI7eG/9MUd3RnGA==} + requiresBuild: true + dependencies: + '@babel/runtime-corejs3': 7.24.0 + '@swagger-api/apidom-core': 0.97.0 + '@swagger-api/apidom-ns-workflows-1': 0.97.0 + '@swagger-api/apidom-parser-adapter-json': 0.97.0 + '@types/ramda': 0.29.11 + ramda: 0.29.1 + ramda-adjunct: 4.1.1(ramda@0.29.1) + dev: false + optional: true + + /@swagger-api/apidom-parser-adapter-workflows-yaml-1@0.97.0: + resolution: {integrity: sha512-TTZS0YkFvy0X8Huom+fr3muZsCy8mtDpuUks45EvPqv6gjGLCBw3/AZ507CS0YxYvoERbXkYfAYqxW8lptwKuQ==} + requiresBuild: true + dependencies: + '@babel/runtime-corejs3': 7.24.0 + '@swagger-api/apidom-core': 0.97.0 + '@swagger-api/apidom-ns-workflows-1': 0.97.0 + '@swagger-api/apidom-parser-adapter-yaml-1-2': 0.97.0 + '@types/ramda': 0.29.11 + ramda: 0.29.1 + ramda-adjunct: 4.1.1(ramda@0.29.1) + dev: false + optional: true + + /@swagger-api/apidom-parser-adapter-yaml-1-2@0.97.0: + resolution: {integrity: sha512-3f1ADjQyKyLnuRhPuoHMgWMW28o0ylohWCQwX4q69CMH0kqGxP7HnqIU/i0I2cxZdjGv72OCdiKwaR/OgHcmEw==} + requiresBuild: true + dependencies: + '@babel/runtime-corejs3': 7.24.0 + '@swagger-api/apidom-ast': 0.97.0 + '@swagger-api/apidom-core': 0.97.0 + '@swagger-api/apidom-error': 0.97.0 + '@types/ramda': 0.29.11 + ramda: 0.29.1 + ramda-adjunct: 4.1.1(ramda@0.29.1) + tree-sitter: 0.20.4 + tree-sitter-yaml: 0.5.0 + web-tree-sitter: 0.20.3 + dev: false + optional: true + + /@swagger-api/apidom-reference@0.97.0: + resolution: {integrity: sha512-Xngw4kf9oz3ZkfPlDJoaO2OslFIKLNpdxmjxOtInTZTRo61zkm3oPd+TY8WVfxjsoja2TGRqYEzyn5H6ZZ8oBA==} + dependencies: + '@babel/runtime-corejs3': 7.24.0 + '@swagger-api/apidom-core': 0.97.0 + '@types/ramda': 0.29.11 + axios: 1.6.7 + minimatch: 7.4.6 + process: 0.11.10 + ramda: 0.29.1 + ramda-adjunct: 4.1.1(ramda@0.29.1) + stampit: 4.3.2 + optionalDependencies: + '@swagger-api/apidom-error': 0.97.0 + '@swagger-api/apidom-json-pointer': 0.97.0 + '@swagger-api/apidom-ns-asyncapi-2': 0.97.0 + '@swagger-api/apidom-ns-openapi-2': 0.97.0 + '@swagger-api/apidom-ns-openapi-3-0': 0.97.0 + '@swagger-api/apidom-ns-openapi-3-1': 0.97.0 + '@swagger-api/apidom-ns-workflows-1': 0.97.0 + '@swagger-api/apidom-parser-adapter-api-design-systems-json': 0.97.0 + '@swagger-api/apidom-parser-adapter-api-design-systems-yaml': 0.97.0 + '@swagger-api/apidom-parser-adapter-asyncapi-json-2': 0.97.0 + '@swagger-api/apidom-parser-adapter-asyncapi-yaml-2': 0.97.0 + '@swagger-api/apidom-parser-adapter-json': 0.97.0 + '@swagger-api/apidom-parser-adapter-openapi-json-2': 0.97.0 + '@swagger-api/apidom-parser-adapter-openapi-json-3-0': 0.97.0 + '@swagger-api/apidom-parser-adapter-openapi-json-3-1': 0.97.0 + '@swagger-api/apidom-parser-adapter-openapi-yaml-2': 0.97.0 + '@swagger-api/apidom-parser-adapter-openapi-yaml-3-0': 0.97.0 + '@swagger-api/apidom-parser-adapter-openapi-yaml-3-1': 0.97.0 + '@swagger-api/apidom-parser-adapter-workflows-json-1': 0.97.0 + '@swagger-api/apidom-parser-adapter-workflows-yaml-1': 0.97.0 + '@swagger-api/apidom-parser-adapter-yaml-1-2': 0.97.0 + transitivePeerDependencies: + - debug + dev: false + /@types/estree@1.0.3: resolution: {integrity: sha512-CS2rOaoQ/eAgAfcTfq6amKG7bsN+EMcgGY4FAFQdvSj2y1ixvOZTUA9mOtCai7E1SYu283XNw7urKK30nP3wkQ==} @@ -1104,6 +1552,12 @@ packages: resolution: {integrity: sha512-WCfD5Ht3ZesJUsONdhvm84dmzWOiOzOAqOncN0++w0lBw1o8OuDNJF2McvvCef/yBqb/HYRahp1BYtODFQ8bRg==} dev: false + /@types/hast@2.3.10: + resolution: {integrity: sha512-McWspRw8xx8J9HurkVBfYj0xKoE25tOFlHGdx4MJ5xORQrMGZNqJhVQWaIbm6Oyla5kYOXtDiopzKRJzEOkwJw==} + dependencies: + '@types/unist': 2.0.10 + dev: false + /@types/json-schema@7.0.14: resolution: {integrity: sha512-U3PUjAudAdJBeC2pgN8uTIKgxrb4nlDF3SF0++EldXQvQBGkpFZMSnwQiIoDU77tv45VgNkl/L4ouD+rEomujw==} dev: true @@ -1147,6 +1601,12 @@ packages: resolution: {integrity: sha512-j3pOPiEcWZ34R6a6mN07mUkM4o4Lwf6hPNt8eilOeZhTFbxFXmKhvXl9Y28jotFPaI1bpPDJsbCprUoNke6OrA==} dev: false + /@types/ramda@0.29.11: + resolution: {integrity: sha512-jm1+PmNOpE7aPS+mMcuB4a72VkCXUJqPSaQRu2YqR8MbsFfaowYXgKxc7bluYdDpRHNXT5Z+xu+Lgr3/ml6wSA==} + dependencies: + types-ramda: 0.29.9 + dev: false + /@types/semver@7.5.4: resolution: {integrity: sha512-MMzuxN3GdFwskAnb6fz0orFvhfqi752yjaXylr0Rp4oDg5H0Zn1IuyRhDVvYOwAXoJirx2xuS16I3WjxnAIHiQ==} dev: true @@ -1165,10 +1625,18 @@ packages: '@types/geojson': 7946.0.14 dev: false - /@types/swagger-ui-dist@3.30.4: - resolution: {integrity: sha512-FeOBc7uj4/lAIh4jkBzorvmNoUU9JgSccyDIRo0E9MJw9KQfSxlwpHCyKGnU9kfV5N5dEdfpY8wm7to3nSwTmA==} + /@types/swagger-ui@3.52.4: + resolution: {integrity: sha512-7NV7q8BfupqdQxr26OkM0g0YEPB9uXnKGzXadgcearvI9MoCHt3F72lPTX3fZZIlrr21DC0IK26wcDMZ37oFDA==} dev: true + /@types/unist@2.0.10: + resolution: {integrity: sha512-IfYcSBWE3hLpBg8+X2SEa8LVkJdJEkT2Ese2aaLs3ptGdVtABxndrMaxuFlQ1qdFf9Q5rDvDpxI3WwgvKFAsQA==} + dev: false + + /@types/use-sync-external-store@0.0.3: + resolution: {integrity: sha512-EwmlvuaxPNej9+T4v5AuBPJa2x2UOJVdjCtDHgcDqitUeOtjnJKJ+apYjVcAoBEMjKW1VVFGZLUb5+qqa09XFA==} + dev: false + /@types/web-bluetooth@0.0.20: resolution: {integrity: sha512-g9gZnnXVq7gM7v3tJCWV/qw7w+KeOlSHAhgF9RytFyifW6AF61hdT2ucrYhPq9hLs5JIryeupHV3qGk95dH9ow==} dev: false @@ -1569,6 +2037,10 @@ packages: - vue dev: false + /@yarnpkg/lockfile@1.1.0: + resolution: {integrity: sha512-GpSwvyXOcOOlV70vbnzjj4fW5xW/FdUF6nQEt1ENy7m4ZCczi1+/buVUPAqmGfqznsORNFzUMjctTIp8a9tuCQ==} + dev: false + /acorn-jsx@5.3.2(acorn@8.11.2): resolution: {integrity: sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==} peerDependencies: @@ -1642,7 +2114,6 @@ packages: engines: {node: '>=8'} dependencies: color-convert: 2.0.1 - dev: true /ansi-styles@6.2.1: resolution: {integrity: sha512-bN798gFfQX+viw3R7yrGWRqnrN2oRkEkUjjl4JNn4E8GxxbjtG3FbrEIIY3l8/hrwUwIeCZvi4QuOTP4MErVug==} @@ -1651,7 +2122,6 @@ packages: /any-promise@1.3.0: resolution: {integrity: sha512-7UvmKalWRt1wgjL1RrGxoSJW/0QZFIegpeGvZG9kjp8vrRu55XTHbwnqq2GpXm9uLbcuhxm3IqX9OB4MZR1b2A==} - dev: true /anymatch@3.1.3: resolution: {integrity: sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==} @@ -1666,7 +2136,6 @@ packages: /arg@5.0.2: resolution: {integrity: sha512-PYjyFOLKQ9y57JvQ6QLo8dAgNqswh8M1RMJYdQduT6xbWSgK36P/Z/v+p888pM69jMMfS8Xd8F6I1kQ/I9HUGg==} - dev: true /argparse@1.0.10: resolution: {integrity: sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==} @@ -1714,12 +2183,16 @@ packages: /asynckit@0.4.0: resolution: {integrity: sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==} - dev: true /at-least-node@1.0.0: resolution: {integrity: sha512-+q/t7Ekv1EDY2l6Gda6LLiX14rU9TV20Wa3ofeQmwPFZbOMo9DXrLbOjFaaclkXKWidIaopwAObQDqwWtGUjqg==} engines: {node: '>= 4.0.0'} - dev: true + + /autolinker@3.16.2: + resolution: {integrity: sha512-JiYl7j2Z19F9NdTmirENSUUIIL/9MytEWtmzhfmsKPCp9E+G35Y0UNCMoM9tFigxT59qSc8Ml2dlZXOCVTYwuA==} + dependencies: + tslib: 2.6.2 + dev: false /autoprefixer@10.4.18(postcss@8.4.35): resolution: {integrity: sha512-1DKbDfsr6KUElM6wg+0zRNkB/Q7WcKYAaK+pzXn+Xqmszm/5Xa9coeNdtP88Vi+dPzZnMjhge8GIV49ZQkDa+g==} @@ -1745,9 +2218,18 @@ packages: resolution: {integrity: sha512-NmWvPnx0F1SfrQbYwOi7OeaNGokp9XhzNioJ/CSBs8Qa4vxug81mhJEAVZwxXuBmYB5KDRfMq/F3RR0BIU7sWg==} dev: true + /axios@1.6.7: + resolution: {integrity: sha512-/hDJGff6/c7u0hDkvkGxR/oy6CbCs8ziCsC7SqmhjfozqiJGc8Z11wrv9z9lYfY4K8l+H9TpjcMDX0xOZmx+RA==} + dependencies: + follow-redirects: 1.15.5 + form-data: 4.0.0 + proxy-from-env: 1.1.0 + transitivePeerDependencies: + - debug + dev: false + /balanced-match@1.0.2: resolution: {integrity: sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==} - dev: true /balanced-match@2.0.0: resolution: {integrity: sha512-1ugUSr8BHXRnK23KfuYS+gVMC3LB8QGH9W1iGtDPsNWoQbgtXSExkBu2aDR4epiGWZOjZsj6lDl/N/AqqTC3UA==} @@ -1755,7 +2237,6 @@ packages: /base64-js@1.5.1: resolution: {integrity: sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==} - dev: true /bcrypt-pbkdf@1.0.2: resolution: {integrity: sha512-qeFIXtP4MSoi6NLqO12WfqARWWuCKi2Rn/9hJLEmtB5yTNr9DqFWkJRCf2qShWzPeAMRnOgCrq0sg/KLv5ES9w==} @@ -1772,6 +2253,16 @@ packages: resolution: {integrity: sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA==} engines: {node: '>=8'} + /bl@4.1.0: + resolution: {integrity: sha512-1W07cM9gS6DcLperZfFSj+bWLtaPGSOHWhPiGzXmvVJbRLdG82sH/Kn8EtW1VqWVA54AKf2h5k5BbnIbwF3h6w==} + requiresBuild: true + dependencies: + buffer: 5.7.1 + inherits: 2.0.4 + readable-stream: 3.6.2 + dev: false + optional: true + /blob-util@2.0.2: resolution: {integrity: sha512-T7JQa+zsXXEa6/8ZhHcQEW1UFfVM49Ts65uBkFL6fz2QmrElqmbajIDJvuA0tEhRe5eIjpV9ZF+0RfZR9voJFQ==} dev: true @@ -1796,13 +2287,11 @@ packages: dependencies: balanced-match: 1.0.2 concat-map: 0.0.1 - dev: true /brace-expansion@2.0.1: resolution: {integrity: sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==} dependencies: balanced-match: 1.0.2 - dev: true /braces@3.0.2: resolution: {integrity: sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==} @@ -1830,7 +2319,6 @@ packages: dependencies: base64-js: 1.5.1 ieee754: 1.2.1 - dev: true /bundle-name@3.0.0: resolution: {integrity: sha512-PKA4BeSvBpQKQ8iPOGCSiell+N8P+Tf1DlwqmYhpe2gAhKPHn8EYOxVT+ShuGmhg8lN8XiSlS80yiExKXrURlw==} @@ -1870,7 +2358,6 @@ packages: function-bind: 1.1.2 get-intrinsic: 1.2.2 set-function-length: 1.1.1 - dev: true /callsites@3.1.0: resolution: {integrity: sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==} @@ -1880,7 +2367,6 @@ packages: /camelcase-css@2.0.1: resolution: {integrity: sha512-QOSvevhslijgYwRx6Rv7zKdMF8lbRmx+uQGx2+vDc+KI/eBnsy9kit5aj23AgGu3pa4t9AgwbnXWqS+iOY+2aA==} engines: {node: '>= 6'} - dev: true /camelcase@6.3.0: resolution: {integrity: sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA==} @@ -1910,7 +2396,18 @@ packages: dependencies: ansi-styles: 4.3.0 supports-color: 7.2.0 - dev: true + + /character-entities-legacy@1.1.4: + resolution: {integrity: sha512-3Xnr+7ZFS1uxeiUDvV02wQ+QDbc55o97tIV5zHScSPJpcLm/r0DFPcoY3tYRp+VZukxuMeKgXYmsXQHO05zQeA==} + dev: false + + /character-entities@1.2.4: + resolution: {integrity: sha512-iBMyeEHxfVnIakwOuDXpVkc54HijNgCyQB2w0VfGQThle6NXn50zU6V/u+LDhxHcDUPojn6Kpga3PTAD8W1bQw==} + dev: false + + /character-reference-invalid@1.1.4: + resolution: {integrity: sha512-mKKUkUbhPpQlCOfIuZkvSEgktjPFIsZKRRbC6KWVEMvlzblj3i3asQv5ODsrwt0N3pHAEvjP8KTQPHkp0+6jOg==} + dev: false /check-more-types@2.24.0: resolution: {integrity: sha512-Pj779qHxV2tuapviy1bSZNEL1maXr13bPYpsvSDB68HlYcYuhlDrmGd63i0JHMCLKzc7rUSNIrpdJlhVlNwrxA==} @@ -1931,10 +2428,19 @@ packages: optionalDependencies: fsevents: 2.3.3 + /chownr@1.1.4: + resolution: {integrity: sha512-jJ0bqzaylmJtVnNgzTeSOs8DPavpbYgEr/b0YL8/2GO3xJEhInFmhKMUnEJQjZumK7KXGFhUy89PrsJWlakBVg==} + requiresBuild: true + dev: false + optional: true + /ci-info@3.9.0: resolution: {integrity: sha512-NIxF55hv4nSqQswkAeiOi1r83xy8JldOFDTWiug55KBu9Jnblncd2U6ViHmYgHf01TPZS77NJBhBMKdWj9HQMQ==} engines: {node: '>=8'} - dev: true + + /classnames@2.5.1: + resolution: {integrity: sha512-saHYOzhIQs6wy2sVxTM6bUDsQO4F50V9RQ22qBpEdCW+I+/Wmke2HOl6lS6dTpdxVhb88/I6+Hs+438c3lfUow==} + dev: false /clean-stack@2.2.0: resolution: {integrity: sha512-4diC9HaTE+KRAMWhDhrGOECgWZxoevMc5TlkObMqNSsVU62PYzXZ/SMTjzyGAFF1YusgxGcSWTEXBhp0CPwQ1A==} @@ -1976,7 +2482,6 @@ packages: engines: {node: '>=7.0.0'} dependencies: color-name: 1.1.4 - dev: true /color-name@1.1.3: resolution: {integrity: sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==} @@ -1984,7 +2489,6 @@ packages: /color-name@1.1.4: resolution: {integrity: sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==} - dev: true /colord@2.9.3: resolution: {integrity: sha512-jeC1axXpnb0/2nn/Y1LPuLdgXBLH7aDcHu4KEKfqw3CUhX7ZpfBSlPKyqXE6btIgEzfWtrX3/tyBCaCvXvMkOw==} @@ -1999,12 +2503,14 @@ packages: engines: {node: '>= 0.8'} dependencies: delayed-stream: 1.0.0 - dev: true + + /comma-separated-tokens@1.0.8: + resolution: {integrity: sha512-GHuDRO12Sypu2cV70d1dkA2EUmXHgntrzbpvOB+Qy+49ypNfGgFQIC2fhhXbnyrJRynDCAARsT7Ou0M6hirpfw==} + dev: false /commander@4.1.1: resolution: {integrity: sha512-NOKm8xhkzAjzFx8B2v5OAHT+u5pRQc2UCa2Vq9jYL/31o2wi9mxBA7LIFs3sV5VSC49z6pEhfbMULvShKj26WA==} engines: {node: '>= 6'} - dev: true /commander@6.2.1: resolution: {integrity: sha512-U7VdrJFnJgo4xjrHpTzu0yrHPGImdsmD95ZlgYSEajAn2JKzDhDTPG9kBTefmObL2w/ngeZnilk+OV9CG3d7UA==} @@ -2022,12 +2528,27 @@ packages: /concat-map@0.0.1: resolution: {integrity: sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==} - dev: true /convert-source-map@2.0.0: resolution: {integrity: sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg==} dev: true + /cookie@0.6.0: + resolution: {integrity: sha512-U71cyTamuh1CRNCfpGY6to28lxvNwPG4Guz/EVjgf3Jmzv0vlDp1atT9eS5dDjMYHucpHbWns6Lwf3BKz6svdw==} + engines: {node: '>= 0.6'} + dev: false + + /copy-to-clipboard@3.3.3: + resolution: {integrity: sha512-2KV8NhB5JqC3ky0r9PMCAZKbUHSwtEo4CwCs0KXgruG43gX5PMqDEBbVU4OUzw2MuAWUfsuFmWvEKG5QRfSnJA==} + dependencies: + toggle-selection: 1.0.6 + dev: false + + /core-js-pure@3.36.0: + resolution: {integrity: sha512-cN28qmhRNgbMZZMc/RFu5w8pK9VJzpb2rJVR/lHuZJKwmXnoWOpXmMkxqBB514igkp1Hu8WGROsiOAzUcKdHOQ==} + requiresBuild: true + dev: false + /core-util-is@1.0.2: resolution: {integrity: sha512-3lqz5YjWTYnW6dlDa5TLaTCcShfar1e40rmcJVwCBJC6mWlFuj0eCHIElmG1g5kyuJ/GD+8Wn4FFCcz4gJPfaQ==} dev: true @@ -2055,7 +2576,6 @@ packages: path-key: 3.1.1 shebang-command: 2.0.0 which: 2.0.2 - dev: true /css-functions-list@3.2.1: resolution: {integrity: sha512-Nj5YcaGgBtuUmn1D7oHqPW0c9iui7xsTsj5lIX8ZgevdfhmjFfKB3r8moHJtNJnctnYXJyYX5I1pp90HM4TPgQ==} @@ -2070,11 +2590,14 @@ packages: source-map-js: 1.0.2 dev: true + /css.escape@1.5.1: + resolution: {integrity: sha512-YUifsXXuknHlUsmlgyY0PKzgPOr7/FjCePfHNt0jxm83wHZi44VDMQ7/fGNkjY3/jV1MC+1CmZbaHzugyeRtpg==} + dev: false + /cssesc@3.0.0: resolution: {integrity: sha512-/Tb/JcjK111nNScGob5MNtsntNM1aCNUDipB/TkwZFhyDrrE47SOx/18wF2bbjgc3ZzCSKW1T5nt5EbFoAz/Vg==} engines: {node: '>=4'} hasBin: true - dev: true /csstype@3.1.3: resolution: {integrity: sha512-M1uQkMl8rQK/szD0LNhtqxIPLpimGm8sOBwU7lLnCpSbTyY3yeU1Vc7l4KT5zT4s/yOxHH5O7tIuuLOCnLADRw==} @@ -2169,10 +2692,29 @@ packages: supports-color: 8.1.1 dev: true + /decompress-response@6.0.0: + resolution: {integrity: sha512-aW35yZM6Bb/4oJlZncMH2LCoZtJXTRxES17vE3hoRiowU2kWHaJKFkSBDnDR+cm9J+9QhXmREyIfv0pji9ejCQ==} + engines: {node: '>=10'} + requiresBuild: true + dependencies: + mimic-response: 3.1.0 + dev: false + optional: true + + /deep-extend@0.6.0: + resolution: {integrity: sha512-LOHxIOaPYdHlJRtCQfDIVZtfw/ufM8+rVj649RIHzcm/vGwQRXFt6OPqIFWsm2XEMrNIEtWR64sY1LEKD2vAOA==} + engines: {node: '>=4.0.0'} + dev: false + /deep-is@0.1.4: resolution: {integrity: sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==} dev: true + /deepmerge@4.3.1: + resolution: {integrity: sha512-3sUqbMEc77XqpdNO7FRyRog+eW3ph+GYCbj+rK+uYyRMuwsVy0rMiVtPn+QJlKFvWP/1PYpapqYn0Me2knFn+A==} + engines: {node: '>=0.10.0'} + dev: false + /default-browser-id@3.0.0: resolution: {integrity: sha512-OZ1y3y0SqSICtE8DE4S8YOE9UZOJ8wO16fKWVP5J1Qz42kV9jcnMVFrEE/noXb/ss3Q4pZIH79kxofzyNNtUNA==} engines: {node: '>=12'} @@ -2211,7 +2753,6 @@ packages: get-intrinsic: 1.2.2 gopd: 1.0.1 has-property-descriptors: 1.0.1 - dev: true /define-lazy-prop@3.0.0: resolution: {integrity: sha512-N+MeXYoqr3pOgn8xfyRPREN7gHakLYjhsHhWGT3fWAiL4IkAt0iDw14QiiEm2bE30c5XX5q0FtAA3CK5f9/BUg==} @@ -2221,11 +2762,16 @@ packages: /delayed-stream@1.0.0: resolution: {integrity: sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ==} engines: {node: '>=0.4.0'} - dev: true + + /detect-libc@2.0.2: + resolution: {integrity: sha512-UX6sGumvvqSaXgdKGUsgZWqcUyIXZ/vZTrlRT/iobiKhGL0zL4d3osHj3uqllWJK+i+sixDS/3COVEOFbupFyw==} + engines: {node: '>=8'} + requiresBuild: true + dev: false + optional: true /didyoumean@1.2.2: resolution: {integrity: sha512-gxtyfqMg7GKyhQmb056K7M3xszy/myH8w+B4RT+QXBQsvAOdc3XymqDDPHx1BgPgsdAA5SIifona89YtRATDzw==} - dev: true /dir-glob@3.0.1: resolution: {integrity: sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA==} @@ -2236,7 +2782,6 @@ packages: /dlv@1.1.3: resolution: {integrity: sha512-+HlytyjlPKnIG8XuRG8WvmBP8xs8P71y+SKKS6ZXWoEgLuePxtDoUEiH7WkdePWrQ5JBpE6aoVqfZfJUQkjXwA==} - dev: true /doctrine@3.0.0: resolution: {integrity: sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w==} @@ -2245,6 +2790,15 @@ packages: esutils: 2.0.3 dev: true + /dompurify@3.0.9: + resolution: {integrity: sha512-uyb4NDIvQ3hRn6NiC+SIFaP4mJ/MdXlvtunaqK9Bn6dD3RuB/1S/gasEjDHD8eiaqdSael2vBv+hOs7Y+jhYOQ==} + dev: false + + /drange@1.1.1: + resolution: {integrity: sha512-pYxfDYpued//QpnLIm4Avk7rsNtAtQkUES2cwAYSvD/wd2pKD71gN2Ebj3e7klzXwjocvE8c5vx/1fxwpqmSxA==} + engines: {node: '>=4'} + dev: false + /earcut@2.2.4: resolution: {integrity: sha512-/pjZsA1b4RPHbeWZQn66SWS8nZZWLQQ23oE3Eam7aroEFGEvwKAsJfZ9ytiEMycfzXWpca4FA9QIOehf7PocBQ==} dev: false @@ -2268,7 +2822,6 @@ packages: resolution: {integrity: sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q==} dependencies: once: 1.4.0 - dev: true /enquirer@2.4.1: resolution: {integrity: sha512-rRqJg/6gd538VHvR3PSrdRBb/1Vy2YfzHqzvbhGIQpDRKIa4FgV/54b5Q1xYSxOOwKvjXweS26E0Q+nAMwp2pQ==} @@ -2574,8 +3127,15 @@ packages: pify: 2.3.0 dev: true - /extend-shallow@2.0.1: - resolution: {integrity: sha512-zCnTtlxNoAiDc3gqY2aYAWFx7XWWiasuF2K8Me5WbN8otHKTUKBwjPtNpRs/rbUZm7KxWAaNj7P1a/p52GbVug==} + /expand-template@2.0.3: + resolution: {integrity: sha512-XYfuKMvj4O35f/pOXLObndIRvyQ+/+6AhODh+OKWj9S9498pHHn/IMszH+gt0fBCRWMNfk1ZSp5x3AifmnI2vg==} + engines: {node: '>=6'} + requiresBuild: true + dev: false + optional: true + + /extend-shallow@2.0.1: + resolution: {integrity: sha512-zCnTtlxNoAiDc3gqY2aYAWFx7XWWiasuF2K8Me5WbN8otHKTUKBwjPtNpRs/rbUZm7KxWAaNj7P1a/p52GbVug==} engines: {node: '>=0.10.0'} dependencies: is-extendable: 0.1.1 @@ -2629,7 +3189,10 @@ packages: glob-parent: 5.1.2 merge2: 1.4.1 micromatch: 4.0.5 - dev: true + + /fast-json-patch@3.1.1: + resolution: {integrity: sha512-vf6IHUX2SBcA+5/+4883dsIjpBTqmfBjmYiWK1savxQmFk4JfBMLa7ynTYOs1Rolp/T1betJxHiGD3g1Mn8lUQ==} + dev: false /fast-json-stable-stringify@2.1.0: resolution: {integrity: sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==} @@ -2648,7 +3211,12 @@ packages: resolution: {integrity: sha512-wBrocU2LCXXa+lWBt8RoIRD89Fi8OdABODa/kEnyeyjS5aZO5/GNvI5sEINADqP/h8M29UHTHUb53sUu5Ihqdw==} dependencies: reusify: 1.0.4 - dev: true + + /fault@1.0.4: + resolution: {integrity: sha512-CJ0HCB5tL5fYTEA7ToAq5+kTwd++Borf1/bifxd9iT70QcXr4MRrO3Llf8Ifs70q+SJcGHFtnIE/Nw6giCtECA==} + dependencies: + format: 0.2.2 + dev: false /fd-slicer@1.1.0: resolution: {integrity: sha512-cE1qsB/VwyQozZ+q1dGxR8LBYNZeofhEdUNGSMbQD3Gw2lAzX9Zb3uIU6Ebc/Fmyjo9AWWfnn0AUCHqtevs/8g==} @@ -2691,6 +3259,12 @@ packages: path-exists: 4.0.0 dev: true + /find-yarn-workspace-root@2.0.0: + resolution: {integrity: sha512-1IMnbjt4KzsQfnhnzNd8wUEgXZ44IzZaZmnLYx7D5FZlaHt2gW20Cri8Q+E/t5tIj4+epTBub+2Zxu/vNILzqQ==} + dependencies: + micromatch: 4.0.5 + dev: false + /flat-cache@3.2.0: resolution: {integrity: sha512-CYcENa+FtcUKLmhhqyctpclsq7QF38pKjZHsGNiSQF5r4FtoKDWabFDl3hzaEQMvT1LHEysw5twgLvpYYb4vbw==} engines: {node: ^10.12.0 || >=12.0.0} @@ -2704,6 +3278,16 @@ packages: resolution: {integrity: sha512-36yxDn5H7OFZQla0/jFJmbIKTdZAQHngCedGxiMmpNfEZM0sdEeT+WczLQrjK6D7o2aiyLYDnkw0R3JK0Qv1RQ==} dev: true + /follow-redirects@1.15.5: + resolution: {integrity: sha512-vSFWUON1B+yAw1VN4xMfxgn5fTUiaOzAJCKBwIIgT/+7CuGy9+r+5gITvP62j3RmaD5Ph65UaERdOSRGUzZtgw==} + engines: {node: '>=4.0'} + peerDependencies: + debug: '*' + peerDependenciesMeta: + debug: + optional: true + dev: false + /forever-agent@0.6.1: resolution: {integrity: sha512-j0KLYPhm6zeac4lz3oJ3o65qvgQCcPubiyotZrXqEaG4hNagNYO8qdlUrX5vwqv9ohqeT/Z3j6+yW067yWWdUw==} dev: true @@ -2717,10 +3301,30 @@ packages: mime-types: 2.1.35 dev: true + /form-data@4.0.0: + resolution: {integrity: sha512-ETEklSGi5t0QMZuiXoA/Q6vcnxcLQP5vdugSpuAyi6SVGi2clPPp+xgEhuMaHC+zGgn31Kd235W35f7Hykkaww==} + engines: {node: '>= 6'} + dependencies: + asynckit: 0.4.0 + combined-stream: 1.0.8 + mime-types: 2.1.35 + dev: false + + /format@0.2.2: + resolution: {integrity: sha512-wzsgA6WOq+09wrU1tsJ09udeR/YZRaeArL9e1wPbFg3GG2yDnC2ldKpxs4xunpFF9DgqCqOIra3bc1HWrJ37Ww==} + engines: {node: '>=0.4.x'} + dev: false + /fraction.js@4.3.7: resolution: {integrity: sha512-ZsDfxO51wGAXREY55a7la9LScWpwv9RxIrYABrlvOFBlH/ShPnrtsXeuUIfXKKOVicNxQ+o8JTbJvjS4M89yew==} dev: true + /fs-constants@1.0.0: + resolution: {integrity: sha512-y6OAwoSIf7FyjMIv94u+b5rdheZEjzR63GTyZJm5qh4Bi+2YgwLCcI/fPFZkL5PSixOt6ZNKm+w+Hfp/Bciwow==} + requiresBuild: true + dev: false + optional: true + /fs-extra@11.2.0: resolution: {integrity: sha512-PmDi3uwK5nFuXh7XDTlVnS17xJS7vW36is2+w3xcv8SVxiB4NyATf4ctkVY5bkSjX0Y4nbvZCq1/EjtEyr9ktw==} engines: {node: '>=14.14'} @@ -2738,11 +3342,9 @@ packages: graceful-fs: 4.2.11 jsonfile: 6.1.0 universalify: 2.0.0 - dev: true /fs.realpath@1.0.0: resolution: {integrity: sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==} - dev: true /fsevents@2.3.3: resolution: {integrity: sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==} @@ -2753,7 +3355,6 @@ packages: /function-bind@1.1.2: resolution: {integrity: sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==} - dev: true /gensync@1.0.0-beta.2: resolution: {integrity: sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg==} @@ -2771,7 +3372,6 @@ packages: has-proto: 1.0.1 has-symbols: 1.0.3 hasown: 2.0.0 - dev: true /get-stream@5.2.0: resolution: {integrity: sha512-nBF+F1rAZVCu/p7rjzgA+Yb4lfYXrpl7a6VmJrU8wF9I1CKvP/QwPNZHnOlwbTkY6dvtFIzFMSyQXbLoTQPRpA==} @@ -2806,6 +3406,12 @@ packages: assert-plus: 1.0.0 dev: true + /github-from-package@0.0.0: + resolution: {integrity: sha512-SyHy3T1v2NUXn29OsWdxmK6RwHD+vkj3v8en8AOBZ1wBQ/hCAQ5bAQTD02kW4W9tUp/3Qh6J8r9EvntiyCmOOw==} + requiresBuild: true + dev: false + optional: true + /gl-matrix@3.4.3: resolution: {integrity: sha512-wcCp8vu8FT22BnvKVPjXa/ICBWRq/zjFfdofZy1WSpQZpphblv12/bOQLBC1rMM7SGOFS9ltVmKOHil5+Ml7gA==} dev: false @@ -2821,7 +3427,6 @@ packages: engines: {node: '>=10.13.0'} dependencies: is-glob: 4.0.3 - dev: true /glob@7.1.6: resolution: {integrity: sha512-LwaxwyZ72Lk7vZINtNNrywX0ZuLyStrdDtabefZKAY5ZGJhVtgdznluResxNmPitE0SAO+O26sWTHeKSI2wMBA==} @@ -2832,7 +3437,6 @@ packages: minimatch: 3.1.2 once: 1.4.0 path-is-absolute: 1.0.1 - dev: true /glob@7.2.3: resolution: {integrity: sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==} @@ -2843,7 +3447,6 @@ packages: minimatch: 3.1.2 once: 1.4.0 path-is-absolute: 1.0.1 - dev: true /global-dirs@3.0.1: resolution: {integrity: sha512-NBcGGFbBA9s1VzD41QXDG+3++t9Mn5t1FpLdhESY6oKY4gYTFpX4wO3sqGUa0Srjtbfj3szX0RnemmrVRUdULA==} @@ -2899,11 +3502,9 @@ packages: resolution: {integrity: sha512-d65bNlIadxvpb/A2abVdlqKqV563juRnZ1Wtk6s1sIR8uNsXR70xqIzVqxVf1eTqDunwT2MkczEeaezCKTZhwA==} dependencies: get-intrinsic: 1.2.2 - dev: true /graceful-fs@4.2.11: resolution: {integrity: sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==} - dev: true /graphemer@1.4.0: resolution: {integrity: sha512-EtKwoO6kxCL9WO5xipiHTZlSzBm7WLT627TqC/uVRd0HKmq8NXyebnNYxDoBi7wt8eTWrUrKXCOVaFq9x1kgag==} @@ -2927,36 +3528,49 @@ packages: /has-flag@4.0.0: resolution: {integrity: sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==} engines: {node: '>=8'} - dev: true /has-property-descriptors@1.0.1: resolution: {integrity: sha512-VsX8eaIewvas0xnvinAe9bw4WfIeODpGYikiWYLH+dma0Jw6KHYqWiWfhQlgOVK8D6PvjubK5Uc4P0iIhIcNVg==} dependencies: get-intrinsic: 1.2.2 - dev: true /has-proto@1.0.1: resolution: {integrity: sha512-7qE+iP+O+bgF9clE5+UoBFzE65mlBiVj3tKCrlNQ0Ogwm0BjpT/gK4SlLYDMybDh5I3TCTKnPPa0oMG7JDYrhg==} engines: {node: '>= 0.4'} - dev: true /has-symbols@1.0.3: resolution: {integrity: sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A==} engines: {node: '>= 0.4'} - dev: true /hasown@2.0.0: resolution: {integrity: sha512-vUptKVTpIJhcczKBbgnS+RtcuYMB8+oNzPK2/Hp3hanz8JmpATdmmgLgSaadVREkDm+e2giHwY3ZRkyjSIDDFA==} engines: {node: '>= 0.4'} dependencies: function-bind: 1.1.2 - dev: true + + /hast-util-parse-selector@2.2.5: + resolution: {integrity: sha512-7j6mrk/qqkSehsM92wQjdIgWM2/BW61u/53G6xmC8i1OmEdKLHbk419QKQUjz6LglWsfqoiHmyMRkP1BGjecNQ==} + dev: false + + /hastscript@6.0.0: + resolution: {integrity: sha512-nDM6bvd7lIqDUiYEiu5Sl/+6ReP0BMk/2f4U/Rooccxkj0P5nm+acM5PrGJ/t5I8qPGiqZSE6hVAwZEdZIvP4w==} + dependencies: + '@types/hast': 2.3.10 + comma-separated-tokens: 1.0.8 + hast-util-parse-selector: 2.2.5 + property-information: 5.6.0 + space-separated-tokens: 1.1.5 + dev: false /he@1.2.0: resolution: {integrity: sha512-F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw==} hasBin: true dev: true + /highlight.js@10.7.3: + resolution: {integrity: sha512-tzcUFauisWKNHaRkN4Wjl/ZA07gENAjFl3J/c480dprkGTg5EQstgaNFqBfUqCq54kZRIEcreTsAgF/m2quD7A==} + dev: false + /hookable@5.5.3: resolution: {integrity: sha512-Yc+BQe8SvoXH1643Qez1zqLRmbA5rCL+sSmk6TVos0LWVfNIB7PGncdlId77WzLGSIB5KaWgTaNTs2lNVEI6VQ==} dev: true @@ -3003,6 +3617,11 @@ packages: engines: {node: '>= 4'} dev: true + /immutable@3.8.2: + resolution: {integrity: sha512-15gZoQ38eYjEjxkorfbcgBKBL6R7T459OuK+CpcWt7O3KF4uPCx2tD0uFETlUDIyo+1789crbMhTvQBSR5yBMg==} + engines: {node: '>=0.10.0'} + dev: false + /immutable@4.3.4: resolution: {integrity: sha512-fsXeu4J4i6WNWSikpI88v/PcVflZz+6kMhUfIwc5SY+poQRPnaf5V7qds6SUyUN3cVxEzuCab7QIoLOQ+DQ1wA==} @@ -3029,11 +3648,9 @@ packages: dependencies: once: 1.4.0 wrappy: 1.0.2 - dev: true /inherits@2.0.4: resolution: {integrity: sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==} - dev: true /ini@1.3.8: resolution: {integrity: sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew==} @@ -3043,6 +3660,23 @@ packages: engines: {node: '>=10'} dev: true + /invariant@2.2.4: + resolution: {integrity: sha512-phJfQVBuaJM5raOpJjSfkiD6BpbCE4Ns//LaXl6wGYtUBY83nWS6Rf9tXm2e8VaK60JEjYldbPif/A2B1C2gNA==} + dependencies: + loose-envify: 1.4.0 + dev: false + + /is-alphabetical@1.0.4: + resolution: {integrity: sha512-DwzsA04LQ10FHTZuL0/grVDk4rFoVH1pjAToYwBrHSxcrBIGQuXrQMtD5U1b0U2XVgKZCTLLP8u2Qxqhy3l2Vg==} + dev: false + + /is-alphanumerical@1.0.4: + resolution: {integrity: sha512-UzoZUr+XfVz3t3v4KyGEniVL9BDRoQtY7tOyrRybkVNjDFWyo1yhXNGrrBTQxp3ib9BLAWs7k2YKBQsFRkZG9A==} + dependencies: + is-alphabetical: 1.0.4 + is-decimal: 1.0.4 + dev: false + /is-arrayish@0.2.1: resolution: {integrity: sha512-zz06S8t0ozoDXMG+ube26zeCTNXcKIPJZJi8hBrF4idCLms4CG9QtK7qBl1boi5ODzFpjswb5JPmHCbMpjaYzg==} dev: true @@ -3064,13 +3698,15 @@ packages: resolution: {integrity: sha512-hHrIjvZsftOsvKSn2TRYl63zvxsgE0K+0mYMoH6gD4omR5IWB2KynivBQczo3+wF1cCkjzvptnI9Q0sPU66ilw==} dependencies: hasown: 2.0.0 - dev: true + + /is-decimal@1.0.4: + resolution: {integrity: sha512-RGdriMmQQvZ2aqaQq3awNA6dCGtKpiDFcOzrTWrDAT2MiWrKQVPmxLGHl7Y2nNu6led0kEyoX0enY0qXYsv9zw==} + dev: false /is-docker@2.2.1: resolution: {integrity: sha512-F+i2BKsFrH66iaUFc0woD8sLy8getkwTwtOBjvs56Cx4CgJDeKQeqfz8wAYiSb8JOprWhHH5p77PbmYCvvUuXQ==} engines: {node: '>=8'} hasBin: true - dev: true /is-docker@3.0.0: resolution: {integrity: sha512-eljcgEDlEns/7AXFosB5K/2nCM4P7FQPkGc/DWLy5rmFEWvZayGrik1d9/QIY5nJ4f9YsVvBkA6kJpHn9rISdQ==} @@ -3105,6 +3741,10 @@ packages: dependencies: is-extglob: 2.1.1 + /is-hexadecimal@1.0.4: + resolution: {integrity: sha512-gyPJuv83bHMpocVYoqof5VDiZveEoGoFL8m3BXNb2VW8Xs+rz9kqO8LOQ5DH6EsuvilT1ApazU0pyl+ytbPtlw==} + dev: false + /is-inside-container@1.0.0: resolution: {integrity: sha512-KIYLCCJghfHZxqjYBE7rEy0OBuTd5xCHS7tHVgvCLkx7StIoaxwNW3hCALgEUjFfeRk+MG/Qxmp/vtETEF3tRA==} engines: {node: '>=14.16'} @@ -3140,7 +3780,6 @@ packages: /is-plain-object@5.0.0: resolution: {integrity: sha512-VRSzKkbMm5jMDoKLbltAkFQ5Qr7VDiTFGXxYFXXowVj387GeGNOCsOH6Msy00SGZ3Fp84b1Naa1psqgcCIEP5Q==} engines: {node: '>=0.10.0'} - dev: true /is-stream@2.0.1: resolution: {integrity: sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg==} @@ -3166,7 +3805,6 @@ packages: engines: {node: '>=8'} dependencies: is-docker: 2.2.1 - dev: true /is-wsl@3.1.0: resolution: {integrity: sha512-UcVfVfaK4Sc4m7X3dUSoHoozQGBEFeDC+zVo06t98xe8CzHSZZBekNXH+tu0NalHolcJ/QAGqS46Hef7QXBIMw==} @@ -3175,6 +3813,10 @@ packages: is-inside-container: 1.0.0 dev: true + /isarray@2.0.5: + resolution: {integrity: sha512-xHjhDr3cNBK0BzdUJSPXZntQUx/mwMS5Rw4A7lPJ90XGAO6ISP/ePDNuo0vhqOZU+UD5JoodwCAAoZQd3FeAKw==} + dev: false + /isexe@2.0.0: resolution: {integrity: sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==} @@ -3199,11 +3841,13 @@ packages: /jiti@1.21.0: resolution: {integrity: sha512-gFqAIbuKyyso/3G2qhiO2OM6shY6EPP/R0+mkDbyspxKazh8BXDC5FiFsUjlczgdNz/vfra0da2y+aHrusLG/Q==} hasBin: true - dev: true + + /js-file-download@0.4.12: + resolution: {integrity: sha512-rML+NkoD08p5Dllpjo0ffy4jRHeY6Zsapvr/W86N7E0yuzAO6qa5X9+xog6zQNlH102J7IXljNY2FtS6Lj3ucg==} + dev: false /js-tokens@4.0.0: resolution: {integrity: sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==} - dev: true /js-yaml@3.14.1: resolution: {integrity: sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g==} @@ -3218,7 +3862,6 @@ packages: hasBin: true dependencies: argparse: 2.0.1 - dev: true /jsbn@0.1.1: resolution: {integrity: sha512-UVU9dibq2JcFWxQPA6KCqj5O42VOmAY3zQUfEKxU0KpTGXwNoCjkX1e13eHNvw/xPynt6pU0rZ1htjWTNTSXsg==} @@ -3259,6 +3902,16 @@ packages: resolution: {integrity: sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw==} dev: true + /json-stable-stringify@1.1.1: + resolution: {integrity: sha512-SU/971Kt5qVQfJpyDveVhQ/vya+5hvrjClFOcr8c0Fq5aODJjMwutrOfCU+eCnVD5gpx1Q3fEqkyom77zH1iIg==} + engines: {node: '>= 0.4'} + dependencies: + call-bind: 1.0.5 + isarray: 2.0.5 + jsonify: 0.0.1 + object-keys: 1.1.1 + dev: false + /json-stringify-pretty-compact@4.0.0: resolution: {integrity: sha512-3CNZ2DnrpByG9Nqj6Xo8vqbjT4F6N+tb4Gb28ESAZjYZ5yqvmc56J+/kuIwkaAMOyblTQhUW7PxMkUb8Q36N3Q==} dev: false @@ -3293,7 +3946,10 @@ packages: universalify: 2.0.0 optionalDependencies: graceful-fs: 4.2.11 - dev: true + + /jsonify@0.0.1: + resolution: {integrity: sha512-2/Ki0GcmuqSrgFyelQq9M05y7PS0mEwuIzrf3f1fPqkVDVRvZrPZtVSMHxdgo8Aq0sxAOb/cr2aqqA3LeWHVPg==} + dev: false /jsprim@2.0.2: resolution: {integrity: sha512-gqXddjPqQ6G40VdnI6T6yObEC+pDNvyP95wdQhkWkg7crHH3km5qP1FsOXEkzEQwnz6gz5qGTn1c2Y52wP3OyQ==} @@ -3319,6 +3975,12 @@ packages: resolution: {integrity: sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==} engines: {node: '>=0.10.0'} + /klaw-sync@6.0.0: + resolution: {integrity: sha512-nIeuVSzdCCs6TDPTqI8w1Yre34sSq7AkZ4B3sfOBbI2CgVSB4Du4aLQijFU2+lhAFCwt9+42Hel6lQNIv6AntQ==} + dependencies: + graceful-fs: 4.2.11 + dev: false + /known-css-properties@0.29.0: resolution: {integrity: sha512-Ne7wqW7/9Cz54PDt4I3tcV+hAyat8ypyOGzYRJQfdxnnjeWsTxt1cy8pjvvKeI5kfXuyvULyeeAvwvvtAX3ayQ==} dev: true @@ -3343,11 +4005,9 @@ packages: /lilconfig@2.1.0: resolution: {integrity: sha512-utWOt/GHzuUxnLKxB6dk81RoOeoNeHgbrXiuGk4yyF5qlRz+iIVWu56E2fqGHFrXz0QNUhLB/8nKqvRH66JKGQ==} engines: {node: '>=10'} - dev: true /lines-and-columns@1.2.4: resolution: {integrity: sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==} - dev: true /linkify-it@5.0.0: resolution: {integrity: sha512-5aHCbzQRADcdP+ATqnDuhhJ/MRIqDkZX5pyjFHRRysS8vZ5AbqGEoFIb6pYHPZ+L/OC2Lc+xT8uHVVR5CAK/wQ==} @@ -3382,6 +4042,10 @@ packages: p-locate: 5.0.0 dev: true + /lodash.debounce@4.0.8: + resolution: {integrity: sha512-FT1yDzDYEoYWhnSGnpE/4Kj1fLZkDFyqRb7fNt6FdYOSxlUWAtp42Eh6Wb0rGIv/m9Bgo7x4GhQbm5Ys4SG5ow==} + dev: false + /lodash.merge@4.6.2: resolution: {integrity: sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==} dev: true @@ -3396,7 +4060,6 @@ packages: /lodash@4.17.21: resolution: {integrity: sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==} - dev: true /log-symbols@4.1.0: resolution: {integrity: sha512-8XPvpAA8uyhfteu8pIvQxpJZ7SYYdpUivZpGy6sFsBuKRY/7rQGavedeB8aK+Zkyq6upMFVL/9AW6vOYzfRyLg==} @@ -3416,6 +4079,20 @@ packages: wrap-ansi: 6.2.0 dev: true + /loose-envify@1.4.0: + resolution: {integrity: sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q==} + hasBin: true + dependencies: + js-tokens: 4.0.0 + dev: false + + /lowlight@1.20.0: + resolution: {integrity: sha512-8Ktj+prEb1RoCPkEOrPMYUN/nCggB7qAWe3a7OpMjWQkh3l2RD5wKRQ+o8Q8YuI9RG/xs95waaI/E6ym/7NsTw==} + dependencies: + fault: 1.0.4 + highlight.js: 10.7.3 + dev: false + /lru-cache@5.1.1: resolution: {integrity: sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==} dependencies: @@ -3427,7 +4104,6 @@ packages: engines: {node: '>=10'} dependencies: yallist: 4.0.0 - dev: true /magic-string@0.30.7: resolution: {integrity: sha512-8vBuFF/I/+OSLRmdf2wwFCJCz+nSn0m6DPvGH1fS/KiQoSaR+sETbov0eIk9KhEKy8CYqIkIAnbohxT/4H0kuA==} @@ -3515,7 +4191,6 @@ packages: /merge2@1.4.1: resolution: {integrity: sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==} engines: {node: '>= 8'} - dev: true /micromatch@4.0.5: resolution: {integrity: sha512-DMy+ERcEW2q8Z2Po+WNXuw3c5YaUSFjAO5GsJqfEl7UjvtIuFKO6ZrKvcItdy98dwFI2N1tg3zNIdKaQT+aNdA==} @@ -3523,19 +4198,16 @@ packages: dependencies: braces: 3.0.2 picomatch: 2.3.1 - dev: true /mime-db@1.52.0: resolution: {integrity: sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==} engines: {node: '>= 0.6'} - dev: true /mime-types@2.1.35: resolution: {integrity: sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==} engines: {node: '>= 0.6'} dependencies: mime-db: 1.52.0 - dev: true /mimic-fn@2.1.0: resolution: {integrity: sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==} @@ -3547,11 +4219,31 @@ packages: engines: {node: '>=12'} dev: true + /mimic-response@3.1.0: + resolution: {integrity: sha512-z0yWI+4FDrrweS8Zmt4Ej5HdJmky15+L2e6Wgn3+iK5fWzb6T3fhNFq2+MeTRb064c6Wr4N/wv0DzQTjNzHNGQ==} + engines: {node: '>=10'} + requiresBuild: true + dev: false + optional: true + + /minim@0.23.8: + resolution: {integrity: sha512-bjdr2xW1dBCMsMGGsUeqM4eFI60m94+szhxWys+B1ztIt6gWSfeGBdSVCIawezeHYLYn0j6zrsXdQS/JllBzww==} + engines: {node: '>=6'} + dependencies: + lodash: 4.17.21 + dev: false + /minimatch@3.1.2: resolution: {integrity: sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==} dependencies: brace-expansion: 1.1.11 - dev: true + + /minimatch@7.4.6: + resolution: {integrity: sha512-sBz8G/YjVniEz6lKPNpKxXwazJe4c19fEfV2GDMX6AjFz+MX9uDWIZW8XreVhkFW3fkIdTv/gxWr/Kks5FFAVw==} + engines: {node: '>=10'} + dependencies: + brace-expansion: 2.0.1 + dev: false /minimatch@9.0.3: resolution: {integrity: sha512-RHiac9mvaRw0x3AYRgDC1CxAP7HTcNrrECeA8YYJeWnpo+2Q5CegtZjaotWTWxDG3UeGA1coE05iH1mPjT/2mg==} @@ -3567,6 +4259,12 @@ packages: resolution: {integrity: sha512-vKivATfr97l2/QBCYAkXYDbrIWPM2IIKEl7YPhjCvKlG3kE2gm+uBo6nEXK3M5/Ffh/FLpKExzOQ3JJoJGFKBw==} dev: true + /mkdirp-classic@0.5.3: + resolution: {integrity: sha512-gKLcREMhtuZRwRAfqP3RFW+TK4JqApVBtOIftVgjuABpAtpxhPGaDcfvbhNvD0B8iD1oUr/txX35NjcaY6Ns/A==} + requiresBuild: true + dev: false + optional: true + /mlly@1.4.2: resolution: {integrity: sha512-i/Ykufi2t1EZ6NaPLdfnZk2AX8cs0d+mTzVKuPfqPKPatxLApaBoxJQ9x1/uckXtrS/U5oisPMDkNs0yQTaBRg==} dependencies: @@ -3603,17 +4301,62 @@ packages: any-promise: 1.3.0 object-assign: 4.1.1 thenify-all: 1.6.0 - dev: true + + /nan@2.19.0: + resolution: {integrity: sha512-nO1xXxfh/RWNxfd/XPfbIfFk5vgLsAxUR9y5O0cHMJu/AW9U95JLXqthYHjEp+8gQ5p96K9jUp8nbVOxCdRbtw==} + requiresBuild: true + dev: false + optional: true /nanoid@3.3.7: resolution: {integrity: sha512-eSRppjcPIatRIMC1U6UngP8XFcz8MQWGQdt1MTBQ7NaAmvXDfvNxbvWV3x2y6CdEUciCSsDHDQZbhYaB8QEo2g==} engines: {node: ^10 || ^12 || ^13.7 || ^14 || >=15.0.1} hasBin: true + /napi-build-utils@1.0.2: + resolution: {integrity: sha512-ONmRUqK7zj7DWX0D9ADe03wbwOBZxNAfF20PlGfCWQcD3+/MakShIHrMqx9YwPTfxDdF1zLeL+RGZiR9kGMLdg==} + requiresBuild: true + dev: false + optional: true + /natural-compare@1.4.0: resolution: {integrity: sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==} dev: true + /nightwind@1.1.13(tailwindcss@3.4.1): + resolution: {integrity: sha512-ipTD+u64LXa03wDf1v0EawdsFC6vtS4xzzXknRd50BBtckDYzZAendkE+4VjSLrwQcTpk0XphWxFk4ORIDdrOg==} + peerDependencies: + tailwindcss: ^2.0.0 || ^3.0.0 + dependencies: + tailwindcss: 3.4.1 + dev: false + + /node-abi@3.56.0: + resolution: {integrity: sha512-fZjdhDOeRcaS+rcpve7XuwHBmktS1nS1gzgghwKUQQ8nTy2FdSDr6ZT8k6YhvlJeHmmQMYiT/IH9hfco5zeW2Q==} + engines: {node: '>=10'} + requiresBuild: true + dependencies: + semver: 7.6.0 + dev: false + optional: true + + /node-abort-controller@3.1.1: + resolution: {integrity: sha512-AGK2yQKIjRuqnc6VkX2Xj5d+QW8xZ87pa1UK6yA6ouUyuxfHuMP6umE5QK7UmTeOAymo+Zx1Fxiuw9rVx8taHQ==} + dev: false + + /node-domexception@1.0.0: + resolution: {integrity: sha512-/jKZoMpw0F8GRwl4/eLROPA3cfcXtLApP0QzLmUT/HuPCZWyB7IY9ZrMeKw2O/nFIqPQB3PVM9aYm0F312AXDQ==} + engines: {node: '>=10.5.0'} + dev: false + + /node-fetch-commonjs@3.3.2: + resolution: {integrity: sha512-VBlAiynj3VMLrotgwOS3OyECFxas5y7ltLcK4t41lMUZeaK15Ym4QRkqN0EQKAFL42q9i21EPKjzLUPfltR72A==} + engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} + dependencies: + node-domexception: 1.0.0 + web-streams-polyfill: 3.3.3 + dev: false + /node-fetch@2.7.0: resolution: {integrity: sha512-c4FRfUm/dbcWZ7U+1Wq0AwCyFL+3nt2bEw05wfxSz+DWpWsitgmSgYmy2dQdWyKC1694ELPqMs/YzUSNozLt8A==} engines: {node: 4.x || >=6.0.0} @@ -3681,22 +4424,23 @@ packages: /object-assign@4.1.1: resolution: {integrity: sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==} engines: {node: '>=0.10.0'} - dev: true /object-hash@3.0.0: resolution: {integrity: sha512-RSn9F68PjH9HqtltsSnqYC1XXoWe9Bju5+213R98cNGttag9q9yAOTzdbsqvIa7aNm5WffBZFpWYr2aWrklWAw==} engines: {node: '>= 6'} - dev: true /object-inspect@1.13.1: resolution: {integrity: sha512-5qoj1RUiKOMsCCNLV1CBiPYE10sziTsnmNxkAI/rZhiD63CF7IqdFGC/XzjWjpSgLf0LxXX3bDFIh0E18f6UhQ==} - dev: true + + /object-keys@1.1.1: + resolution: {integrity: sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==} + engines: {node: '>= 0.4'} + dev: false /once@1.4.0: resolution: {integrity: sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==} dependencies: wrappy: 1.0.2 - dev: true /onetime@5.1.2: resolution: {integrity: sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==} @@ -3722,6 +4466,14 @@ packages: is-wsl: 3.1.0 dev: true + /open@7.4.2: + resolution: {integrity: sha512-MVHddDVweXZF3awtlAS+6pgKLlm/JgxZ90+/NBurBoQctVOOB/zDdVjcyPzQ+0laDGbsWgrRkflI65sQeOgT9Q==} + engines: {node: '>=8'} + dependencies: + is-docker: 2.2.1 + is-wsl: 2.2.0 + dev: false + /open@9.1.0: resolution: {integrity: sha512-OS+QTnw1/4vrf+9hh1jc1jnYjzSG4ttTBB8UxOwAnInG3Uo4ssetzC1ihqaIHjLJnA5GGlRl6QlZXOTQhRBUvg==} engines: {node: '>=14.16'} @@ -3744,6 +4496,11 @@ packages: type-check: 0.4.0 dev: true + /os-tmpdir@1.0.2: + resolution: {integrity: sha512-D2FR03Vir7FIu45XBY20mTb+/ZSWB00sjU9jdQXt83gDrI4Ztz5Fs7/yy74g2N5SVQY4xY1qDr4rNddwYRVX0g==} + engines: {node: '>=0.10.0'} + dev: false + /ospath@1.2.2: resolution: {integrity: sha512-o6E5qJV5zkAbIDNhGSIlyOhScKXgQrSRMilfph0clDfM0nEnBOlKlH4sWDmG95BW/CvwNz0vmm7dJVtU2KlMiA==} dev: true @@ -3776,6 +4533,17 @@ packages: callsites: 3.1.0 dev: true + /parse-entities@2.0.0: + resolution: {integrity: sha512-kkywGpCcRYhqQIchaWqZ875wzpS/bMKhz5HnN3p7wveJTkTtyAB/AlnS0f8DFSqYW1T82t6yEAkEcB+A1I3MbQ==} + dependencies: + character-entities: 1.2.4 + character-entities-legacy: 1.1.4 + character-reference-invalid: 1.1.4 + is-alphanumerical: 1.0.4 + is-decimal: 1.0.4 + is-hexadecimal: 1.0.4 + dev: false + /parse-json@5.2.0: resolution: {integrity: sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg==} engines: {node: '>=8'} @@ -3786,6 +4554,28 @@ packages: lines-and-columns: 1.2.4 dev: true + /patch-package@8.0.0: + resolution: {integrity: sha512-da8BVIhzjtgScwDJ2TtKsfT5JFWz1hYoBl9rUQ1f38MC2HwnEIkK8VN3dKMKcP7P7bvvgzNDbfNHtx3MsQb5vA==} + engines: {node: '>=14', npm: '>5'} + hasBin: true + dependencies: + '@yarnpkg/lockfile': 1.1.0 + chalk: 4.1.2 + ci-info: 3.9.0 + cross-spawn: 7.0.3 + find-yarn-workspace-root: 2.0.0 + fs-extra: 9.1.0 + json-stable-stringify: 1.1.1 + klaw-sync: 6.0.0 + minimist: 1.2.8 + open: 7.4.2 + rimraf: 2.7.1 + semver: 7.6.0 + slash: 2.0.0 + tmp: 0.0.33 + yaml: 2.3.3 + dev: false + /path-browserify@1.0.1: resolution: {integrity: sha512-b7uo2UCUOYZcnF/3ID0lulOJi/bafxa1xPe7ZPsammBSpjSWQkjNxlt635YGS2MiR9GjvuXCtz2emr3jbsz98g==} dev: true @@ -3798,12 +4588,10 @@ packages: /path-is-absolute@1.0.1: resolution: {integrity: sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==} engines: {node: '>=0.10.0'} - dev: true /path-key@3.1.1: resolution: {integrity: sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==} engines: {node: '>=8'} - dev: true /path-key@4.0.0: resolution: {integrity: sha512-haREypq7xkM7ErfgIyA0z+Bj4AGKlMSdlQE2jvJo6huWD1EdkKYV+G/T4nq0YEF2vgTT8kqMFKo1uHn950r4SQ==} @@ -3812,7 +4600,6 @@ packages: /path-parse@1.0.7: resolution: {integrity: sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==} - dev: true /path-type@4.0.0: resolution: {integrity: sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==} @@ -3859,7 +4646,6 @@ packages: /pify@2.3.0: resolution: {integrity: sha512-udgsAY+fTnvv7kI7aaxbqwWNb0AHiB0qBO89PZKPkoTmGOgdbrHDKD+0B2X4uTfJ/FT1R09r9gTsjUjNJotuog==} engines: {node: '>=0.10.0'} - dev: true /pinia@2.1.7(typescript@5.4.2)(vue@3.4.21): resolution: {integrity: sha512-+C2AHFtcFqjPih0zpYuvof37SFxMQ7OEG2zV9jRI12i9BOy3YQVAHwdKtyyc8pDcDyIc33WCIsZaCFWU7WWxGQ==} @@ -3882,7 +4668,6 @@ packages: /pirates@4.0.6: resolution: {integrity: sha512-saLsH7WeYYPiD25LDuLRRY/i+6HaPYr6G1OUlN39otzkSTxKnubR9RTxS3/Kk50s1g2JTgFwWQDQyplC5/SHZg==} engines: {node: '>= 6'} - dev: true /pkg-types@1.0.3: resolution: {integrity: sha512-nN7pYi0AQqJnoLPC9eHFQ8AcyaixBUOwvqc5TDnIKCMEE6I0y8P7OKA7fPexsXGCGxQDl/cmrLAp26LhcwxZ4A==} @@ -3902,7 +4687,6 @@ packages: postcss-value-parser: 4.2.0 read-cache: 1.0.0 resolve: 1.22.8 - dev: true /postcss-js@4.0.1(postcss@8.4.35): resolution: {integrity: sha512-dDLF8pEO191hJMtlHFPRa8xsizHaM82MLfNkUHdUtVEV3tgTp5oj+8qbEqYM57SLfc74KSbw//4SeJma2LRVIw==} @@ -3912,7 +4696,6 @@ packages: dependencies: camelcase-css: 2.0.1 postcss: 8.4.35 - dev: true /postcss-load-config@4.0.1(postcss@8.4.35): resolution: {integrity: sha512-vEJIc8RdiBRu3oRAI0ymerOn+7rPuMvRXslTvZUKZonDHFIczxztIyJ1urxM1x9JXEikvpWWTUUqal5j/8QgvA==} @@ -3929,7 +4712,6 @@ packages: lilconfig: 2.1.0 postcss: 8.4.35 yaml: 2.3.3 - dev: true /postcss-media-query-parser@0.2.3: resolution: {integrity: sha512-3sOlxmbKcSHMjlUXQZKQ06jOswE7oVkXPxmZdoB1r5l0q6gTFTQSHxNxOrCccElbW7dxNytifNEo8qidX2Vsig==} @@ -3943,7 +4725,6 @@ packages: dependencies: postcss: 8.4.35 postcss-selector-parser: 6.0.15 - dev: true /postcss-resolve-nested-selector@0.1.1: resolution: {integrity: sha512-HvExULSwLqHLgUy1rl3ANIqCsvMS0WHss2UOsXhXnQaZ9VCc2oBvIpXrl00IUFT5ZDITME0o6oiXeiHr2SAIfw==} @@ -3964,7 +4745,6 @@ packages: dependencies: cssesc: 3.0.0 util-deprecate: 1.0.2 - dev: true /postcss-selector-parser@6.0.15: resolution: {integrity: sha512-rEYkQOMUCEMhsKbK66tbEU9QVIxbhN18YiniAwA7XQYTVBqrBy+P2p5JcdqsHgKM2zWylp8d7J6eszocfds5Sw==} @@ -3972,11 +4752,9 @@ packages: dependencies: cssesc: 3.0.0 util-deprecate: 1.0.2 - dev: true /postcss-value-parser@4.2.0: resolution: {integrity: sha512-1NNCs6uurfkVbeXG4S8JFT9t19m45ICnif8zWLd5oPSZ50QnwMfK+H3jv408d4jw/7Bttv5axS5IiHoLaVNHeQ==} - dev: true /postcss@8.4.35: resolution: {integrity: sha512-u5U8qYpBCpN13BsiEB0CbR1Hhh4Gc0zLFuedrHJKMctHCHAGrMdG0PRM/KErzAL3CU6/eckEtmHNB3x6e3c0vA==} @@ -3990,6 +4768,27 @@ packages: resolution: {integrity: sha512-Q+/tYsFU9r7xoOJ+y/ZTtdVQwTWfzjbiXBDMM/JKUux3+QPP02iUuIoeBQ+Ot6oEDlC+/PGjB/5A3K7KKb7hcw==} dev: false + /prebuild-install@7.1.2: + resolution: {integrity: sha512-UnNke3IQb6sgarcZIDU3gbMeTp/9SSU1DAIkil7PrqG1vZlBtY5msYccSKSHDqa3hNg436IXK+SNImReuA1wEQ==} + engines: {node: '>=10'} + hasBin: true + requiresBuild: true + dependencies: + detect-libc: 2.0.2 + expand-template: 2.0.3 + github-from-package: 0.0.0 + minimist: 1.2.8 + mkdirp-classic: 0.5.3 + napi-build-utils: 1.0.2 + node-abi: 3.56.0 + pump: 3.0.0 + rc: 1.2.8 + simple-get: 4.0.1 + tar-fs: 2.1.1 + tunnel-agent: 0.6.0 + dev: false + optional: true + /prelude-ls@1.2.1: resolution: {integrity: sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==} engines: {node: '>= 0.8.0'} @@ -4002,6 +4801,58 @@ packages: fast-diff: 1.3.0 dev: true + /prettier-plugin-tailwindcss@0.5.11(prettier@3.2.5): + resolution: {integrity: sha512-AvI/DNyMctyyxGOjyePgi/gqj5hJYClZ1avtQvLlqMT3uDZkRbi4HhGUpok3DRzv9z7Lti85Kdj3s3/1CeNI0w==} + engines: {node: '>=14.21.3'} + peerDependencies: + '@ianvs/prettier-plugin-sort-imports': '*' + '@prettier/plugin-pug': '*' + '@shopify/prettier-plugin-liquid': '*' + '@trivago/prettier-plugin-sort-imports': '*' + prettier: ^3.0 + prettier-plugin-astro: '*' + prettier-plugin-css-order: '*' + prettier-plugin-import-sort: '*' + prettier-plugin-jsdoc: '*' + prettier-plugin-marko: '*' + prettier-plugin-organize-attributes: '*' + prettier-plugin-organize-imports: '*' + prettier-plugin-style-order: '*' + prettier-plugin-svelte: '*' + prettier-plugin-twig-melody: '*' + peerDependenciesMeta: + '@ianvs/prettier-plugin-sort-imports': + optional: true + '@prettier/plugin-pug': + optional: true + '@shopify/prettier-plugin-liquid': + optional: true + '@trivago/prettier-plugin-sort-imports': + optional: true + prettier-plugin-astro: + optional: true + prettier-plugin-css-order: + optional: true + prettier-plugin-import-sort: + optional: true + prettier-plugin-jsdoc: + optional: true + prettier-plugin-marko: + optional: true + prettier-plugin-organize-attributes: + optional: true + prettier-plugin-organize-imports: + optional: true + prettier-plugin-style-order: + optional: true + prettier-plugin-svelte: + optional: true + prettier-plugin-twig-melody: + optional: true + dependencies: + prettier: 3.2.5 + dev: true + /prettier@3.2.5: resolution: {integrity: sha512-3/GWa9aOC0YeD7LUfvOG2NiDyhOWRvt1k+rcKhOuYnMY24iiCphgneUfJDyFXd6rZCAnuLBv6UeAULtrhT/F4A==} engines: {node: '>=14'} @@ -4013,6 +4864,11 @@ packages: engines: {node: '>=6'} dev: true + /prismjs@1.27.0: + resolution: {integrity: sha512-t13BGPUlFDR7wRB5kQDG4jjl7XeuH6jbJGt11JHPL96qwsEHNX2+68tFXqc1/k+/jALsbSWJKUOT/hcYAZ5LkA==} + engines: {node: '>=6'} + dev: false + /prismjs@1.29.0: resolution: {integrity: sha512-Kx/1w86q/epKcmte75LNrEoT+lX8pBpavuAbvJWRXar7Hz8jrtF+e3vY751p0R8H9HdArwaCTNDDzHg/ScJK1Q==} engines: {node: '>=6'} @@ -4021,7 +4877,20 @@ packages: /process@0.11.10: resolution: {integrity: sha512-cdGef/drWFoydD1JsMzuFf8100nZl+GT+yacc2bEced5f9Rjk4z+WtFUTBu9PhOi9j/jfmBPu0mMEY4wIdAF8A==} engines: {node: '>= 0.6.0'} - dev: true + + /prop-types@15.8.1: + resolution: {integrity: sha512-oj87CgZICdulUohogVAR7AjlC0327U4el4L6eAvOqCeudMDVU0NThNaV+b9Df4dXgSP1gXMTnPdhfe/2qDH5cg==} + dependencies: + loose-envify: 1.4.0 + object-assign: 4.1.1 + react-is: 16.13.1 + dev: false + + /property-information@5.6.0: + resolution: {integrity: sha512-YUHSPk+A30YPv+0Qf8i9Mbfe/C0hdPXk1s1jPVToV8pk8BQtpw10ct89Eo7OWkutrwqvT0eicAxlOg3dOAu8JA==} + dependencies: + xtend: 4.0.2 + dev: false /protocol-buffers-schema@3.6.0: resolution: {integrity: sha512-TdDRD+/QNdrCGCE7v8340QyuXd4kIWIgapsE2+n/SaGiSSbomYl4TjHlvIoCWRpE7wFt02EpB35VVA2ImcBVqw==} @@ -4031,6 +4900,10 @@ packages: resolution: {integrity: sha512-F2JHgJQ1iqwnHDcQjVBsq3n/uoaFL+iPW/eAeL7kVxy/2RrWaN4WroKjjvbsoRtv0ftelNyC01bjRhn/bhcf4A==} dev: true + /proxy-from-env@1.1.0: + resolution: {integrity: sha512-D+zkORCbA9f1tdWRK0RaCR3GPv50cMxcrz4X8k5LTSUD1Dkw47mKJEZQNunItRTkWwgtaUSo1RVFRIG9ZXiFYg==} + dev: false + /psl@1.9.0: resolution: {integrity: sha512-E/ZsdU4HLs/68gYzgGTkMicWTLPdAftJLfJFlLUAAKZGkStNU72sZjT66SnMDVOfOWY/YAoiD7Jxa9iHvngcag==} dev: true @@ -4040,7 +4913,6 @@ packages: dependencies: end-of-stream: 1.4.4 once: 1.4.0 - dev: true /punycode.js@2.3.1: resolution: {integrity: sha512-uxFIHU0YlHYhDQtV4R9J6a52SLx28BCjT+4ieh7IGbgwVJWO+km431c4yRlREUAsAmt/uMjQUyQHNEPf0M39CA==} @@ -4057,25 +4929,164 @@ packages: engines: {node: '>=0.6'} dependencies: side-channel: 1.0.4 - dev: true /querystringify@2.2.0: resolution: {integrity: sha512-FIqgj2EUvTa7R50u0rGsyTftzjYmv/a3hO345bZNrqabNqjtgiDMgmo4mkUjd+nzU5oF3dClKqFIPUKybUyqoQ==} - dev: true /queue-microtask@1.2.3: resolution: {integrity: sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==} - dev: true /quickselect@2.0.0: resolution: {integrity: sha512-RKJ22hX8mHe3Y6wH/N3wCM6BWtjaxIyyUIkpHOvfFnxdI4yD4tBXEBKSbriGujF6jnSVkJrffuo6vxACiSSxIw==} dev: false + /ramda-adjunct@4.1.1(ramda@0.29.1): + resolution: {integrity: sha512-BnCGsZybQZMDGram9y7RiryoRHS5uwx8YeGuUeDKuZuvK38XO6JJfmK85BwRWAKFA6pZ5nZBO/HBFtExVaf31w==} + engines: {node: '>=0.10.3'} + peerDependencies: + ramda: '>= 0.29.0' + dependencies: + ramda: 0.29.1 + dev: false + + /ramda@0.29.1: + resolution: {integrity: sha512-OfxIeWzd4xdUNxlWhgFazxsA/nl3mS4/jGZI5n00uWOoSSFRhC1b6gl6xvmzUamgmqELraWp0J/qqVlXYPDPyA==} + dev: false + + /randexp@0.5.3: + resolution: {integrity: sha512-U+5l2KrcMNOUPYvazA3h5ekF80FHTUG+87SEAmHZmolh1M+i/WyTCxVzmi+tidIa1tM4BSe8g2Y/D3loWDjj+w==} + engines: {node: '>=4'} + dependencies: + drange: 1.1.1 + ret: 0.2.2 + dev: false + + /randombytes@2.1.0: + resolution: {integrity: sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ==} + dependencies: + safe-buffer: 5.2.1 + dev: false + + /rc@1.2.8: + resolution: {integrity: sha512-y3bGgqKj3QBdxLbLkomlohkvsA8gdAiUQlSBJnBhfn+BPxg4bc62d8TcBW15wavDfgexCgccckhcZvywyQYPOw==} + hasBin: true + requiresBuild: true + dependencies: + deep-extend: 0.6.0 + ini: 1.3.8 + minimist: 1.2.8 + strip-json-comments: 2.0.1 + dev: false + optional: true + + /react-copy-to-clipboard@5.1.0(react@18.2.0): + resolution: {integrity: sha512-k61RsNgAayIJNoy9yDsYzDe/yAZAzEbEgcz3DZMhF686LEyukcE1hzurxe85JandPUG+yTfGVFzuEw3xt8WP/A==} + peerDependencies: + react: ^15.3.0 || 16 || 17 || 18 + dependencies: + copy-to-clipboard: 3.3.3 + prop-types: 15.8.1 + react: 18.2.0 + dev: false + + /react-debounce-input@3.3.0(react@18.2.0): + resolution: {integrity: sha512-VEqkvs8JvY/IIZvh71Z0TC+mdbxERvYF33RcebnodlsUZ8RSgyKe2VWaHXv4+/8aoOgXLxWrdsYs2hDhcwbUgA==} + peerDependencies: + react: ^15.3.0 || 16 || 17 || 18 + dependencies: + lodash.debounce: 4.0.8 + prop-types: 15.8.1 + react: 18.2.0 + dev: false + + /react-dom@18.2.0(react@18.2.0): + resolution: {integrity: sha512-6IMTriUmvsjHUjNtEDudZfuDQUoWXVxKHhlEGSk81n4YFS+r/Kl99wXiwlVXtPBtJenozv2P+hxDsw9eA7Xo6g==} + peerDependencies: + react: ^18.2.0 + dependencies: + loose-envify: 1.4.0 + react: 18.2.0 + scheduler: 0.23.0 + dev: false + + /react-immutable-proptypes@2.2.0(immutable@3.8.2): + resolution: {integrity: sha512-Vf4gBsePlwdGvSZoLSBfd4HAP93HDauMY4fDjXhreg/vg6F3Fj/MXDNyTbltPC/xZKmZc+cjLu3598DdYK6sgQ==} + peerDependencies: + immutable: '>=3.6.2' + dependencies: + immutable: 3.8.2 + invariant: 2.2.4 + dev: false + + /react-immutable-pure-component@2.2.2(immutable@3.8.2)(react-dom@18.2.0)(react@18.2.0): + resolution: {integrity: sha512-vkgoMJUDqHZfXXnjVlG3keCxSO/U6WeDQ5/Sl0GK2cH8TOxEzQ5jXqDXHEL/jqk6fsNxV05oH5kD7VNMUE2k+A==} + peerDependencies: + immutable: '>= 2 || >= 4.0.0-rc' + react: '>= 16.6' + react-dom: '>= 16.6' + dependencies: + immutable: 3.8.2 + react: 18.2.0 + react-dom: 18.2.0(react@18.2.0) + dev: false + + /react-inspector@6.0.2(react@18.2.0): + resolution: {integrity: sha512-x+b7LxhmHXjHoU/VrFAzw5iutsILRoYyDq97EDYdFpPLcvqtEzk4ZSZSQjnFPbr5T57tLXnHcqFYoN1pI6u8uQ==} + peerDependencies: + react: ^16.8.4 || ^17.0.0 || ^18.0.0 + dependencies: + react: 18.2.0 + dev: false + + /react-is@16.13.1: + resolution: {integrity: sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ==} + dev: false + + /react-redux@9.1.0(react@18.2.0)(redux@5.0.1): + resolution: {integrity: sha512-6qoDzIO+gbrza8h3hjMA9aq4nwVFCKFtY2iLxCtVT38Swyy2C/dJCGBXHeHLtx6qlg/8qzc2MrhOeduf5K32wQ==} + peerDependencies: + '@types/react': ^18.2.25 + react: ^18.0 + react-native: '>=0.69' + redux: ^5.0.0 + peerDependenciesMeta: + '@types/react': + optional: true + react-native: + optional: true + redux: + optional: true + dependencies: + '@types/use-sync-external-store': 0.0.3 + react: 18.2.0 + redux: 5.0.1 + use-sync-external-store: 1.2.0(react@18.2.0) + dev: false + + /react-syntax-highlighter@15.5.0(react@18.2.0): + resolution: {integrity: sha512-+zq2myprEnQmH5yw6Gqc8lD55QHnpKaU8TOcFeC/Lg/MQSs8UknEA0JC4nTZGFAXC2J2Hyj/ijJ7NlabyPi2gg==} + peerDependencies: + react: '>= 0.14.0' + dependencies: + '@babel/runtime': 7.24.0 + highlight.js: 10.7.3 + lowlight: 1.20.0 + prismjs: 1.29.0 + react: 18.2.0 + refractor: 3.6.0 + dev: false + + /react@18.2.0: + resolution: {integrity: sha512-/3IjMdb2L9QbBdWiW5e3P2/npwMBaU9mHCSCUzNln0ZCYbcfTsGbTJrU/kGemdH2IWmB2ioZ+zkxtmq6g09fGQ==} + engines: {node: '>=0.10.0'} + dependencies: + loose-envify: 1.4.0 + dev: false + /read-cache@1.0.0: resolution: {integrity: sha512-Owdv/Ft7IjOgm/i0xvNDZ1LrRANRfew4b2prF3OWMQLxLfu3bS8FVhCsrSCMK4lR56Y9ya+AThoTpDCTxCmpRA==} dependencies: pify: 2.3.0 - dev: true /read-package-json-fast@3.0.2: resolution: {integrity: sha512-0J+Msgym3vrLOUB3hzQCuZHII0xkNGCtz/HJH9xZshwv9DbDwkw1KaE3gx/e2J5rpEY5rtOy6cyhKOPrkP7FZw==} @@ -4085,12 +5096,61 @@ packages: npm-normalize-package-bin: 3.0.1 dev: true + /readable-stream@3.6.2: + resolution: {integrity: sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==} + engines: {node: '>= 6'} + requiresBuild: true + dependencies: + inherits: 2.0.4 + string_decoder: 1.3.0 + util-deprecate: 1.0.2 + dev: false + optional: true + /readdirp@3.6.0: resolution: {integrity: sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==} engines: {node: '>=8.10.0'} dependencies: picomatch: 2.3.1 + /redux-immutable@4.0.0(immutable@3.8.2): + resolution: {integrity: sha512-SchSn/DWfGb3oAejd+1hhHx01xUoxY+V7TeK0BKqpkLKiQPVFf7DYzEaKmrEVxsWxielKfSK9/Xq66YyxgR1cg==} + peerDependencies: + immutable: ^3.8.1 || ^4.0.0-rc.1 + dependencies: + immutable: 3.8.2 + dev: false + + /redux@5.0.1: + resolution: {integrity: sha512-M9/ELqF6fy8FwmkpnF0S3YKOqMyoWJ4+CS5Efg2ct3oY9daQvd/Pc71FpGZsVsbl3Cpb+IIcjBDUnnyBdQbq4w==} + dev: false + + /refractor@3.6.0: + resolution: {integrity: sha512-MY9W41IOWxxk31o+YvFCNyNzdkc9M20NoZK5vq6jkv4I/uh2zkWcfudj0Q1fovjUQJrNewS9NMzeTtqPf+n5EA==} + dependencies: + hastscript: 6.0.0 + parse-entities: 2.0.0 + prismjs: 1.27.0 + dev: false + + /regenerator-runtime@0.14.1: + resolution: {integrity: sha512-dYnhHh0nJoMfnkZs6GmmhFknAGRrLznOu5nc9ML+EJxGvrx6H7teuevqVqCuPcPK//3eDrrjQhehXVx9cnkGdw==} + dev: false + + /remarkable@2.0.1: + resolution: {integrity: sha512-YJyMcOH5lrR+kZdmB0aJJ4+93bEojRZ1HGDn9Eagu6ibg7aVZhc3OWbbShRid+Q5eAfsEqWxpe+g5W5nYNfNiA==} + engines: {node: '>= 6.0.0'} + hasBin: true + dependencies: + argparse: 1.0.10 + autolinker: 3.16.2 + dev: false + + /repeat-string@1.6.1: + resolution: {integrity: sha512-PV0dzCYDNfRi1jCDbJzpW7jNNDRuCOG/jI5ctQcGKt/clZD+YcPS3yIlWuTJMmESC8aevCFmWJy5wjAFgNqN6w==} + engines: {node: '>=0.10'} + dev: false + /request-progress@3.0.0: resolution: {integrity: sha512-MnWzEHHaxHO2iWiQuHrUPBi/1WeBf5PkxQqNyNvLl9VAYSdXkP8tQ3pBSeCPD+yw0v0Aq1zosWLz0BdeXpWwZg==} dependencies: @@ -4104,7 +5164,10 @@ packages: /requires-port@1.0.0: resolution: {integrity: sha512-KigOCHcocU3XODJxsu8i/j8T9tzT4adHiecwORRQ0ZZFcp7ahwXuRU1m+yuO90C5ZUyGeGfocHDI14M3L3yDAQ==} - dev: true + + /reselect@5.1.0: + resolution: {integrity: sha512-aw7jcGLDpSgNDyWBQLv2cedml85qd95/iszJjN988zX1t7AVRJi19d9kto5+W7oCfQ94gyo40dVbT6g2k4/kXg==} + dev: false /resolve-from@4.0.0: resolution: {integrity: sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==} @@ -4129,7 +5192,6 @@ packages: is-core-module: 2.13.1 path-parse: 1.0.7 supports-preserve-symlinks-flag: 1.0.0 - dev: true /restore-cursor@3.1.0: resolution: {integrity: sha512-l+sSefzHpj5qimhFSE5a8nufZYAM3sBSVMAPtYkmC+4EH2anSGaEMXSD0izRQbu9nfyQ9y5JrVmp7E8oZrUjvA==} @@ -4139,15 +5201,26 @@ packages: signal-exit: 3.0.7 dev: true + /ret@0.2.2: + resolution: {integrity: sha512-M0b3YWQs7R3Z917WRQy1HHA7Ba7D8hvZg6UE5mLykJxQVE2ju0IXbGlaHPPlkY+WN7wFP+wUMXmBFA0aV6vYGQ==} + engines: {node: '>=4'} + dev: false + /reusify@1.0.4: resolution: {integrity: sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==} engines: {iojs: '>=1.0.0', node: '>=0.10.0'} - dev: true /rfdc@1.3.1: resolution: {integrity: sha512-r5a3l5HzYlIC68TpmYKlxWjmOP6wiPJ1vWv2HeLhNsRZMrCkxeqxiHlQ21oXmQ4F3SiryXBHhAD7JZqvOJjFmg==} dev: true + /rimraf@2.7.1: + resolution: {integrity: sha512-uWjbaKIK3T1OSVptzX7Nl6PvQ3qAGtKEtVRjRuazjfL3Bx5eI409VZSqgND+4UNnmzLVdPj9FqFJNPqBZFve4w==} + hasBin: true + dependencies: + glob: 7.2.3 + dev: false + /rimraf@3.0.2: resolution: {integrity: sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==} hasBin: true @@ -4191,7 +5264,6 @@ packages: resolution: {integrity: sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==} dependencies: queue-microtask: 1.2.3 - dev: true /rw@1.3.3: resolution: {integrity: sha512-PdhdWy89SiZogBLaw42zdeqtRJ//zFd2PgQavcICDUgJT5oW10QCRKbJ6bg4r0/UY2M6BWd5tkxuGFRvCkgfHQ==} @@ -4205,7 +5277,6 @@ packages: /safe-buffer@5.2.1: resolution: {integrity: sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==} - dev: true /safer-buffer@2.1.2: resolution: {integrity: sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==} @@ -4220,6 +5291,12 @@ packages: immutable: 4.3.4 source-map-js: 1.0.2 + /scheduler@0.23.0: + resolution: {integrity: sha512-CtuThmgHNg7zIZWAXi3AsyIzA3n4xx7aNyjwC2VJldO2LMVDhFK+63xGqq6CsJH4rTAt6/M+N4GhZiDYPx9eUw==} + dependencies: + loose-envify: 1.4.0 + dev: false + /section-matter@1.0.0: resolution: {integrity: sha512-vfD3pmTzGpufjScBh50YHKzEu2lxBWhVEHsNGoEXmCmn2hKGfeNLYMzCJpe8cD7gqX7TJluOVpBkAequ6dgMmA==} engines: {node: '>=4'} @@ -4239,7 +5316,13 @@ packages: hasBin: true dependencies: lru-cache: 6.0.0 - dev: true + + /serialize-error@8.1.0: + resolution: {integrity: sha512-3NnuWfM6vBYoy5gZFvHiYsVbafvI9vZv/+jlIigFn4oP4zjNPK3LhcY0xSCgeb1a5L8jO71Mit9LlNoi2UfDDQ==} + engines: {node: '>=10'} + dependencies: + type-fest: 0.20.2 + dev: false /set-function-length@1.1.1: resolution: {integrity: sha512-VoaqjbBJKiWtg4yRcKBQ7g7wnGnLV3M8oLvVWwOk2PdYY6PEFegR1vezXR0tw6fZGF9csVakIRjrJiy2veSBFQ==} @@ -4249,7 +5332,6 @@ packages: get-intrinsic: 1.2.2 gopd: 1.0.1 has-property-descriptors: 1.0.1 - dev: true /set-value@2.0.1: resolution: {integrity: sha512-JxHc1weCN68wRY0fhCoXpyK55m/XPHafOmK4UWD7m2CI14GMcFypt4w/0+NV5f/ZMby2F6S2wwA7fgynh9gWSw==} @@ -4261,29 +5343,39 @@ packages: split-string: 3.1.0 dev: false + /sha.js@2.4.11: + resolution: {integrity: sha512-QMEp5B7cftE7APOjk5Y6xgrbWu+WkLVQwk8JNjZ8nKRciZaByEW6MubieAiToS7+dwvrjGhH8jRXz3MVd0AYqQ==} + hasBin: true + dependencies: + inherits: 2.0.4 + safe-buffer: 5.2.1 + dev: false + /shebang-command@2.0.0: resolution: {integrity: sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==} engines: {node: '>=8'} dependencies: shebang-regex: 3.0.0 - dev: true /shebang-regex@3.0.0: resolution: {integrity: sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==} engines: {node: '>=8'} - dev: true /shell-quote@1.8.1: resolution: {integrity: sha512-6j1W9l1iAs/4xYBI1SYOVZyFcCis9b4KCLQ8fgAGG07QvzaRLVVRQvAy85yNmmZSjYjg4MWh4gNvlPujU/5LpA==} dev: true + /short-unique-id@5.0.3: + resolution: {integrity: sha512-yhniEILouC0s4lpH0h7rJsfylZdca10W9mDJRAFh3EpcSUanCHGb0R7kcFOIUCZYSAPo0PUD5ZxWQdW0T4xaug==} + hasBin: true + dev: false + /side-channel@1.0.4: resolution: {integrity: sha512-q5XPytqFEIKHkGdiMIrY10mvLRvnQh42/+GoBlFW3b2LXLE2xxJpZFdm94we0BaoV3RwJyGqg5wS7epxTv0Zvw==} dependencies: call-bind: 1.0.5 get-intrinsic: 1.2.2 object-inspect: 1.13.1 - dev: true /signal-exit@3.0.7: resolution: {integrity: sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==} @@ -4294,6 +5386,22 @@ packages: engines: {node: '>=14'} dev: true + /simple-concat@1.0.1: + resolution: {integrity: sha512-cSFtAPtRhljv69IK0hTVZQ+OfE9nePi/rtJmw5UjHeVyVroEqJXP1sFztKUy1qU+xvz3u/sfYJLa947b7nAN2Q==} + requiresBuild: true + dev: false + optional: true + + /simple-get@4.0.1: + resolution: {integrity: sha512-brv7p5WgH0jmQJr1ZDDfKDOSeWWg+OVypG99A/5vYGPqJ6pxiaHLy8nxtFjBA7oMa01ebA9gfh1uMCFqOuXxvA==} + requiresBuild: true + dependencies: + decompress-response: 6.0.0 + once: 1.4.0 + simple-concat: 1.0.1 + dev: false + optional: true + /sirv@2.0.4: resolution: {integrity: sha512-94Bdh3cC2PKrbgSOUqTiGPWVZeSiXfKOVZNJniWoqrWrRkB1CJzBU3NEbiTsPcYy1lDsANA/THzS+9WBiy5nfQ==} engines: {node: '>= 10'} @@ -4303,6 +5411,11 @@ packages: totalist: 3.0.1 dev: true + /slash@2.0.0: + resolution: {integrity: sha512-ZYKh3Wh2z1PpEXWr0MpSBZ0V6mZHAQfYevttO11c51CaWjGTaadiKZ+wVt1PbMlDV5qhMFslpZCemhwOK7C89A==} + engines: {node: '>=6'} + dev: false + /slash@3.0.0: resolution: {integrity: sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==} engines: {node: '>=8'} @@ -4359,6 +5472,10 @@ packages: dev: true optional: true + /space-separated-tokens@1.1.5: + resolution: {integrity: sha512-q/JSVd1Lptzhf5bkYm4ob4iWPjx0KiRe3sRFBNrVqbJkFaBm5vbbowy1mymoPNLRa52+oadOhJ+K49wsSeSjTA==} + dev: false + /speakingurl@14.0.1: resolution: {integrity: sha512-1POYv7uv2gXoyGFpBCmpDVSNV74IfsWlDW216UPjbWufNf+bSU6GdbDsxdcxtfwb4xlI3yxzOTKClUosxARYrQ==} engines: {node: '>=0.10.0'} @@ -4391,6 +5508,10 @@ packages: tweetnacl: 0.14.5 dev: true + /stampit@4.3.2: + resolution: {integrity: sha512-pE2org1+ZWQBnIxRPrBM2gVupkuDD0TTNIo1H6GdT/vO82NXli2z8lRE8cu/nBIHrcOCXFBAHpb9ZldrB2/qOA==} + dev: false + /string-width@4.2.3: resolution: {integrity: sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==} engines: {node: '>=8'} @@ -4400,6 +5521,14 @@ packages: strip-ansi: 6.0.1 dev: true + /string_decoder@1.3.0: + resolution: {integrity: sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==} + requiresBuild: true + dependencies: + safe-buffer: 5.2.1 + dev: false + optional: true + /strip-ansi@6.0.1: resolution: {integrity: sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==} engines: {node: '>=8'} @@ -4429,6 +5558,13 @@ packages: engines: {node: '>=12'} dev: true + /strip-json-comments@2.0.1: + resolution: {integrity: sha512-4gB8na07fecVVkOI6Rs4e7T6NOTki5EmL7TUduTs6bu3EdnSycntVJ4re8kgZA+wx9IueI2Y11bfbgwtzuE0KQ==} + engines: {node: '>=0.10.0'} + requiresBuild: true + dev: false + optional: true + /strip-json-comments@3.1.1: resolution: {integrity: sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==} engines: {node: '>=8'} @@ -4508,7 +5644,6 @@ packages: mz: 2.7.0 pirates: 4.0.6 ts-interface-checker: 0.1.13 - dev: true /supercluster@8.0.1: resolution: {integrity: sha512-IiOea5kJ9iqzD2t7QJq/cREyLHTtSmUT6gQsweojg9WH2sYJqZK9SswTu6jrscO6D1G5v5vYZ9ru/eq85lXeZQ==} @@ -4528,7 +5663,6 @@ packages: engines: {node: '>=8'} dependencies: has-flag: 4.0.0 - dev: true /supports-color@8.1.1: resolution: {integrity: sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==} @@ -4548,14 +5682,77 @@ packages: /supports-preserve-symlinks-flag@1.0.0: resolution: {integrity: sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==} engines: {node: '>= 0.4'} - dev: true /svg-tags@1.0.0: resolution: {integrity: sha512-ovssysQTa+luh7A5Weu3Rta6FJlFBBbInjOh722LIt6klpU2/HtdUbszju/G4devcvk8PGt7FCLv5wftu3THUA==} dev: true - /swagger-ui-dist@5.11.10: - resolution: {integrity: sha512-wAHf32iFqJCBkdQRBYB1pR8kJuliJbgCXcdgkU7GkDvrOfD2gVmyEwdTi9rERCur/OrufifnH5UecOzlQ07CYg==} + /swagger-client@3.26.0: + resolution: {integrity: sha512-1yFR/S2V3v5DwgmNePoHEjq2dZJxDx1leDQ53r5M4hZs+dozm9VnznlSl9a1V5iTYw4UsS4PQuBRQsmBH21ViA==} + dependencies: + '@babel/runtime-corejs3': 7.24.0 + '@swagger-api/apidom-core': 0.97.0 + '@swagger-api/apidom-error': 0.97.0 + '@swagger-api/apidom-json-pointer': 0.97.0 + '@swagger-api/apidom-ns-openapi-3-1': 0.97.0 + '@swagger-api/apidom-reference': 0.97.0 + cookie: 0.6.0 + deepmerge: 4.3.1 + fast-json-patch: 3.1.1 + is-plain-object: 5.0.0 + js-yaml: 4.1.0 + node-abort-controller: 3.1.1 + node-fetch-commonjs: 3.3.2 + qs: 6.10.4 + traverse: 0.6.8 + transitivePeerDependencies: + - debug + dev: false + + /swagger-ui@5.11.10: + resolution: {integrity: sha512-3kRLqUG7vY3t0Jd1yC4K9LPO9AMl1HsjEicCx3P3Ia/wYleJtXHwOH6FIiEGC9LeSTIAAsTr0gxOTkGcQST+Ow==} + requiresBuild: true + dependencies: + '@babel/runtime-corejs3': 7.24.0 + '@braintree/sanitize-url': 7.0.0 + base64-js: 1.5.1 + classnames: 2.5.1 + css.escape: 1.5.1 + deep-extend: 0.6.0 + dompurify: 3.0.9 + ieee754: 1.2.1 + immutable: 3.8.2 + js-file-download: 0.4.12 + js-yaml: 4.1.0 + lodash: 4.17.21 + patch-package: 8.0.0 + prop-types: 15.8.1 + randexp: 0.5.3 + randombytes: 2.1.0 + react: 18.2.0 + react-copy-to-clipboard: 5.1.0(react@18.2.0) + react-debounce-input: 3.3.0(react@18.2.0) + react-dom: 18.2.0(react@18.2.0) + react-immutable-proptypes: 2.2.0(immutable@3.8.2) + react-immutable-pure-component: 2.2.2(immutable@3.8.2)(react-dom@18.2.0)(react@18.2.0) + react-inspector: 6.0.2(react@18.2.0) + react-redux: 9.1.0(react@18.2.0)(redux@5.0.1) + react-syntax-highlighter: 15.5.0(react@18.2.0) + redux: 5.0.1 + redux-immutable: 4.0.0(immutable@3.8.2) + remarkable: 2.0.1 + reselect: 5.1.0 + serialize-error: 8.1.0 + sha.js: 2.4.11 + swagger-client: 3.26.0 + url-parse: 1.5.10 + xml: 1.0.1 + xml-but-prettier: 1.0.1 + zenscroll: 4.0.2 + transitivePeerDependencies: + - '@types/react' + - debug + - react-native dev: false /synckit@0.8.5: @@ -4606,7 +5803,30 @@ packages: sucrase: 3.34.0 transitivePeerDependencies: - ts-node - dev: true + + /tar-fs@2.1.1: + resolution: {integrity: sha512-V0r2Y9scmbDRLCNex/+hYzvp/zyYjvFbHPNgVTKfQvVrb6guiE/fxP+XblDNR011utopbkex2nM4dHNV6GDsng==} + requiresBuild: true + dependencies: + chownr: 1.1.4 + mkdirp-classic: 0.5.3 + pump: 3.0.0 + tar-stream: 2.2.0 + dev: false + optional: true + + /tar-stream@2.2.0: + resolution: {integrity: sha512-ujeqbceABgwMZxEJnk2HDY2DlnUZ+9oEcb1KzTVfYHio0UE6dG71n60d8D2I4qNvleWrrXpmjpt7vZeF1LnMZQ==} + engines: {node: '>=6'} + requiresBuild: true + dependencies: + bl: 4.1.0 + end-of-stream: 1.4.4 + fs-constants: 1.0.0 + inherits: 2.0.4 + readable-stream: 3.6.2 + dev: false + optional: true /text-table@0.2.0: resolution: {integrity: sha512-N+8UisAXDGk8PFXP4HAzVR9nbfmVJ3zYLAWiTIoqC5v5isinhr+r5uaO8+7r3BMfuNIufIsA7RdpVgacC2cSpw==} @@ -4617,13 +5837,11 @@ packages: engines: {node: '>=0.8'} dependencies: thenify: 3.3.1 - dev: true /thenify@3.3.1: resolution: {integrity: sha512-RVZSIV5IG10Hk3enotrhvz0T9em6cyHBLkH/YAZuKqd8hRkKhSfCGIcP2KUY0EPxndzANBmNllzWPwak+bheSw==} dependencies: any-promise: 1.3.0 - dev: true /throttleit@1.0.0: resolution: {integrity: sha512-rkTVqu6IjfQ/6+uNuuc3sZek4CEYxTJom3IktzgdSxcZqdARuebbA/f4QmAxMQIxqq9ZLEUkSYqvuk1I6VKq4g==} @@ -4642,6 +5860,13 @@ packages: engines: {node: '>=12'} dev: true + /tmp@0.0.33: + resolution: {integrity: sha512-jRCJlojKnZ3addtTOjdIqoRuPEKBvNXcGYqzO6zWZX8KfKEpnGY5jfggJQ3EjKuu8D4bJRr0y+cYJFmYbImXGw==} + engines: {node: '>=0.6.0'} + dependencies: + os-tmpdir: 1.0.2 + dev: false + /tmp@0.2.1: resolution: {integrity: sha512-76SUhtfqR2Ijn+xllcI5P1oyannHNHByD80W1q447gU3mp9G9PSpGdWmjUOHRDPiHYacIk66W7ubDTuPF3BEtQ==} engines: {node: '>=8.17.0'} @@ -4659,6 +5884,10 @@ packages: dependencies: is-number: 7.0.0 + /toggle-selection@1.0.6: + resolution: {integrity: sha512-BiZS+C1OS8g/q2RRbJmy59xpyghNBqrr6k5L/uKBGRsTfxmu3ffiRnd8mlGPUVayg8pvfi5urfnu8TU7DVOkLQ==} + dev: false + /totalist@3.0.1: resolution: {integrity: sha512-sf4i37nQ2LBx4m3wB74y+ubopq6W/dIzXg0FDGjsYnZHVa1Da8FH853wlL2gtUhg+xJXjfk3kUZS3BRoQeoQBQ==} engines: {node: '>=6'} @@ -4678,6 +5907,36 @@ packages: resolution: {integrity: sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw==} dev: true + /traverse@0.6.8: + resolution: {integrity: sha512-aXJDbk6SnumuaZSANd21XAo15ucCDE38H4fkqiGsc3MhCK+wOlZvLP9cB/TvpHT0mOyWgC4Z8EwRlzqYSUzdsA==} + engines: {node: '>= 0.4'} + dev: false + + /tree-sitter-json@0.20.2: + resolution: {integrity: sha512-eUxrowp4F1QEGk/i7Sa+Xl8Crlfp7J0AXxX1QdJEQKQYMWhgMbCIgyQvpO3Q0P9oyTrNQxRLlRipDS44a8EtRw==} + requiresBuild: true + dependencies: + nan: 2.19.0 + dev: false + optional: true + + /tree-sitter-yaml@0.5.0: + resolution: {integrity: sha512-POJ4ZNXXSWIG/W4Rjuyg36MkUD4d769YRUGKRqN+sVaj/VCo6Dh6Pkssn1Rtewd5kybx+jT1BWMyWN0CijXnMA==} + requiresBuild: true + dependencies: + nan: 2.19.0 + dev: false + optional: true + + /tree-sitter@0.20.4: + resolution: {integrity: sha512-rjfR5dc4knG3jnJNN/giJ9WOoN1zL/kZyrS0ILh+eqq8RNcIbiXA63JsMEgluug0aNvfQvK4BfCErN1vIzvKog==} + requiresBuild: true + dependencies: + nan: 2.19.0 + prebuild-install: 7.1.2 + dev: false + optional: true + /ts-api-utils@1.0.3(typescript@5.4.2): resolution: {integrity: sha512-wNMeqtMz5NtwpT/UZGY5alT+VoKdSsOOP/kqHFcUW1P/VRhH2wJ48+DN2WwUliNbQ976ETwDL0Ifd2VVvgonvg==} engines: {node: '>=16.13.0'} @@ -4689,17 +5948,22 @@ packages: /ts-interface-checker@0.1.13: resolution: {integrity: sha512-Y/arvbn+rrz3JCKl9C4kVNfTfSm2/mEp5FSz5EsZSANGPSlQrpRI5M4PKF+mJnE52jOO90PnPSc3Ur3bTQw0gA==} - dev: true + + /ts-mixer@6.0.4: + resolution: {integrity: sha512-ufKpbmrugz5Aou4wcr5Wc1UUFWOLhq+Fm6qa6P0w0K5Qw2yhaUoiWszhCVuNQyNwrlGiscHOmqYoAox1PtvgjA==} + dev: false + + /ts-toolbelt@9.6.0: + resolution: {integrity: sha512-nsZd8ZeNUzukXPlJmTBwUAuABDe/9qtVDelJeT/qW0ow3ZS3BsQJtNkan1802aM9Uf68/Y8ljw86Hu0h5IUW3w==} + dev: false /tslib@2.6.2: resolution: {integrity: sha512-AEYxH93jGFPn/a2iVAwW87VuUIkR1FVUKB77NwMF7nBTDkDrrT/Hpt/IrCJ0QXhW27jTBDcf5ZY7w6RiqTMw2Q==} - dev: true /tunnel-agent@0.6.0: resolution: {integrity: sha512-McnNiV1l8RYeY8tBgEpuodCC1mLUdbSN+CYBL7kJsJNInOP8UjDDEwdk6Mw60vdLLrr5NHKZhMAOSrR2NZuQ+w==} dependencies: safe-buffer: 5.2.1 - dev: true /tweetnacl@0.14.5: resolution: {integrity: sha512-KXXFFdAbFXY4geFIwoyNK+f5Z1b7swfXABfL7HXCmoIWMKU3dmS26672A4EeQtDzLKy7SXmfBu51JolvEKwtGA==} @@ -4715,13 +5979,18 @@ packages: /type-fest@0.20.2: resolution: {integrity: sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==} engines: {node: '>=10'} - dev: true /type-fest@0.21.3: resolution: {integrity: sha512-t0rzBq87m3fVcduHDUFhKmyyX+9eo6WQjZvf51Ea/M0Q7+T374Jp1aUiyUl0GKxp8M/OETVHSDvmkyPgvX+X2w==} engines: {node: '>=10'} dev: true + /types-ramda@0.29.9: + resolution: {integrity: sha512-B+VbLtW68J4ncG/rccKaYDhlirKlVH/Izh2JZUfaPJv+3Tl2jbbgYsB1pvole1vXKSgaPlAe/wgEdOnMdAu52A==} + dependencies: + ts-toolbelt: 9.6.0 + dev: false + /typescript@5.4.2: resolution: {integrity: sha512-+2/g0Fds1ERlP6JsakQQDXjZdZMM+rqpamFZJEKh4kwTIn3iDkgKtby0CeNd5ATNZ4Ry1ax15TMx0W2V+miizQ==} engines: {node: '>=14.17'} @@ -4769,7 +6038,6 @@ packages: /universalify@2.0.0: resolution: {integrity: sha512-hAZsKq7Yy11Zu1DE0OzWjw7nnLZmJZYTDZZyEFHZdUhV8FkH5MCfoU1XMaxXovpyW5nq5scPqq0ZDP9Zyl04oQ==} engines: {node: '>= 10.0.0'} - dev: true /unplugin-vue-markdown@0.26.0(vite@5.1.5): resolution: {integrity: sha512-JohVC2KhMklr3OQJB6YfB20E1AZ/K+wV/q+6XtmamyUccr0cmdWRBR5jSS45y4fNtZqN3ULC+02EiD4pmaOqdQ==} @@ -4796,6 +6064,10 @@ packages: webpack-sources: 3.2.3 webpack-virtual-modules: 0.6.1 + /unraw@3.0.0: + resolution: {integrity: sha512-08/DA66UF65OlpUDIQtbJyrqTR0jTAlJ+jsnkQ4jxR7+K5g5YG1APZKQSMCE1vqqmD+2pv6+IdEjmopFatacvg==} + dev: false + /untildify@4.0.0: resolution: {integrity: sha512-KK8xQ1mkzZeg9inewmFVDNkg3l5LUhoq9kN6iWYB/CC9YMG8HA+c1Q8HwDe6dEX7kErrEVNVBO3fWsVq5iDgtw==} engines: {node: '>=8'} @@ -4823,11 +6095,17 @@ packages: dependencies: querystringify: 2.2.0 requires-port: 1.0.0 - dev: true + + /use-sync-external-store@1.2.0(react@18.2.0): + resolution: {integrity: sha512-eEgnFxGQ1Ife9bzYs6VLi8/4X6CObHMw9Qr9tPY43iKwsPw8xE8+EFsf/2cFZ5S3esXgpWgtSCtLNS41F+sKPA==} + peerDependencies: + react: ^16.8.0 || ^17.0.0 || ^18.0.0 + dependencies: + react: 18.2.0 + dev: false /util-deprecate@1.0.2: resolution: {integrity: sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==} - dev: true /uuid@8.3.2: resolution: {integrity: sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg==} @@ -5065,6 +6343,14 @@ packages: typescript: 5.4.2 dev: true + /vue3-carousel@0.3.1(vue@3.4.21): + resolution: {integrity: sha512-86vUkNPBzL2PVuR9w6hUsI90ccFjLp+K8cSFpRTISf+SjUQY3fMHc5CFF5MUL62v1xYYm27zEBmQupO9VQx9Kw==} + peerDependencies: + vue: ^3.2.0 + dependencies: + vue: 3.4.21(typescript@5.4.2) + dev: false + /vue@3.4.21(typescript@5.4.2): resolution: {integrity: sha512-5hjyV/jLEIKD/jYl4cavMcnzKwjMKohureP8ejn3hhEjwhWIhWeuzL2kJAjzl/WyVsgPY56Sy4Z40C3lVshxXA==} peerDependencies: @@ -5080,6 +6366,17 @@ packages: '@vue/shared': 3.4.21 typescript: 5.4.2 + /web-streams-polyfill@3.3.3: + resolution: {integrity: sha512-d2JWLCivmZYTSIoge9MsgFCZrt571BikcWGYkjC1khllbTeDlGqZ2D8vD8E/lJa8WGWbb7Plm8/XJYV7IJHZZw==} + engines: {node: '>= 8'} + dev: false + + /web-tree-sitter@0.20.3: + resolution: {integrity: sha512-zKGJW9r23y3BcJusbgvnOH2OYAW40MXAOi9bi3Gcc7T4Gms9WWgXF8m6adsJWpGJEhgOzCrfiz1IzKowJWrtYw==} + requiresBuild: true + dev: false + optional: true + /webidl-conversions@3.0.1: resolution: {integrity: sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ==} dev: true @@ -5114,7 +6411,6 @@ packages: hasBin: true dependencies: isexe: 2.0.0 - dev: true /wrap-ansi@6.2.0: resolution: {integrity: sha512-r6lPcBGxZXlIcymEu7InxDMhdW0KDxpLgoFLcguasxCaJ/SOIZwINatK9KY/tf+ZrlywOKU0UDj3ATXUBfxJXA==} @@ -5136,7 +6432,6 @@ packages: /wrappy@1.0.2: resolution: {integrity: sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==} - dev: true /write-file-atomic@5.0.1: resolution: {integrity: sha512-+QU2zd6OTD8XWIJCbffaiQeH9U73qIqafo1x6V1snCWYGJf6cVE0cDR4D8xRzcEnfI21IFrUPzPGtcPf8AC+Rw==} @@ -5146,18 +6441,32 @@ packages: signal-exit: 4.1.0 dev: true + /xml-but-prettier@1.0.1: + resolution: {integrity: sha512-C2CJaadHrZTqESlH03WOyw0oZTtoy2uEg6dSDF6YRg+9GnYNub53RRemLpnvtbHDFelxMx4LajiFsYeR6XJHgQ==} + dependencies: + repeat-string: 1.6.1 + dev: false + /xml-name-validator@4.0.0: resolution: {integrity: sha512-ICP2e+jsHvAj2E2lIHxa5tjXRlKDJo4IdvPvCXbXQGdzSfmSpNVyIKMvoZHjDY9DP0zV17iI85o90vRFXNccRw==} engines: {node: '>=12'} dev: true + /xml@1.0.1: + resolution: {integrity: sha512-huCv9IH9Tcf95zuYCsQraZtWnJvBtLVE0QHMOs8bWyZAFZNDcYjsPq1nEx8jKA9y+Beo9v+7OBPRisQTjinQMw==} + dev: false + + /xtend@4.0.2: + resolution: {integrity: sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ==} + engines: {node: '>=0.4'} + dev: false + /yallist@3.1.1: resolution: {integrity: sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==} dev: true /yallist@4.0.0: resolution: {integrity: sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==} - dev: true /yaml-eslint-parser@1.2.2: resolution: {integrity: sha512-pEwzfsKbTrB8G3xc/sN7aw1v6A6c/pKxLAkjclnAyo5g5qOh6eL9WGu0o3cSDQZKrTNk4KL4lQSwZW+nBkANEg==} @@ -5171,7 +6480,6 @@ packages: /yaml@2.3.3: resolution: {integrity: sha512-zw0VAJxgeZ6+++/su5AFoqBbZbrEakwu+X0M5HmcwUiBL7AzcuPKjj5we4xfQLp78LkEMpD0cOnUhmgOVy3KdQ==} engines: {node: '>= 14'} - dev: true /yauzl@2.10.0: resolution: {integrity: sha512-p4a9I6X6nu6IhoGmBqAcbJy1mlC4j27vEPZX9F4L4/vZT3Lyq1VkFHw/V/PUcB9Buo+DG3iHkT0x3Qya58zc3g==} @@ -5185,10 +6493,8 @@ packages: engines: {node: '>=10'} dev: true - github.com/Valexr/spectre/dfe3bc2c59d23cd4bfd43c690aae3655576ff708: - resolution: {tarball: https://codeload.github.com/Valexr/spectre/tar.gz/dfe3bc2c59d23cd4bfd43c690aae3655576ff708} - name: spectre.css - version: 0.5.9 + /zenscroll@4.0.2: + resolution: {integrity: sha512-jEA1znR7b4C/NnaycInCU6h/d15ZzCd1jmsruqOKnZP6WXQSMH3W2GL+OXbkruslU4h+Tzuos0HdswzRUk/Vgg==} dev: false github.com/octycs/SwaggerDark/f02d394c8ff698cdd93e09c2188b058d2d686ca3: diff --git a/webclient/src/App.vue b/webclient/src/App.vue index 8929a4328..deccaab77 100644 --- a/webclient/src/App.vue +++ b/webclient/src/App.vue @@ -4,8 +4,11 @@ import { useGlobalStore } from "@/stores/global"; import FeedbackModal from "@/components/feedback/FeedbackModal.vue"; import AppSearchBar from "@/components/AppSearchBar.vue"; import AppNavHeader from "@/components/AppNavHeader.vue"; - +import Btn from "@/components/Btn.vue"; +import Toast from "@/components/Toast.vue"; +import { useI18n } from "vue-i18n"; const global = useGlobalStore(); +const { t } = useI18n({ useScope: "local" }); - + I think this should be improved: + - improvement 1 + - improvement 2 + call_to_action: Is there something you don't like? Please tell us about it! + open: Open the feedback-form + diff --git a/webclient/src/assets/404_navigatum.svg b/webclient/src/assets/404_navigatum.svg new file mode 100644 index 000000000..455cd2bc5 --- /dev/null +++ b/webclient/src/assets/404_navigatum.svg @@ -0,0 +1 @@ + diff --git a/webclient/src/assets/logos/tum.svg b/webclient/src/assets/logos/tum.svg index ca08fa3d2..948d93f4c 100644 --- a/webclient/src/assets/logos/tum.svg +++ b/webclient/src/assets/logos/tum.svg @@ -1 +1 @@ - + diff --git a/webclient/src/assets/logos/tum_dark_de.svg b/webclient/src/assets/logos/tum_dark_de.svg index cbecb55ee..c60d82f15 100644 --- a/webclient/src/assets/logos/tum_dark_de.svg +++ b/webclient/src/assets/logos/tum_dark_de.svg @@ -1,34 +1 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + diff --git a/webclient/src/assets/logos/tum_dark_en.svg b/webclient/src/assets/logos/tum_dark_en.svg index 8fb061a43..6c6a15126 100644 --- a/webclient/src/assets/logos/tum_dark_en.svg +++ b/webclient/src/assets/logos/tum_dark_en.svg @@ -1,116 +1 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + diff --git a/webclient/src/assets/logos/tum_light_de.svg b/webclient/src/assets/logos/tum_light_de.svg index 6f0b0d5de..889f523d2 100644 --- a/webclient/src/assets/logos/tum_light_de.svg +++ b/webclient/src/assets/logos/tum_light_de.svg @@ -1,34 +1 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + diff --git a/webclient/src/assets/logos/tum_light_en.svg b/webclient/src/assets/logos/tum_light_en.svg index 5d69eab14..6bd14e8bd 100644 --- a/webclient/src/assets/logos/tum_light_en.svg +++ b/webclient/src/assets/logos/tum_light_en.svg @@ -1,116 +1 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + diff --git a/webclient/src/assets/main.scss b/webclient/src/assets/main.scss index e45648e00..291a4ea36 100644 --- a/webclient/src/assets/main.scss +++ b/webclient/src/assets/main.scss @@ -1,114 +1,17 @@ -@import "@/assets/variables.scss"; @tailwind base; @tailwind components; @tailwind utilities; -/* === General === */ -html { - scroll-behavior: smooth; -} - -body { - position: relative; - - &.no-scroll { - overflow-y: hidden; - } -} - /* v-cloak is set until vue loaded */ [v-cloak] { display: none; } -.loading-container, -#loading-page { - display: block; - height: 100%; - width: 100%; - top: 0; - pointer-events: none; -} - -.loading-container > .loading, -#loading-page > .loading { - margin: 0 auto; - display: block; - position: static; -} - -.loading-container > .loading::after, -#loading-page > .loading::after { - border-bottom-color: transparent; - border-left-color: #ccc; -} - -#loading-page:not([v-cloak]) { - display: none; - - &.show { - display: block; - opacity: 1; - animation: loading-in 0.07s linear 0.1s; - animation-fill-mode: both; - } -} - -.img-responsive { - background-color: $image-loading-bg; -} - -@keyframes loading-in { - from { - opacity: 0; - } - - to { - opacity: 1; - } -} - -/* --- Menu general --- */ - -#app .menu .menu-item > a, -#app .menu .menu-item > button { - /* Overwrite spectre */ - &:focus, - &:hover { - background: $theme-accent; - color: #fff; - } -} - -#app .menu .menu-item + .menu-item { - margin-top: 0; -} - -/* --- Cards --- */ -#app .card { - box-shadow: $card-shadow; - border-radius: 4px; +.focusable { + @apply focus:ring-2 focus:ring-tumBlue-500 focus:ring-offset-2 focus-visible:outline-0; } -/* --- Toast buttons --- */ -.toast .btn { - background: $toast-btn-bg; - color: $light-color; - border-color: $light-color; - font-weight: bold; - - &:hover { - background: $toast-btn-bg-hover; - border-color: $light-color; - } - - &:active { - background: $toast-btn-bg-active; - border-color: $light-color; - } - - &:focus { - background: $toast-btn-bg; - border-color: $light-color; - } +/* see https://www.youtube.com/watch?v=cH8VbLM1958 why this is here */ +* { + min-width: 0; } diff --git a/webclient/src/assets/map/roomfinder_cross-v2.webp b/webclient/src/assets/map/roomfinder_cross-v2.webp deleted file mode 100644 index 7c030f5a2..000000000 Binary files a/webclient/src/assets/map/roomfinder_cross-v2.webp and /dev/null differ diff --git a/webclient/src/assets/md/datenschutz.md b/webclient/src/assets/md/datenschutz.md index 4699761b8..9e924ff58 100644 --- a/webclient/src/assets/md/datenschutz.md +++ b/webclient/src/assets/md/datenschutz.md @@ -9,8 +9,8 @@ Verantwortlicher im Sinne der Datenschutzgesetze, insbesondere der EU-Datenschut Frank Elsinga in Vertretung für ["OpenSource @ TUM e.V."](https://tum.dev). ```plain -Postanschrift: Josef-Fischhaber-Straße 46, 82319 Starnberg -Telefon: (0049/0)176 – 56–727-579 +Postal address: Boltzmannstr. 3, 85748 Garching b. München, Germany. +Telephone: 089/289-17052 E-Mail: navigatum (at-symbol) tum.de ``` diff --git a/webclient/src/assets/md/privacy.md b/webclient/src/assets/md/privacy.md index 4561e9d55..fadd504a6 100644 --- a/webclient/src/assets/md/privacy.md +++ b/webclient/src/assets/md/privacy.md @@ -9,8 +9,8 @@ The responsible person within the meaning of the data protection laws, in partic Frank Elsinga representing ["OpenSource @ TUM e.V."](https://tum.dev). ```plain -Postal address: Josef-Fischhaber-Strasse 46, 82319 Starnberg, Germany. -Telephone: (0049/0)176 - 56-727-579 +Postal address: Boltzmannstr. 3, 85748 Garching b. München, Germany. +Telephone: 089/289-17052 E-mail: navigatum (at-symbol) tum.de ``` diff --git a/webclient/src/assets/spectre-all.scss b/webclient/src/assets/spectre-all.scss deleted file mode 100644 index 72d9a3a4c..000000000 --- a/webclient/src/assets/spectre-all.scss +++ /dev/null @@ -1,10 +0,0 @@ -@import "@/assets/variables"; -@import "spectre.css/src/spectre"; -@import "spectre.css/src/spectre-exp"; -@import "spectre.css/src/spectre-icons"; - -/* Changes */ -.btn:focus, -a:focus { - box-shadow: none; -} diff --git a/webclient/src/assets/thumb-building.webp b/webclient/src/assets/thumb-building.webp deleted file mode 100644 index 8ec99efac..000000000 Binary files a/webclient/src/assets/thumb-building.webp and /dev/null differ diff --git a/webclient/src/assets/variables.scss b/webclient/src/assets/variables.scss deleted file mode 100644 index 7ecbb44d7..000000000 --- a/webclient/src/assets/variables.scss +++ /dev/null @@ -1,94 +0,0 @@ -@use "sass:color"; - -/* === Selector, if the theme is "light" or "dark" === */ -$theme: "light"; - -/* === Shared === */ -$success-color: #6cc872; -$warning-color: #f49e2f; -$error-color: #bb331b; -$theme-accent: #0065bd; // TUM blue - -/* === Light mode (default) === */ -/* - This is not in an @if block because sass requires the variables - to be declared outside an @if scope. - */ -/* -- Overwriting of spectre.css variables -- */ -$primary-color: $theme-accent; -$secondary-color: #64a0c8; -$body-font-color: #3b4351; -$light-color: #fff; -$dark-color: #303742; -$bg-color: #f7f8f9; -$border-color: #e1e1e1; -$border-color-dark: color.adjust($border-color, $lightness: -10%); -$border-color-light: color.adjust($border-color, $lightness: 8%); - -/* -- Custom vars -- */ -$header-color: #fff; -$header-shadow-color: rgba(0, 0, 0, 10%); -$autocomplete-box-shadow: 0 0.05rem 0.2rem rgba(48, 55, 66, 30%); -$autocomplete-comment-color: #777; -$autocomplete-filter-bg: #f8f8f8; -$autocomplete-filter-text: $autocomplete-comment-color; -$footer-color: #fafafa; -$footer-setting-color-disabled: $footer-color; -$footer-setting-bg-disabled: #999; -$feedback-overlay-bg: rgba(247, 248, 249, 75%); -$feedback-box-shadow: 0 0.2rem 0.5rem rgba(48, 55, 66, 30%); -$toast-btn-bg: rgba(0, 0, 0, 13%); -$toast-btn-bg-hover: rgba(0, 0, 0, 20%); -$toast-btn-bg-active: rgba(0, 0, 0, 27%); -$card-highlighted-bg: #f7f7f7; -$text-gray: #aaa; -$border-light: #eee; -$card-border: $border-color; -$card-shadow: 3px 3px 4px rgba(106, 106, 106, 3%); -$card-shadow-dark: 3px 3px 4px rgba(106, 106, 106, 5%); -$image-loading-bg: #eee; -$container-loading-bg: #fbfbfb; -$roomfinder-selected-bg: #f2f2f2; -$search-border: #f0f0f0; -$search-border-hover: #dadee4; - -/* === Dark mode === */ -@if $theme == "dark" { - /* -- Overwriting of spectre.css variables -- */ - $primary-color: #59b2ff !global; - $secondary-color: #213d55 !global; - $body-font-color: #d2d7df !global; - $dark-color: #9aa0aa !global; - $light-color: #17181a !global; // Also sets body background - $border-color: #444 !global; - $border-color-light: #353535 !global; - $border-color-dark: #767c84 !global; - $bg-color: #222428 !global; - - /* -- Custom vars -- */ - $header-color: #1b1c1e; - $header-shadow-color: rgba(0, 0, 0, 40%); - $autocomplete-box-shadow: 0 0.05rem 0.2rem rgba(0, 0, 0, 60%); - $autocomplete-comment-color: #777; - $autocomplete-filter-bg: #232526; - $autocomplete-filter-text: #999; - $footer-color: #1b1c1e; - $footer-setting-color-disabled: #fff; - $footer-setting-bg-disabled: #333; - $feedback-overlay-bg: rgba(0, 0, 0, 70%); - $feedback-box-shadow: 0 0.2rem 0.5rem rgba(0, 0, 0, 50%); - $toast-btn-bg: rgba(255, 255, 255, 7%); - $toast-btn-bg-hover: rgba(255, 255, 255, 20%); - $toast-btn-bg-active: rgba(0, 0, 0, 7%); - $card-highlighted-bg: #0e0e0e; - $text-gray: #aaa; - $border-light: $border-color; - $card-border: $border-color; - $card-shadow: 3px 3px 4px rgba(0, 0, 0, 20%); - $card-shadow-dark: $card-shadow; - $image-loading-bg: #444; - $container-loading-bg: #2a2b2f; - $roomfinder-selected-bg: #282c35; - $search-border: #353535; - $search-border-hover: #444; -} diff --git a/webclient/src/components/AppFooter.vue b/webclient/src/components/AppFooter.vue index b8a29af1d..13bb45acb 100644 --- a/webclient/src/components/AppFooter.vue +++ b/webclient/src/components/AppFooter.vue @@ -1,212 +1,66 @@ - - de: about: diff --git a/webclient/src/components/AppLanguageToggler.vue b/webclient/src/components/AppLanguageToggler.vue deleted file mode 100644 index c500a583e..000000000 --- a/webclient/src/components/AppLanguageToggler.vue +++ /dev/null @@ -1,28 +0,0 @@ - - - diff --git a/webclient/src/components/AppNavHeader.vue b/webclient/src/components/AppNavHeader.vue index 26101ee31..d17299695 100644 --- a/webclient/src/components/AppNavHeader.vue +++ b/webclient/src/components/AppNavHeader.vue @@ -1,40 +1,21 @@ + + - - diff --git a/webclient/src/components/AppSearchBar.vue b/webclient/src/components/AppSearchBar.vue index 2331d1718..d025d4520 100644 --- a/webclient/src/components/AppSearchBar.vue +++ b/webclient/src/components/AppSearchBar.vue @@ -10,7 +10,10 @@ import type { components } from "@/api_types"; type SearchResponse = components["schemas"]["SearchResponse"]; -const { t } = useI18n({ useScope: "local" }); +import { MapPinIcon, MagnifyingGlassIcon, BuildingOfficeIcon, BuildingOffice2Icon } from "@heroicons/vue/24/outline"; +import { ChevronDownIcon } from "@heroicons/vue/16/solid"; +import Btn from "@/components/Btn.vue"; +const { t, locale } = useI18n({ useScope: "local" }); const global = useGlobalStore(); const keep_focus = ref(false); const query = ref(""); @@ -121,7 +124,7 @@ function onInput() { } else { const queryId = queryCounter.value; queryCounter.value += 1; - useFetch(`/api/search?q=${encodeURIComponent(query.value)}`, (d) => { + useFetch(`/api/search?q=${encodeURIComponent(query.value)}&lang=${locale.value}`, (d) => { // Data will be cached anyway in case the user hits backspace, // but we need to discard the data here if it arrived out of order. if (queryId > latestUsedQueryId.value) { @@ -147,13 +150,16 @@ onMounted(() => { + de: - close: Schließen - img_source: Bildquelle img_alt: Handgezeichnete Roofinder-Kartendarstellung - roomfinder: - open_detailed_modal: Show a larger popup of the map - modal: - header: Lageplan - img_alt: Bild des Lageplans - crosshair: Kreuz, das anzeigt, wo sich der Raum auf dem handgezeichneten Raumfinderkartenbild befindet + open_detailed_modal: Show a larger popup of the map + modal: + header: Lageplan en: - close: Close - img_source: Image source img_alt: Hand-drawn roomfinder map image - roomfinder: - open_detailed_modal: Ein größeres Popup der Karte anzeigen - modal: - header: Site Plan - img_alt: Image showing the Site Plan - crosshair: Cross showing where the room is located on the hand-drawn roomfinder map image + open_detailed_modal: Ein größeres Popup der Karte anzeigen + modal: + header: Site Plan diff --git a/webclient/src/components/DetailsSources.vue b/webclient/src/components/DetailsSources.vue index a406a2513..c84e110fe 100644 --- a/webclient/src/components/DetailsSources.vue +++ b/webclient/src/components/DetailsSources.vue @@ -7,69 +7,53 @@ const { t } = useI18n({ useScope: "local" }); - - de: base: diff --git a/webclient/src/components/Modal.vue b/webclient/src/components/Modal.vue new file mode 100644 index 000000000..427017843 --- /dev/null +++ b/webclient/src/components/Modal.vue @@ -0,0 +1,99 @@ + + + + + +de: + close: Modal schließen +en: + close: close modal + diff --git a/webclient/src/components/PreferencesPopup.vue b/webclient/src/components/PreferencesPopup.vue new file mode 100644 index 000000000..63dc21568 --- /dev/null +++ b/webclient/src/components/PreferencesPopup.vue @@ -0,0 +1,63 @@ + + + + + +de: + preferences: Präferenzen + language: Sprache +en: + preferences: Preferences + language: Language + diff --git a/webclient/src/components/RoomfinderImageLocation.vue b/webclient/src/components/RoomfinderImageLocation.vue new file mode 100644 index 000000000..55f82edd7 --- /dev/null +++ b/webclient/src/components/RoomfinderImageLocation.vue @@ -0,0 +1,118 @@ + + + + + +de: + img_alt: Bild des Lageplans + img_source: Bildquelle +en: + img_alt: Image showing the Site Plan + img_source: Image source + diff --git a/webclient/src/components/SelectionSwitch.vue b/webclient/src/components/SelectionSwitch.vue new file mode 100644 index 000000000..3ccd12cb9 --- /dev/null +++ b/webclient/src/components/SelectionSwitch.vue @@ -0,0 +1,67 @@ + + + diff --git a/webclient/src/components/ShareButton.vue b/webclient/src/components/ShareButton.vue index 62026cacd..7ce34642b 100644 --- a/webclient/src/components/ShareButton.vue +++ b/webclient/src/components/ShareButton.vue @@ -1,10 +1,13 @@ @@ -58,6 +70,7 @@ de: copy_link: Link kopieren open_in: Öffnen in other_app: Andere App ... + external_link: Externe Links share: Teilen share_link: Teilen mit ... en: @@ -65,6 +78,7 @@ en: copy_link: Copy link open_in: Open in other_app: Other app ... + external_link: External links share: Share share_link: Share with ... diff --git a/webclient/src/components/Spinner.vue b/webclient/src/components/Spinner.vue new file mode 100644 index 000000000..b7795bb82 --- /dev/null +++ b/webclient/src/components/Spinner.vue @@ -0,0 +1,22 @@ + + + diff --git a/webclient/src/components/TinyModal.vue b/webclient/src/components/TinyModal.vue index eb83e44e2..1d072df97 100644 --- a/webclient/src/components/TinyModal.vue +++ b/webclient/src/components/TinyModal.vue @@ -1,11 +1,13 @@ de: show_more_information: Mehr Informationen anzeigen - close: Schließen en: show_more_information: Show more information - close: Close diff --git a/webclient/src/components/Toast.vue b/webclient/src/components/Toast.vue new file mode 100644 index 000000000..ea2635071 --- /dev/null +++ b/webclient/src/components/Toast.vue @@ -0,0 +1,26 @@ + + + diff --git a/webclient/src/components/feedback/FeedbackModal.vue b/webclient/src/components/feedback/FeedbackModal.vue index ff22c0bf1..a9b60fffb 100644 --- a/webclient/src/components/feedback/FeedbackModal.vue +++ b/webclient/src/components/feedback/FeedbackModal.vue @@ -3,6 +3,7 @@ import { useGlobalStore } from "@/stores/global"; import { ref } from "vue"; import { useI18n } from "vue-i18n"; import TokenBasedModal from "@/components/feedback/TokenBasedModal.vue"; +import Checkbox from "@/components/Checkbox.vue"; const { t } = useI18n({ useScope: "local" }); const global = useGlobalStore(); @@ -12,49 +13,44 @@ const deleteIssueRequested = ref(false); - - de: category: Feedback-Kategorie @@ -106,7 +78,7 @@ de: helptext: bug: Welchen Fehler hast du gefunden? Wo hast du ihn gefunden? Bitte gib eine genaue Beschreibung an. entry: Feedback zu einem Eintrag. Wir können Räume/Gebäude/Standorte hinzufügen und alle Daten, die du siehst (Namen, Koordinaten, Adressen, ...) anpassen. Was können wir verbessern? - features: Features, die du gerne auf dieser Website haben würdest + feature: Features, die du gerne auf dieser Website haben würdest general: Generelles Feedback über diese Website other: "Feedback ist auf ein Problem gestoßen: Kategorie ungültig" search: Feedback zur Suche. Was war dein Suchbegriff? Was hättest du als Ergebnis erwartet? @@ -119,7 +91,7 @@ de: type: bug: Fehler entry: Eintrag - features: Features + feature: Features general: Allgemein search: Suche en: @@ -128,7 +100,7 @@ en: helptext: bug: Which bug did you find? Where did you find it? Please provide a detailed description. entry: Feedback about an entry. We can add rooms/buildings/locations and adjust all data you see (names, coordinates, addresses, ...). What can we improve? - features: Features you would like to see on this website + feature: Features you would like to see on this website general: General Feedback about this website other: "Feedback encountered issue: Category invalid" search: Feedback about the search. What was your search query? What did you expect to see? @@ -141,7 +113,7 @@ en: type: bug: Bug entry: Entry - features: Features + feature: Features general: General search: Search diff --git a/webclient/src/components/feedback/TokenBasedModal.cy.ts b/webclient/src/components/feedback/TokenBasedModal.cy.ts index c7c710c02..a27e2b00f 100644 --- a/webclient/src/components/feedback/TokenBasedModal.cy.ts +++ b/webclient/src/components/feedback/TokenBasedModal.cy.ts @@ -1,36 +1,37 @@ -import TokenBasedModal from "./TokenBasedModal.vue"; +//import TokenBasedModal from "./TokenBasedModal.vue"; describe("", () => { + /* TODO: comment out once cypress supports vite v5 it("accepted privacy policy", () => { cy.intercept("POST", "/api/feedback/get_token", { statusCode: 201, fixture: "feedback/get_token.json" }); cy.mount(TokenBasedModal); - cy.get('[data-cy="feedback-privacy"]').parent().click(); - cy.get('[data-cy="feedback-privacy"]').should("be.checked"); - cy.get('[data-cy="feedback-send"]').click(); + cy.get("#privacy-checked").parent().click(); + cy.get("#privacy-checked").should("be.checked"); + cy.contains('[data-cy="feedback-send"]').click(); cy.contains("Betreff fehlt"); // todo fix one in a more sensible place }); it("not accepted privacy policy", () => { cy.intercept("POST", "/api/feedback/get_token", { statusCode: 201, fixture: "feedback/get_token.json" }); cy.mount(TokenBasedModal); - cy.get('[data-cy="feedback-send"]').click(); + cy.contains("Feedback senden").click(); cy.get('[data-cy="feedback-error"]').contains("musst die Datenschutzerklärung akzeptiert haben"); }); it("tokens ratelimited", () => { cy.intercept("POST", "/api/feedback/get_token", { statusCode: 429 }); cy.mount(TokenBasedModal); cy.get('[data-cy="feedback-error"]').contains("rate-limiting"); - cy.get('[data-cy="feedback-send"]').should("be.disabled"); + cy.contains("Feedback senden").should("be.disabled"); }); it("temporarily disabled", () => { cy.intercept("POST", "/api/feedback/get_token", { statusCode: 503 }); cy.mount(TokenBasedModal); cy.get('[data-cy="feedback-error"]').contains("Senden von Feedback ist auf dem Server aktuell nicht konfiguriert"); - cy.get('[data-cy="feedback-send"]').should("be.disabled"); + cy.contains("Feedback senden").should("be.disabled"); }); it("should initialise", () => { cy.intercept("POST", "/api/feedback/get_token", { statusCode: 201, fixture: "feedback/get_token.json" }); cy.mount(TokenBasedModal); - cy.get('[data-cy="feedback-privacy"]').should("not.be.checked"); - cy.get('[data-cy="feedback-send"]').should("not.be.disabled"); - }); + cy.get("#privacy-checked").should("not.be.checked"); + cy.contains("Feedback senden").should("not.be.disabled"); + });*/ }); diff --git a/webclient/src/components/feedback/TokenBasedModal.vue b/webclient/src/components/feedback/TokenBasedModal.vue index c833b55b4..702617c3d 100644 --- a/webclient/src/components/feedback/TokenBasedModal.vue +++ b/webclient/src/components/feedback/TokenBasedModal.vue @@ -3,6 +3,11 @@ import { useGlobalStore } from "@/stores/global"; import { ref } from "vue"; import { useI18n } from "vue-i18n"; import { useFeedbackToken } from "@/composables/feedbackToken"; +import Modal from "@/components/Modal.vue"; +import Toast from "@/components/Toast.vue"; +import Btn from "@/components/Btn.vue"; +import Checkbox from "@/components/Checkbox.vue"; +import Spinner from "@/components/Spinner.vue"; const props = defineProps<{ data: { [index: string]: string | boolean | number }; @@ -20,7 +25,6 @@ function closeForm() { successUrl.value = ""; error.blockSend = false; error.message = ""; - document.body.classList.remove("no-scroll"); } enum SubmissionStatus { @@ -58,11 +62,15 @@ function _send() { token.value = null; error.message = `${t("status.send_unexpected_status")}: ${r.status}`; } + if (r.status !== SubmissionStatus.SUCCESSFULLY_CREATED) { + document.getElementById("token-modal-error")?.scrollIntoView({ behavior: "smooth" }); + } }) .catch((r) => { loading.value = false; error.message = t("error.send_req_failed"); console.error(r); + document.getElementById("token-modal-error")?.scrollIntoView({ behavior: "smooth" }); }); } @@ -99,116 +107,98 @@ function sendForm() { - - + OK + + de: @@ -238,16 +228,17 @@ de: post: sowie einer möglichen Übertragung der Daten außerhalb der Europäischen Union zu. github_project_issues: GitHub Projektseite github_site_policy: Nutzungsbedingungen und Datenschutzbestimmungen von GitHub - imprint: Impressum - objection_instruction: - pre: Falls du dies ablehnst, schreibe uns bitte über navigatum (at-symbol) tum.de, oder eine der anderen in unserem - post: gelisteten Kontaktmöglichkeiten. + imprint: Impressum gelisteten Kontaktmöglichkeiten + objection_instruction: Falls du dies ablehnst, schreibe uns bitte über navigatum (at-symbol) tum.de, oder eine der anderen in unserem processing_based_on_gdpr: Die Verarbeitung basiert auf Grundlage des Art. 6 Abs.1 lit. a DSGVO. - question_contact: Bei Fragen könne dich gerne an uns (navigatum (at-symbol) tum.de) oder an unseren Datenschutzbeauftragten + question_contact: + pre: Bei Fragen kannst du dich gerne an uns (navigatum (at-symbol) tum.de) oder an unseren Datenschutzbeauftragten + post: wenden. right_of_appeal: Es besteht zudem ein Beschwerderecht beim Bayerischen Landesbeauftragten für den Datenschutz. right_to_information: Unter den gesetzlichen Voraussetzungen und einem vorhandenen Personenbezug der Daten besteht ein Recht auf Auskunft, sowie auf Berichtigung oder Löschung oder auf Einschränkung der Verarbeitung oder eines Widerspruchsrechts gegen die Verarbeitung sowie des Rechts auf Datenübertragbarkeit. + sending: Wird gesendet + try_again_later: Bitte versuche es später noch einmal send: Senden - close: Schließen thank_you: Vielen Dank! en: title: Send Feedback @@ -276,15 +267,16 @@ en: post: as well as a possible transfer of the data outside the European Union. github_project_issues: GitHub project page github_site_policy: terms of use and privacy policy of GitHub - imprint: imprint - objection_instruction: - pre: If you object to this, please write to us via navigatum (at-symbol) tum.de, or one of the other contact options listed in our - post: . + imprint: contact options listed in our imprint + objection_instruction: If you object to this, please write to us via navigatum (at-symbol) tum.de, or one of the other processing_based_on_gdpr: The processing is based on Art. 6 para. 1 lit. a DSGVO. - question_contact: If you have any questions, please feel free to contact us (navigatum (at-symbol) tum.de) or our data protection officer + question_contact: + pre: If you have any questions, please feel free to contact us (navigatum (at-symbol) tum.de) or our data protection officer + post: . right_of_appeal: There is also a right of appeal to the Bavarian State Commissioner for Data Protection. right_to_information: Under the legal conditions and an existing personal reference of the data, there is a right to information, as well as to correction or deletion or to restriction of processing or a right to object to processing as well as the right to data portability. + sending: Sending + try_again_later: not possible send: Send - close: Close thank_you: Thank you! diff --git a/webclient/src/composables/feedbackToken.ts b/webclient/src/composables/feedbackToken.ts index de567e219..aced480a2 100644 --- a/webclient/src/composables/feedbackToken.ts +++ b/webclient/src/composables/feedbackToken.ts @@ -58,6 +58,8 @@ export function useFeedbackToken(t: ReturnType["t"]): { error.message = `${t("error.token_unexpected_status")}${r.status}`; error.blockSend = true; } + if (r.status !== TokenStatus.SUCCESSFULLY_CREATED) + document.getElementById("token-modal-error")?.scrollIntoView({ behavior: "smooth" }); }) .catch((r) => { error.message = t("error.token_req_failed"); diff --git a/webclient/src/composables/fetch.ts b/webclient/src/composables/fetch.ts index 56e2a7178..34024234c 100644 --- a/webclient/src/composables/fetch.ts +++ b/webclient/src/composables/fetch.ts @@ -1,32 +1,31 @@ -import { shallowRef } from "vue"; +import { type MaybeRefOrGetter, shallowRef, toValue, watchEffect } from "vue"; import { useGlobalStore } from "@/stores/global"; export function useFetch( - url: string, + url: MaybeRefOrGetter, successHandler: (d: T) => void, errorHandler: ((e: string) => void) | undefined = undefined, ) { const data = shallowRef(null); - // for some of our endpoints, we might want to have access to the lang/theme cookies - - // Add language query param to the request - const lang = localStorage.getItem("lang") || "de"; - const langQuery = `${url.indexOf("?") != -1 ? "&lang=" : "?lang="}${lang}`; - const localisedUrl = `${import.meta.env.VITE_APP_URL}${url}${langQuery}`; - - const global = useGlobalStore(); - const fetchErrorHandler = errorHandler || ((err: string) => (global.error_message = err)); - fetch(localisedUrl) - .then((res) => { - if (res.status < 200 || res.status >= 300) throw res.statusText; - return res.json(); - }) - .then((json) => { - if (global.error_message) global.error_message = null; - data.value = json; - successHandler(json); - }) - .catch(fetchErrorHandler); + const fetchData = () => { + const localisedUrl = `${import.meta.env.VITE_APP_URL}${toValue(url)}`; + const global = useGlobalStore(); + const fetchErrorHandler = errorHandler || ((err: string) => (global.error_message = err)); + fetch(localisedUrl) + .then((res) => { + if (res.status < 200 || res.status >= 300) throw res.statusText; + return res.json(); + }) + .then((json) => { + if (global.error_message) global.error_message = null; + data.value = json; + successHandler(json); + }) + .catch(fetchErrorHandler); + }; + watchEffect(() => { + fetchData(); + }); return { data }; } diff --git a/webclient/src/composables/cookies.ts b/webclient/src/composables/persistance.ts similarity index 50% rename from webclient/src/composables/cookies.ts rename to webclient/src/composables/persistance.ts index deb2349a8..5e807ab83 100644 --- a/webclient/src/composables/cookies.ts +++ b/webclient/src/composables/persistance.ts @@ -1,5 +1,4 @@ -export function saveCooke(name: string, value: string, reload = true): void { +export function persistentlyStore(name: string, value: string): void { localStorage.setItem(name, value); document.cookie = `${name}=${value};Max-Age=31536000;SameSite=Strict;Path=/`; - if (reload) window.location.reload(); } diff --git a/webclient/src/main.ts b/webclient/src/main.ts index 943251b99..15ec41cb2 100644 --- a/webclient/src/main.ts +++ b/webclient/src/main.ts @@ -5,9 +5,17 @@ import App from "@/App.vue"; import { router } from "@/router"; import { createI18n } from "vue-i18n"; -const i18n = createI18n, "de" | "en", false>({ +type UserLocale = "de" | "en"; +function defaultLocale(): UserLocale { + const lang = localStorage.getItem("lang"); + if (lang && ["de", "en"].includes(lang)) return lang as UserLocale; + const locales = [...navigator.languages, "de"]; + const relevantLocales = locales.filter((l) => ["de", "en"].includes(l)); + return relevantLocales[0] as UserLocale; +} +const i18n = createI18n, UserLocale, false>({ legacy: false, - locale: localStorage.getItem("lang") || "de", + locale: defaultLocale(), messages: { de: {}, en: {} }, globalInjection: true, missingWarn: true, diff --git a/webclient/src/modules/autocomplete.ts b/webclient/src/modules/autocomplete.ts index 11c7a5de0..8171c72d9 100644 --- a/webclient/src/modules/autocomplete.ts +++ b/webclient/src/modules/autocomplete.ts @@ -8,7 +8,7 @@ function _allowHighlighting(text: string): string { // first place), but for extra redundancy we sanitise this anyway. // It is not done by Vue, as we use `v-html`-Tag to include it in the frontend. const opt = new Option(text).innerHTML; - return opt.replaceAll("\x19", "").replaceAll("\x17", ""); + return opt.replaceAll("\x19", "").replaceAll("\x17", ""); } export type SectionFacet = RoomFacet | SiteBuildingFacet; diff --git a/webclient/src/modules/outdatedBrowser.ts b/webclient/src/modules/outdatedBrowser.ts index f571c03c4..d88633271 100644 --- a/webclient/src/modules/outdatedBrowser.ts +++ b/webclient/src/modules/outdatedBrowser.ts @@ -28,15 +28,15 @@ function extractBrowserInfo(): BrowserInfo { function isSupportedBrowser(browserName: BrowserName, browserVersion: number) { switch (browserName) { case "Chrome": - return 98 >= browserVersion; + return 98 <= browserVersion; case "Firefox": - return 94 >= browserVersion; + return 94 <= browserVersion; case "Edge": - return 98 >= browserVersion; + return 98 <= browserVersion; case "Opera": - return 84 >= browserVersion; + return 84 <= browserVersion; case "Safari": - return 15.3 >= browserVersion; + return 15.3 <= browserVersion; default: return false; } @@ -45,6 +45,7 @@ function isSupportedBrowser(browserName: BrowserName, browserVersion: number) { function shouldWarnForOutdatedBrowser(): boolean { const browser = extractBrowserInfo(); if (isSupportedBrowser(browser.name, browser.version)) return false; + console.table(browser); const optLastTime = localStorage.getItem("lastOutdatedBrowserWarningTime"); if (optLastTime === null) return true; const lastTime = new Date(optLastTime); @@ -56,21 +57,20 @@ function shouldWarnForOutdatedBrowser(): boolean { } if (shouldWarnForOutdatedBrowser()) { - const error = document.createElement("div"); - error.classList.add("toast", "toast-error"); - error.innerHTML = `We regret to inform you that your current web browser is outdated and unsupported for the optimal performance of this website. + alert( + `Please consider upgrading your browser to one of the following recommended options: -To ensure a secure and efficient browsing experience, we recommend updating your browser to the latest version or switching to a more modern and supported browser. Outdated browsers may not be able to render the website correctly, leading to potential security vulnerabilities and reduced functionality. +- Google Chrome +- Mozilla Firefox +- Microsoft Edge -Please consider upgrading your browser to one of the following recommended options: - -Google Chrome -Mozilla Firefox +We regret to inform you that your current web browser is outdated and unsupported for the optimal performance of this website. +To ensure a secure and efficient browsing experience, we recommend updating your browser to the latest version or switching to a more modern and supported browser. +Outdated browsers may not be able to render the website correctly thus leading to reduced functionality or lead to potential security vulnerabilities. If you need assistance with updating your browser, please refer to your browser's official website or your IT department for guidance. - -Thank you for your understanding, and we look forward to providing you with an enhanced browsing experience once your browser is up-to-date.`; - document.getElementById("errorToasts")?.appendChild(error); +Thank you for your understanding, and we look forward to providing you with an enhanced browsing experience once your browser is up-to-date.`, + ); localStorage.setItem("lastOutdatedBrowserWarningTime", new Date().getTime().toString()); } export {}; diff --git a/webclient/src/pages/[...slug].vue b/webclient/src/pages/[...slug].vue index 4c5867f81..0c3b9bcd9 100644 --- a/webclient/src/pages/[...slug].vue +++ b/webclient/src/pages/[...slug].vue @@ -2,39 +2,48 @@ import { useGlobalStore } from "@/stores/global"; import { useRoute } from "vue-router"; import { useI18n } from "vue-i18n"; - const route = useRoute(); +import { ArrowRightIcon } from "@heroicons/vue/24/outline"; +import Btn from "@/components/Btn.vue"; const global = useGlobalStore(); const { t } = useI18n({ useScope: "local" }); de: - error_404: 404 Nicht gefunden - call_to_action: Falls du denkst, dass dies ein Fehler ist, teile es uns doch hier mit + open_feedback: Open the feedback-form description: Dies könnte sein, weil wir einen Fehler gemacht haben. got_here: "Ich habe diesen Fehler so gefunden:\r\n1. ..." header: Die angeforderte Seite wurde nicht gefunden. - open_feedback: Open the feedback-form + img_alt: Illustration einer männlichen Person, die auf großen '404'-Buchstaben sitzt und einer weiblichen person vor dem TUM Hauptgebäude + go_home: Zurück gehen + call_to_action: Feedback geben en: - error_404: 404 Not found - call_to_action: If you think this is a mistake, please let us know here + open_feedback: Open the feedback-form description: This could be because we made a mistake. got_here: "I have found the error by:\r\n1. ..." header: The requested website could not to be found. - open_feedback: Open the feedback-form + img_alt: illustration of a female and male person sitting on large '404'-letters in front of the tum main building + go_home: Go back home + call_to_action: Give Feedback diff --git a/webclient/src/pages/about/[name].vue b/webclient/src/pages/about/[name].vue index a693325d4..068edbb03 100644 --- a/webclient/src/pages/about/[name].vue +++ b/webclient/src/pages/about/[name].vue @@ -37,20 +37,30 @@ const route = useRoute(); diff --git a/webclient/src/pages/api.vue b/webclient/src/pages/api.vue index fc44b05f0..e684e06b0 100644 --- a/webclient/src/pages/api.vue +++ b/webclient/src/pages/api.vue @@ -1,37 +1,31 @@ - diff --git a/webclient/src/pages/index.vue b/webclient/src/pages/index.vue index 45fe030e1..b70f084d2 100644 --- a/webclient/src/pages/index.vue +++ b/webclient/src/pages/index.vue @@ -3,204 +3,82 @@ import { setTitle } from "@/composables/common"; import { useFetch } from "@/composables/fetch"; import type { components } from "@/api_types"; import { useI18n } from "vue-i18n"; +import { MapPinIcon } from "@heroicons/vue/24/outline"; +import { ArrowRightIcon, ChevronRightIcon, ChevronDownIcon, ChevronUpIcon } from "@heroicons/vue/24/solid"; +import { computed, ref } from "vue"; +import Btn from "@/components/Btn.vue"; +import Spinner from "@/components/Spinner.vue"; type RootResponse = components["schemas"]["RootResponse"]; -const { t } = useI18n({ useScope: "local" }); -const { data } = useFetch(`/api/get/root`, (d) => setTitle(d.name)); - -function more(id: string) { - document.getElementById(`panel-${id}`)?.classList.add("open"); -} -function less(id: string) { - document.getElementById(`panel-${id}`)?.classList.remove("open"); -} +const { t, locale } = useI18n({ useScope: "local" }); +const url = computed(() => `/api/get/root?lang=${locale.value}`); +const { data } = useFetch(url, (d) => setTitle(d.name)); +const openPanels = ref<(boolean | undefined)[]>([]); - - de: less: weniger @@ -209,6 +87,9 @@ de: more_aria: mehr Gebäude anzeigen overview_map: Übersichtskarte sites: Standorte + "Loading data...": Lädt daten... + show_details_for_campus: show the details for the campus '{0}' + show_details_for_building: show the details for the building '{0}' en: less: less less_aria: show more buildings @@ -216,4 +97,7 @@ en: more_aria: show more buildings overview_map: Overview Map sites: Sites + "Loading data...": Loading data... + show_details_for_campus: show the details for the campus '{0}' + show_details_for_building: show the details for the building '{0}' diff --git a/webclient/src/pages/search.vue b/webclient/src/pages/search.vue index 5315dcda1..5492ea919 100644 --- a/webclient/src/pages/search.vue +++ b/webclient/src/pages/search.vue @@ -9,9 +9,11 @@ import { useI18n } from "vue-i18n"; import { useRoute } from "vue-router"; import type { components } from "@/api_types"; +import { ChevronDownIcon } from "@heroicons/vue/16/solid"; +import { MapPinIcon, MagnifyingGlassIcon, BuildingOfficeIcon, BuildingOffice2Icon } from "@heroicons/vue/24/outline"; type SearchResponse = components["schemas"]["SearchResponse"]; -const { t } = useI18n({ useScope: "local" }); +const { t, locale } = useI18n({ useScope: "local" }); const global = useGlobalStore(); const route = useRoute(); @@ -29,13 +31,13 @@ const apiUrl = computed(() => { params.append("q", q); } params.append("limit_buildings", "10"); - params.append("limit_rooms", "30"); - params.append("limit_all", "30"); + params.append("limit_rooms", "50"); + params.append("limit_all", "60"); + params.append("lang", locale.value); return `/api/search?${params.toString()}`; }); -// eslint-disable-next-line vue/no-ref-object-reactivity-loss -const { data } = useFetch(apiUrl.value, () => { +const { data } = useFetch(apiUrl, () => { setTitle(`${t("search_for")} "${route.query.q}"`); setDescription(genDescription()); }); @@ -65,13 +67,13 @@ function genDescription(): string { - - de: sections: @@ -225,13 +136,12 @@ de: of_which_visible: davon sichtbar were_found: wurden gefunden. feedback: - give: Feedback zur Suche geben + give: Feedback zu Sucheergebnissen geben open: Feedback-Formular für Rückmeldungen zur Suchanfrage geben - max_results: bitte grenze die Suche weiter ein runtime: Laufzeit search_for: Suche nach thumbnail_alt: Vorschaubild für das besagte Gebäude - approx: ca. + approx_results: ca. {count} Ergebnisse, bitte grenze die Suche weiter ein results: 1 Ergebnis | {count} Ergebnisse en: sections: @@ -242,12 +152,11 @@ en: of_which_visible: of them visible were_found: were found. feedback: - give: Send feedback to search + give: Send feedback about search results open: Open the feedback-form for feedback about the search - max_results: please narrow the search further runtime: Runtime search_for: Search for thumbnail_alt: Thumbnail for said building - approx: approx. + approx_results: approx. {count} results, please narrow the search further results: 1 result | {count} results diff --git a/webclient/src/pages/view/[id].vue b/webclient/src/pages/view/[id].vue index cc4172c27..bc7ed268c 100644 --- a/webclient/src/pages/view/[id].vue +++ b/webclient/src/pages/view/[id].vue @@ -10,14 +10,20 @@ import DetailsRoomfinderMap from "@/components/DetailsRoomfinderMap.vue"; import { useI18n } from "vue-i18n"; import { setDescription, setTitle } from "@/composables/common"; import { useClipboard } from "@vueuse/core"; -import { selectedMap, useDetailsStore } from "@/stores/details"; +import { MapSelections, useDetailsStore } from "@/stores/details"; import { computed, nextTick, onMounted, ref, watchEffect } from "vue"; import { useFetch } from "@/composables/fetch"; import { useRoute, useRouter } from "vue-router"; import type { components } from "@/api_types"; +import Toast from "@/components/Toast.vue"; +import { Tab, TabGroup, TabList, TabPanel, TabPanels } from "@headlessui/vue"; +import { CalendarDaysIcon, ClipboardDocumentCheckIcon, LinkIcon } from "@heroicons/vue/24/outline"; +import BreadcrumbList from "@/components/BreadcrumbList.vue"; +import Spinner from "@/components/Spinner.vue"; + type DetailsResponse = components["schemas"]["DetailsResponse"]; -const { t } = useI18n({ useScope: "local" }); +const { t, locale } = useI18n({ useScope: "local" }); const route = useRoute(); const router = useRouter(); const state = useDetailsStore(); @@ -34,12 +40,13 @@ function loadData(data: DetailsResponse) { state.loadData(data); tryToLoadMap(); } + watchEffect(() => { if (route.params.id === "root") { router.replace({ path: "/" }); return; } - useFetch(`/api/get/${route.params.id}`, loadData, () => { + useFetch(`/api/get/${route.params.id}?lang=${locale.value}`, loadData, () => { router.push({ name: "404", // preserve current path and remove the first char to avoid the target URL starting with `//` @@ -61,6 +68,7 @@ function genDescription(d: DetailsResponse) { } return description; } + // --- Loading components --- function tryToLoadMap() { /** @@ -69,7 +77,7 @@ function tryToLoadMap() { * @return {boolean} Whether the loading was successful */ if (document.getElementById("interactive-map") !== null) { - if (state.map.selected === selectedMap.interactive) interactiveMap.value?.loadInteractiveMap(); + if (state.map.selected === MapSelections.interactive) interactiveMap.value?.loadInteractiveMap(); else roomfinderMap.value?.loadRoomfinderMap(state.map.roomfinder.selected_index); return true; } @@ -81,13 +89,6 @@ const feedbackButton = ref | null>(nu const interactiveMap = ref | null>(null); const roomfinderMap = ref | null>(null); onMounted(() => { - window.addEventListener("resize", () => { - if (state.map.selected === selectedMap.roomfinder) { - roomfinderMap.value?.loadRoomfinderMap(state.map.roomfinder.selected_index); - roomfinderMap.value?.loadRoomfinderModalMap(); - } - }); - nextTick(() => { // Even though 'mounted' is called there is no guarantee apparently, // that we can reference the map by ID in the DOM yet. For this reason we @@ -96,9 +97,7 @@ onMounted(() => { function pollMap() { if (!tryToLoadMap()) { - console.warn( - `'mounted' called, but page doesn't appear to be mounted yet. Retrying to load the map in ${timeoutInMs}ms`, - ); + console.info(`'mounted' called, but page is not mounted yet. Retrying map-load in ${timeoutInMs}ms`); window.setTimeout(pollMap, timeoutInMs); timeoutInMs *= 1.5; } @@ -110,160 +109,112 @@ onMounted(() => { - - de: image_alt: Header-Bild, zeigt das Gebäude @@ -428,8 +240,8 @@ de: header: calendar: Kalender öffnen copy_link: Link kopieren - external_link: Externe Links favorites: Zu Favoriten hinzufügen + Loading data...: Lädt daten... en: image_alt: Header image, showing the building details_for: Details for @@ -440,6 +252,6 @@ en: header: calendar: Open calendar copy_link: Copy link - external_link: External links favorites: Add to favorites + Loading data...: Loading data... diff --git a/webclient/src/stores/details.ts b/webclient/src/stores/details.ts index df08ca8a6..04285f37e 100644 --- a/webclient/src/stores/details.ts +++ b/webclient/src/stores/details.ts @@ -3,9 +3,9 @@ import type { components } from "@/api_types"; type DetailsResponse = components["schemas"]["DetailsResponse"]; type ImageInfo = components["schemas"]["ImageInfo"]; type RoomfinderMapEntry = components["schemas"]["RoomfinderMapEntry"]; -export enum selectedMap { - roomfinder, +export enum MapSelections { interactive, + roomfinder, } export const useDetailsStore = defineStore({ @@ -14,22 +14,13 @@ export const useDetailsStore = defineStore({ data: null as DetailsResponse | null, image: { shown_image: null as ImageInfo | null, - shown_image_id: null as number | null, slideshow_open: false, }, map: { // "interactive" is default, because it should show a loading indication. - selected: selectedMap.interactive as selectedMap, + selected: MapSelections.interactive as MapSelections, roomfinder: { - selected_id: null as string | null, // Map id selected_index: 0 as number, // Index in the 'available' list - x: -1023 - 10, // Outside in top left corner - y: -1023 - 10, - modal_open: false, - modalX: -1023 - 10, // Outside in top left corner - modalY: -1023 - 10, - width: 400, - height: 300, }, }, }), @@ -38,39 +29,28 @@ export const useDetailsStore = defineStore({ const index = this.map.roomfinder.selected_index; return this.data?.maps.roomfinder?.available[index] as RoomfinderMapEntry; }, - showImageSlideshow: function (i: number, openSlideshow = true): void { - if (this.data?.imgs && this.data.imgs[i]) { - this.image.slideshow_open = openSlideshow; - this.image.shown_image_id = i; - this.image.shown_image = this.data.imgs[i]; - } else { - this.image.slideshow_open = false; - this.image.shown_image_id = null; - this.image.shown_image = null; - } - }, - hideImageSlideshow: function (): void { - this.image.slideshow_open = false; + showImageSlideshow: function (openSlideshow: boolean): void { + this.image.slideshow_open = this.data?.imgs ? openSlideshow : false; }, loadData: function (d: DetailsResponse): void { - this.showImageSlideshow(0, false); + this.showImageSlideshow(false); // --- Maps --- - this.map.selected = d.maps.default === "interactive" ? selectedMap.interactive : selectedMap.roomfinder; + this.map.selected = d.maps.default === "interactive" ? MapSelections.interactive : MapSelections.roomfinder; // Interactive has to be always available, but roomfinder may be unavailable if (d.maps.roomfinder !== undefined) { // Find default map d.maps.roomfinder.available.forEach((availableMap: RoomfinderMapEntry, index: number) => { if (availableMap.id === this.data?.maps.roomfinder?.default) { this.map.roomfinder.selected_index = index; - this.map.roomfinder.selected_id = availableMap.id; } }); } // --- Images --- if (d.imgs && d.imgs.length > 0) { this.image.shown_image = d.imgs[0]; - this.image.shown_image_id = 0; + } else { + this.image.shown_image = null; } this.data = d; diff --git a/webclient/src/stores/global.ts b/webclient/src/stores/global.ts index 4f0d62223..04d3638c8 100644 --- a/webclient/src/stores/global.ts +++ b/webclient/src/stores/global.ts @@ -8,6 +8,7 @@ export type Coord = { lon: number | undefined; }; }; + export const useGlobalStore = defineStore({ id: "global", state: () => ({ @@ -34,11 +35,11 @@ export const useGlobalStore = defineStore({ this.feedback.open = true; this.feedback.data = { category, subject, body, deletion_requested: false }; - document.body.classList.add("no-scroll"); + document.body.classList.add("overflow-y-hidden"); }, temporarilyCloseFeedback(): void { this.feedback.open = false; - document.body.classList.remove("no-scroll"); + document.body.classList.remove("overflow-y-hidden"); }, }, }); diff --git a/webclient/tailwind.config.js b/webclient/tailwind.config.js deleted file mode 100644 index 45ce1122b..000000000 --- a/webclient/tailwind.config.js +++ /dev/null @@ -1,8 +0,0 @@ -/** @type {import('tailwindcss').Config} */ -export default { - content: ["./index.html", "./src/**/*.{vue,js,ts,jsx,tsx}"], - theme: { - extend: {}, - }, - plugins: [], -}; diff --git a/webclient/tailwind.config.ts b/webclient/tailwind.config.ts new file mode 100644 index 000000000..c44bf62a3 --- /dev/null +++ b/webclient/tailwind.config.ts @@ -0,0 +1,29 @@ +import type { Config } from "tailwindcss"; + +export default >{ + darkMode: "selector", + content: ["./index.html", "./src/**/*.{vue,js,ts,jsx,tsx}"], + theme: { + extend: { + aspectRatio: { + "4/3": "4 / 3", + }, + colors: { + tumBlue: { + 50: "#f3f6fc", + 100: "#e5edf9", + 200: "#c6d9f1", + 300: "#93bae6", + 400: "#5a97d6", + 500: "#3070b3", + 600: "#245fa5", + 700: "#1f4d85", + 800: "#1d426f", + 900: "#1d385d", + 950: "#13243e", + }, + }, + }, + }, + plugins: [require("nightwind")], +}; diff --git a/webclient/vite.config.ts b/webclient/vite.config.ts index 04d0216e0..bb89aa910 100644 --- a/webclient/vite.config.ts +++ b/webclient/vite.config.ts @@ -6,7 +6,7 @@ import VueI18nPlugin from "@intlify/unplugin-vue-i18n/vite"; import Markdown from "unplugin-vue-markdown/vite"; import prism from "markdown-it-prism"; import path from "path"; -import VueDevTools from "vite-plugin-vue-devtools"; +//import VueDevTools from "vite-plugin-vue-devtools"; export default defineConfig({ envDir: path.resolve(__dirname, "./env"), @@ -35,7 +35,7 @@ export default defineConfig({ output: { manualChunks: { maplibre_gl: ["maplibre-gl"], - swagger_ui_dist: ["swagger-ui-dist"], + swagger_ui: ["swagger-ui"], }, }, }, @@ -51,7 +51,9 @@ export default defineConfig({ Markdown({ markdownItUses: [prism], }), - VueDevTools(), + // currently the devtools fucks MAJORLY with the darkmode with no way of configuring it + // (darkmode will get randomly enabled/disabled) + // VueDevTools(), ], resolve: { alias: {