diff --git a/.editorconfig b/.editorconfig new file mode 100644 index 0000000..46ecb36 --- /dev/null +++ b/.editorconfig @@ -0,0 +1,13 @@ +root = true + +[*] +charset = utf-8 +end_of_line = crlf +insert_final_newline = false +indent_style = space +indent_size = 2 +tab_width = 2 +trim_trailing_whitespace = true + +[*.md] +trim_trailing_whitespace = false diff --git a/.eslintignore b/.eslintignore new file mode 100644 index 0000000..c2658d7 --- /dev/null +++ b/.eslintignore @@ -0,0 +1 @@ +node_modules/ diff --git a/.eslintrc.yaml b/.eslintrc.yaml new file mode 100644 index 0000000..15bc4f2 --- /dev/null +++ b/.eslintrc.yaml @@ -0,0 +1,246 @@ +root: true + +env: + es6: true + browser: true + +extends: + - eslint:recommended + +parserOptions: + ecmaVersion": latest + sourceType: module + +rules: + array-bracket-newline: + - error + - consistent + + array-bracket-spacing: + - error + - never + + array-callback-return: error + arrow-parens: + - error + - always + + arrow-spacing: + - error + - before: true + after: true + + block-scoped-var: error + block-spacing: error + brace-style: + - error + - stroustrup + + comma-dangle: + - error + - arrays: never + objects: never + imports: never + exports: never + functions: never + + comma-spacing: + - error + - before: false + after: true + + comma-style: + - error + - last + + computed-property-spacing: error + curly: + - error + - all + + dot-location: + - error + - property + + eol-last: + - error + - never + + eqeqeq: error + func-call-spacing: error + func-name-matching: error + func-style: + - error + - declaration + - allowArrowFunctions: true + + indent: + - error + - 2 + + key-spacing: + - error + - beforeColon: false + afterColon: true + + keyword-spacing: + - error + - before: true + after: true + + linebreak-style: + - error + - unix + + lines-between-class-members: error + max-nested-callbacks: error + max-statements-per-line: error + new-parens: error + no-array-constructor: error + no-await-in-loop: error + no-caller: error + no-constant-condition: + - error + - checkLoops: false + + no-div-regex: error + no-empty: error + no-extra-bind: error + no-extra-parens: + - error + - all + - conditionalAssign: false + nestedBinaryExpressions: false + returnAssign: false + + no-implicit-coercion: + - error + - allow: + - '!!' + + no-invalid-this: error + no-iterator: error + no-label-var: error + no-lonely-if: error + no-loop-func: error + no-new-object: error + no-new-wrappers: error + no-octal-escape: error + no-proto: error + no-prototype-builtins: 'off' + no-restricted-properties: + - error + - object: Lang + property: copyProperties + message: Use Object.assign() + - object: Lang + property: bind + message: Use arrow notation or Function.prototype.bind() + - object: Lang + property: Class + message: Use ES6 classes + + no-return-assign: error + no-return-await: error + no-self-compare: error + no-shadow: error + no-shadow-restricted-names: error + no-template-curly-in-string: error + no-throw-literal: error + no-trailing-spaces: error + no-undef-init: error + no-unneeded-ternary: error + no-unused-expressions: error + no-unused-vars: off + no-useless-call: error + no-useless-computed-key: error + no-useless-concat: error + no-useless-constructor: error + no-useless-rename: error + no-useless-return: error + no-whitespace-before-property: error + no-with: error + nonblock-statement-body-position: + - error + - below + + object-curly-newline: + - error + - consistent: true + + object-curly-spacing: + - error + - always + + object-shorthand: error + operator-assignment: error + operator-linebreak: error + padded-blocks: + - error + - never + + prefer-const: error + prefer-numeric-literals: error + prefer-promise-reject-errors: error + prefer-rest-params: error + prefer-spread: error + prefer-template: error + quotes: + - error + - single + + require-await: error + rest-spread-spacing: + - error + - never + + semi: + - error + - never + + semi-spacing: + - error + - before: false + after: true + + semi-style: error + space-before-blocks: error + space-before-function-paren: + - error + - named: never + anonymous: always + asyncArrow: always + + space-in-parens: error + space-infix-ops: + - error + - int32Hint: false + + space-unary-ops: error + spaced-comment: error + switch-colon-spacing: error + symbol-description: error + template-curly-spacing: error + template-tag-spacing: error + unicode-bom: error + wrap-iife: + - error + - inside + + yield-star-spacing: error + yoda: error + no-duplicate-imports: error + no-use-before-define: + - error + - functions: false + + no-unused-private-class-members: error + no-unmodified-loop-condition: error + no-promise-executor-return: error + require-atomic-updates: error + arrow-body-style: + - error + - as-needed + + consistent-return: error + default-case-last: error diff --git a/.github/workflows/codeql.yml b/.github/workflows/codeql.yml new file mode 100644 index 0000000..2ec8ff0 --- /dev/null +++ b/.github/workflows/codeql.yml @@ -0,0 +1,44 @@ +name: Run codeql + +on: + push: + paths: + - 'src/**/*.js' + - 'src/**/*.py' + pull_request: + paths: + - 'src/**/*.js' + - 'src/**/*.py' + +jobs: + analyze: + runs-on: ubuntu-latest + timeout-minutes: 360 + permissions: + actions: read + contents: read + security-events: write + + strategy: + fail-fast: false + matrix: + language: + - 'javascript' + - 'python' + + steps: + - name: Checkout repository + uses: actions/checkout@v4 + + - name: Initialize CodeQL + uses: github/codeql-action/init@v2 + with: + languages: ${{ matrix.language }} + + - name: Autobuild + uses: github/codeql-action/autobuild@v2 + + - name: Perform CodeQL Analysis + uses: github/codeql-action/analyze@v2 + with: + category: "/language:${{matrix.language}}" diff --git a/.github/workflows/lighthouse.yml b/.github/workflows/lighthouse.yml new file mode 100644 index 0000000..5003f11 --- /dev/null +++ b/.github/workflows/lighthouse.yml @@ -0,0 +1,27 @@ +name: Lighthouse CI + +on: + push: + paths: + - 'src/**/*.js' + - 'src/**/*.css' + - 'src/**/*.html' + pull_request: + paths: + - 'src/**/*.js' + - 'src/**/*.css' + - 'src/**/*.html' + +jobs: + lighthouse: + runs-on: ubuntu-latest + + steps: + - uses: actions/checkout@v4 + - name: Audit URLs using Lighthouse + uses: treosh/lighthouse-ci-action@v10 + with: + urls: | + https://baumkataster-flensburg.de + uploadArtifacts: false + temporaryPublicStorage: true diff --git a/.github/workflows/lint-css.yml b/.github/workflows/lint-css.yml new file mode 100644 index 0000000..163e00f --- /dev/null +++ b/.github/workflows/lint-css.yml @@ -0,0 +1,42 @@ +name: Lint css files + +on: + push: + branches-ignore: + - 'dependabot/**' + paths: + - 'package.json' + - '.stylelintignore' + - '.stylelintrc.json' + - 'src/**/*.css' + pull_request: + paths: + - 'package.json' + - '.stylelintignore' + - '.stylelintrc.json' + - 'src/**/*.css' + +env: + NODE_VERSION: 20 + +jobs: + lint-js: + runs-on: ubuntu-latest + + steps: + - name: Clone repository + uses: actions/checkout@v4 + + - name: Install latest nodejs + uses: actions/setup-node@v4 + with: + node-version: ${{ env.NODE_VERSION }} + + - name: Install faster package manager + run: npm i -g pnpm + + - name: Install dependencies from package.json + run: pnpm install + + - name: Run lint specified in package.json + run: pnpm run lint:css diff --git a/.github/workflows/lint-html.yml b/.github/workflows/lint-html.yml new file mode 100644 index 0000000..844b795 --- /dev/null +++ b/.github/workflows/lint-html.yml @@ -0,0 +1,40 @@ +name: Lint html files + +on: + push: + branches-ignore: + - 'dependabot/**' + paths: + - 'package.json' + - '.htmlhintrc' + - 'src/**/*.html' + pull_request: + paths: + - 'package.json' + - '.htmlhintrc' + - 'src/**/*.html' + +env: + NODE_VERSION: 20 + +jobs: + lint-html: + runs-on: ubuntu-latest + + steps: + - name: Clone repository + uses: actions/checkout@v4 + + - name: Install latest nodejs + uses: actions/setup-node@v4 + with: + node-version: ${{ env.NODE_VERSION }} + + - name: Install faster package manager + run: npm i -g pnpm + + - name: Install dependencies from package.json + run: pnpm install + + - name: Run html lint specified in package.json + run: pnpm run lint:html diff --git a/.github/workflows/lint-js.yml b/.github/workflows/lint-js.yml new file mode 100644 index 0000000..e527419 --- /dev/null +++ b/.github/workflows/lint-js.yml @@ -0,0 +1,42 @@ +name: Lint js files + +on: + push: + branches-ignore: + - 'dependabot/**' + paths: + - 'package.json' + - '.eslintignore' + - '.eslintrc.yaml' + - 'src/**/*.js' + pull_request: + paths: + - 'package.json' + - '.eslintignore' + - '.eslintrc.yaml' + - 'src/**/*.js' + +env: + NODE_VERSION: 20 + +jobs: + lint-js: + runs-on: ubuntu-latest + + steps: + - name: Clone repository + uses: actions/checkout@v4 + + - name: Install latest nodejs + uses: actions/setup-node@v4 + with: + node-version: ${{ env.NODE_VERSION }} + + - name: Install faster package manager + run: npm i -g pnpm + + - name: Install dependencies from package.json + run: pnpm install + + - name: Run lint specified in package.json + run: pnpm run lint:js diff --git a/.gitignore b/.gitignore index 1a4fe6f..96ed2b4 100644 --- a/.gitignore +++ b/.gitignore @@ -1,3 +1,15 @@ -__pycache__ -/venv +.parcel-cache/ +node_modules/ +coverage/ +venv/ +dist/ +.DS_Store .env +.idea +*.tgz +*.suo +*.local +*.ntvs* +*.njsproj +*.sln +*.sw? diff --git a/.htmlhintrc b/.htmlhintrc new file mode 100644 index 0000000..1dff223 --- /dev/null +++ b/.htmlhintrc @@ -0,0 +1,26 @@ +{ + "alt-require": false, + "attr-lowercase": ["viewBox"], + "attr-no-duplication": true, + "attr-unsafe-chars": true, + "attr-value-double-quotes": true, + "attr-value-not-empty": false, + "doctype-first": true, + "doctype-html5": true, + "empty-tag-not-self-closed": true, + "head-script-disabled": false, + "href-abs-or-rel": false, + "id-class-ad-disabled": false, + "id-class-value": false, + "id-unique": true, + "inline-script-disabled": false, + "inline-style-disabled": false, + "space-tab-mixed-disabled": "space", + "spec-char-escape": false, + "src-not-empty": true, + "style-disabled": false, + "tag-pair": true, + "tag-self-close": false, + "tagname-lowercase": true, + "title-require": true +} diff --git a/.parcelrc b/.parcelrc new file mode 100644 index 0000000..1e66515 --- /dev/null +++ b/.parcelrc @@ -0,0 +1,7 @@ +{ + "extends": "@parcel/config-default", + "reporters": ["...", "parcel-reporter-static-files-copy"], + "transformers": { + "url:*": ["@parcel/transformer-raw"] + } +} \ No newline at end of file diff --git a/.postcssrc b/.postcssrc new file mode 100644 index 0000000..d42c370 --- /dev/null +++ b/.postcssrc @@ -0,0 +1,5 @@ +{ + "plugins": { + "tailwindcss": {} + } +} \ No newline at end of file diff --git a/.prettierignore b/.prettierignore new file mode 100644 index 0000000..93a53b0 --- /dev/null +++ b/.prettierignore @@ -0,0 +1,8 @@ +# Ignore external copied files +dist/ + +# Ignore HTML formatting as the diffs are not great +tailwind.config.js + +# Ignore third party JavaScript +node_modules/ diff --git a/.stylelintignore b/.stylelintignore new file mode 100644 index 0000000..849ddff --- /dev/null +++ b/.stylelintignore @@ -0,0 +1 @@ +dist/ diff --git a/.stylelintrc.json b/.stylelintrc.json new file mode 100644 index 0000000..7b13d78 --- /dev/null +++ b/.stylelintrc.json @@ -0,0 +1,15 @@ +{ + "extends": "stylelint-config-standard", + "rules": { + "rule-empty-line-before": [ + "always-multi-line", + { + "except": ["after-single-line-comment", "first-nested"] + } + ], + "at-rule-no-unknown": null, + "block-no-empty": true, + "color-named": "never", + "color-no-hex": null + } +} \ No newline at end of file diff --git a/impressum.html b/impressum.html deleted file mode 100644 index d44acc4..0000000 --- a/impressum.html +++ /dev/null @@ -1,185 +0,0 @@ - - - - - Baumkataster Flensburg - Impressum - - - - - - -
-

Impressum

-
-
-
-
Adresse:
-
OK Lab Flensburg
- Am Nordertor 2
- 24939 Flensburg
- Deutschland
-
-
-
-
E-Mail:
-
- oklab@grain.one -
-
-
-
Telefon:
-
- +4917659978074 -
-
-
-
-
-
-

Haftungsausschluss

-

Inhaltlich verantwortlich gemäß § 55 Abs. 2 RStV ist Aurelius Wendelken.

-

Haftung für Inhalte

-

Die Inhalte unserer Seiten wurden mit größter Sorgfalt erstellt. Für die Richtigkeit, Vollständigkeit und Aktualität der Inhalte können wir jedoch keine Gewähr übernehmen. Als Diensteanbieter sind wir gemäß § 7 Abs.1 TMG für eigene Inhalte auf diesen Seiten nach den allgemeinen Gesetzen verantwortlich. Nach § 8 bis 10 TMG sind wir als Diensteanbieter jedoch nicht verpflichtet, übermittelte oder gespeicherte fremde Informationen zu überwachen oder nach Umständen zu forschen, die auf eine rechtswidrige Tätigkeit hinweisen. Verpflichtungen zur Entfernung oder Sperrung der Nutzung von Informationen nach den allgemeinen Gesetzen bleiben hiervon unberührt. Eine diesbezügliche Haftung ist jedoch erst ab dem Zeitpunkt der Kenntnis einer konkreten Rechtsverletzung möglich. Bei Bekanntwerden von entsprechenden Rechtsverletzungen werden wir diese Inhalte umgehend entfernen.

-

Haftung für Links

-

Unser Angebot enthält Links zu externen Webseiten Dritter, auf deren Inhalte wir keinen Einfluss haben. Deshalb können wir für diese fremden Inhalte auch keine Gewähr übernehmen. Für die Inhalte der verlinkten Seiten ist stets der jeweilige Anbieter oder Betreiber der Seiten verantwortlich. Die verlinkten Seiten wurden zum Zeitpunkt der Verlinkung auf mögliche Rechtsverstöße überprüft. Rechtswidrige Inhalte waren zum Zeitpunkt der Verlinkung nicht erkennbar. Eine permanente inhaltliche Kontrolle der verlinkten Seiten ist jedoch ohne konkrete Anhaltspunkte einer Rechtsverletzung nicht zumutbar. Bei Bekanntwerden von Rechtsverletzungen werden wir derartige Links umgehend entfernen.

-

Urheberrecht

-

Die durch die Seitenbetreiber erstellten Inhalte und Werke auf diesen Seiten unterliegen dem deutschen Urheberrecht. Sie sind mit einer MIT Lizenz urheberrechtlich geschützt. Sofern nicht anders angegeben, stehen die Inhalte dieser Seite unter der MIT Lizenz. Soweit die Inhalte auf dieser Seite nicht vom Betreiber erstellt wurden, werden die Urheberrechte Dritter beachtet. Insbesondere werden Inhalte Dritter als solche gekennzeichnet. Sollten Sie trotzdem auf eine Urheberrechtsverletzung aufmerksam werden, bitten wir um einen entsprechenden Hinweis. Bei Bekanntwerden von Rechtsverletzungen werden wir derartige Inhalte umgehend entfernen.

-
-
-

Datenschutzerklärung

-
-
-

Das Open Knowledge Lab Flensburg, Am Nordertor 2, 24939 Flensburg, Deutschland (nachfolgend als "OK Lab Flensburg" oder "wir" bezeichnet) betreibt die im Internet unter https://baumkataster-flensburg.de und den jeweils dazu gehörenden Unterverzeichnissen abrufbare Internetseite (nachfolgend die "Website" genannt).

-

Das Open Knowledge Lab Flensburg möchte Ihnen mit dieser Datenschutzerklärung erläutern, welche Daten in welcher Form verarbeitet werden, wenn Sie unsere Website besuchen. Hiermit kommen wir zugleich unserer Informationspflicht gem. Art. 13 Datenschutz-Grundverordnung (DSGVO) Ihnen gegenüber nach.

-

I. Verantwortlicher und Kontaktmöglichkeiten des Datenschutzbeauftragten

-
-
-
-
Die datenschutzrechtlich Verantwortliche für die auf unserer Website stattfindenden Datenverarbeitungen ist das:
-
OK Lab Flensburg
- Am Nordertor 2
- 24939 Flensburg
- Deutschland
-
-
-
-
E-Mail:
-
- oklab@grain.one -
-
-
-
Telefon:
-
- +4917659978074 -
-
-
-
-
-
-
-
Unser Datenschutzbeauftragter ist erreichbar unter:
-
OK Lab Flensburg
- Am Nordertor 2
- 24939 Flensburg
- Deutschland
-
-
-
-
E-Mail:
-
- oklab@grain.one -
-
-
-
Telefon:
-
- +4917659978074 -
-
-
-
-

II. Personenbezogene Daten, Zwecke und Rechtsgrundlage der Datenverarbeitung

-

1. Personenbezogene Daten

-

Nach der DSGVO sind personenbezogene Daten "alle Informationen, die sich auf eine identifizierte oder identifizierbare natürliche Person (im Folgenden "betroffene Person") beziehen; als identifizierbar wird eine natürliche Person angesehen, die direkt oder indirekt, insbesondere mittels Zuordnung zu einer Kennung wie einem Namen, zu einer Kennnummer, zu Standortdaten, zu einer Online-Kennung oder zu einem oder mehreren besonderen Merkmalen identifiziert werden kann, die Ausdruck der physischen, physiologischen, genetischen, psychischen, wirtschaftlichen, kulturellen oder sozialen Identität dieser natürlichen Person sind.

-

2. Allgemeine Nutzung der Website

-

Wir erheben und speichern im Zuge Ihres Besuchs auf unserer Website keine personenbezogenen Daten.

-

Unbeschadet der vorstehenden grundsätzlichen Gegebenheiten registriert aber der Webserver unseres Hosters automatisch Zugriffe auf die Websites und dabei insbesondere Ihre IP-Adresse.

-

Zudem legt unser Hoster zur Erhaltung der Systemsicherheit sog. Logfiles an. Diese Logfiles enthalten die folgenden Informationen:

-
    -
  • die IP - Adresse
  • -
  • Datum des Zugriffs
  • -
  • die URL
  • -
  • Inhalte auf die zugegriffen wurde sowie
  • -
  • die übertragenen Informationen
  • -
-

Diese Informationen bleiben für uns anonym. Ein Rückschluss auf eine Person ist somit nicht möglich.

-

Nehmen Sie unter der auf unserer Website angegebenen E-Mail-Adresse Kontakt zu uns auf, teilen Sie uns zumindest Ihre E-Mail-Adresse mit, sowie gegebenenfalls weitere Informationen, die Sie in Ihrer E-Mail preisgeben. Damit wir Ihr Anliegen bearbeiten können, müssen wir diese Daten verarbeiten.

-

3. Zwecke und Rechtsgrundlage der Datenverarbeitung

-

Die Verarbeitung Ihrer IP-Adresse während des Verbindungsaufbaus erfolgt, damit wir Ihnen unsere Website zur Verfügung stellen können. Sie basiert auf Art. 6 Abs. 1 lit. f) DSGVO. Unser berechtigtes Interesse besteht im genannten Zweck.

-

Die Verarbeitung im Rahmen einer Kontaktaufnahme erfolgt, damit wir Ihre Anfrage bearbeiten und beantworten könne. Die Rechtsgrundlage ist Art. 6 Abs. 1 lit. f) DSGVO. Unser berechtigtes Interesse liegt im soeben genannten Zweck.

-

III. Empfänger der Daten

-

Die jeweiligen aktiven aktiven Projektbeteiligten haben ggf. Zugriff auf Ihre Daten, sofern diese für die Bearbeitung der Anliegen zuständig sind. Zudem setzen wir externe Dienstleister ein, soweit wir Leistungen nicht oder nicht sinnvoll selbst vornehmen können. Diese externen Dienstleister sind dabei vor allem Anbieter von IT-Dienstleistungen und Telekommunikationsdienste.

-

Eine übermittlung in Drittstaaten findet grundsätzlich nicht und nur dann statt, soweit sie zur Ausführung Ihrer Aufträge erforderlich ist, gesetzlich vorgeschrieben ist oder Sie uns Ihre Einwilligung hierzu erteilt haben.

-

IV. Speicherdauer

-

Ihre E-Mails und Kontaktaufnahmen speichern wir so lange, wie es zur Bearbeitung Ihrer Anfrage erforderlich ist und speichern Sie anschließend für einen Zeitraum von 3 Jahren, falls Sie sich bezugnehmend auf Ihre ursprüngliche Frage noch einmal an uns wenden.

-

V. Betroffenenrechte

-

Die Datenschutz-Grundverordnung garantiert Ihnen gewisse Rechte, die Sie uns gegenüber - soweit die gesetzlichen Voraussetzungen vorliegen - geltend machen können.

-
    -
  • Art. 15 DSGVO - Auskunftsrecht der betroffenen Person:
  • -
  • Sie haben das Recht, von uns eine Bestätigung darüber zu verlangen, ob Sie betreffende personenbezogene Daten verarbeitet werden und wenn ja, welche dies sind sowie die näheren Umstände der Datenverarbeitung.
  • -
  • Art. 16 DSGVO - Recht auf Berichtigung:
  • -
  • Sie haben das Recht, von uns unverzüglich die Berichtigung Sie betreffender unrichtiger personenbezogener Daten zu verlangen. Dabei haben Sie unter Berücksichtigung der Zwecke der Verarbeitung auch das Recht, die Vervollständigung unvollständiger personenbezogener Daten - auch mittels einer ergänzenden Erklärung - zu verlangen.
  • -
  • Art. 17 DSGVO - Recht auf Löschung:
  • -
  • Sie haben das Recht, von uns zu verlangen, dass Sie betreffende personenbezogene Daten unverzüglich gelöscht werden. Beachten Sie hier bitte die unter Punkt II. 4 beschriebene Ausnahme
  • -
  • Art. 18 DSGVO - Recht auf Einschränkung der Verarbeitung:
  • -
  • Sie haben das Recht, von uns die Einschränkung der Verarbeitung zu verlangen.
  • -
  • Art. 20 DSGVO - Recht auf Datenübertragbarkeit:
  • -
  • Sie haben das Recht, im Falle der Verarbeitung aufgrund einer Einwilligung oder zur Erfüllung eines Vertrags, die Sie betreffenden personenbezogenen Daten, die Sie uns bereitgestellt haben, in einem strukturierten, gängigen und maschinenlesbaren Format zu erhalten, und diese Daten einem anderen Verantwortlichen ohne Behinderung durch uns zu übermitteln oder die Daten direkt an den anderen Verantwortlichen übermitteln zu lassen, soweit dies technisch machbar ist.
  • -
  • Art. 21 DSGVO - Widerspruchsrecht:
  • -
  • -

    Sie haben das Recht, aus Gründen, die sich aus ihrer besonderen Situation ergeben, jederzeit gegen die Verarbeitung Sie betreffender personenbezogener Daten, die aufgrund eines berechtigten Interesses unsererseits oder zur Wahrung einer Aufgabe im öffentlichen Interesse erforderlich ist, oder die in Ausübung öffentlicher Gewalt erfolgt, Widerspruch einzulegen.

    -

    Legen Sie Widerspruch ein, werden wir Ihre personenbezogenen Daten nicht mehr verarbeiten, es sei denn, wir können zwingende schutzwürdige Gründe für die Verarbeitung nachweisen, die Ihre Interessen, Rechte und Freiheiten überwiegen, oder die Verarbeitung dient der Geltendmachung, Ausübung oder Verteidigung von Rechtsansprüchen.

    -

    Soweit wir Ihre personenbezogenen Daten verarbeiten, um Direktwerbung zu betreiben, haben Sie das Recht, jederzeit Widerspruch gegen die Verarbeitung einzulegen. Widersprechen Sie der Verarbeitung für Zwecke der Direktwerbung, so werden wir Ihre personenbezogenen Daten nicht mehr für diese Zwecke verarbeiten.

    -
  • -
  • Art. 77 DSGVO i. V. m. § 19 BDSG - Recht auf Beschwerde bei einer Aufsichtsbehörde:
  • -
  • Sie haben das Recht, jederzeit Beschwerde bei einer Aufsichtsbehörde, insbesondere in dem Mitgliedstaat ihres Aufenthaltsorts, ihres Arbeitsplatzes oder des Orts des mutmaßlichen Verstoßes, einzulegen, wenn Sie der Ansicht sind, dass die Verarbeitung der sie betreffenden personenbezogenen Daten gegen geltendes Recht verstößt.
  • -
-

VI. Pflicht zur Bereitstellung von Daten

-

Sie haben keine vertragliche oder gesetzliche Pflicht uns personenbezogene Daten bereitzustellen. Allerdings sind wir ohne die von Ihnen mitgeteilten Daten nicht in der Lage, Ihnen unsere Services anzubieten.

-

VII. Bestehen von automatisierten Entscheidungsfindungen (einschließlich Profiling)

-

Wir verwenden keine automatisierten Entscheidungsfindungen, die Ihnen gegenüber rechtliche Wirkungen entfaltet oder Sie beeinträchtigt.

-

VIII. Internetspezifische Datenverarbeitungen

-

1. Matomo: Während der Nutzung unserer Internetseiten werden durch uns automatisch technische Zugriffsdaten aufgezeichnet und ausgewertet. Hierfür benutzen wir das Tool "Matomo" (ehemals "Piwik"), ein Open-Source-Programm für Webanalytik, welches statistische Kennwerte zur Nutzung unserer Website auswertet. Diese Daten können jedoch nicht einer bestimmten Person zugeordnet werden; der einzelne Benutzer bleibt hierbei anonym. Weitere Informationen zu "Matomo" finden Sie auf der Website https://matomo.org.

-

Zu diesen Daten gehören zum Beispiel

-
    -
  • Die um die letzten beiden Oktette gekürzte IP-Adresse,
  • -
  • Informationen über den verwendeten Internet-Browser und das verwendete Betriebssystem,
  • -
  • der Domain-Name der Website, von der aus ein Besuch unserer Internet-Seiten erfolgt,
  • -
  • die durchschnittliche Verweildauer in unserem Angebot und
  • -
  • die in unserer Web-Site aufgerufenen Seiten.
  • -
-

Durch die Entfernung des folgenden Hakens können Sie verhindern, dass wir mittels Matomo Ihre Besuche zählen. In diesem Fall wird ein Cookie gesetzt um uns zu signalisieren, dass Sie der Nutzung widersprochen haben.

-

Bitte beachten Sie, dass die jeweiligen Einstellungen bzgl. Cookies nur für Ihr aktuell benutztes Gerät und Ihren aktuell benutzten Browser wirksam sind. Sollten Sie ein anderes Gerät oder einen anderen Browser benutzen, müssen Sie in der Regel die Einstellungen erneut vornehmen. Zudem unterstützen wir die "Do not Track" Funktion Ihres Browsers. Hiermit können Sie uns aktiv über Ihre Browsereinstellungen mitteilen, ob Sie eine Aufzeichnung Ihrer Aktivitäten wünschen oder nicht. Haben Sie "Do not Track" aktiviert, erfolgt keine Aufzeichnung Ihrer Aktivitäten.

-

Die Rechtsgrundlage für die Verwendung von Matomo findet sich in Art. 6 Abs. 1 lit. f) DSGVO. Unser berechtigtes Interesse besteht darin, dass wir die Nutzung unserer Website zu deren Verbesserung und Optimierung auswerten. Die so erfassten Daten werden für einen Zeitraum von 24 Monaten gespeichert.

-

2. Einbindung von Youtube Videos: Wir haben YouTube-Videos in unser Online-Angebot eingebunden. YouTube ist ein Broadcasting-Dienst, der uns das kostenlose Einstellen und Verlinken von Videoclips zur Darstellung unseres Unternehmens ermöglicht. Der Dienst auf youtube.com wird bereitgestellt von der Google Ireland Limited, Gordon House, Barrow Street, Dublin 4, Irland ("Google").

-

Die Videos in unserem Online-Angebot sind auf youtube.com gespeichert und von unserer Website aus direkt abspielbar. Die Videos sind alle im "erweiterten Datenschutz-Modus" / "Zwei-Klick-Lösung" eingebunden. Das bedeutet, dass keine Daten über Sie als Nutzer an YouTube übertragen werden, wenn Sie die Videos nicht abspielen. Erst wenn Sie die Videos abspielen, werden personenbezogene Daten gemäß Absatz 2 an Google übertragen und wie dort dargestellt verarbeitet. Auf diese Datenübertragung und die weitere Verarbeitung durch Google haben wir keinen Einfluss.

-

Durch den Besuch auf der Website und das Abspielen der Videos erhält Google die Information, dass Sie die entsprechende Unterseite unserer Website aufgerufen haben. Zudem werden die unter Ziffer 2 dieser Datenschutzerklärung genannten Daten an Google übermittelt. Dies erfolgt unabhängig davon, ob YouTube ein Nutzerkonto über Sie führt, in das Sie mittels Google eingeloggt sind, oder ob kein Nutzerkonto besteht. Wenn Sie bei Google eingeloggt sind, werden Ihre Daten direkt Ihrem Konto zugeordnet. Wenn Sie die Zuordnung mit Ihrem Profil bei YouTube nicht wünschen, müssen Sie sich vor Betätigung des Play-Buttons ausloggen. Google speichert Ihre Daten als Nutzungsprofile und nutzt sie für Zwecke der Werbung, Marktforschung und/oder bedarfsgerechten Gestaltung seiner Dienste. Eine solche Auswertung erfolgt insbesondere (auch für nicht eingeloggte Nutzer) zur Erbringung von bedarfsgerechter Werbung und um andere Nutzer des sozialen Netzwerks über Ihre Aktivitäten auf unserer Website zu informieren, wobei uns die Einzelheiten unbekannt sind. Ihnen steht ein Widerspruchsrecht zu gegen die Bildung dieser Nutzerprofile, wobei Sie sich zur Ausübung dessen an Google richten müssen. Im übrigen gelten für Sie die unter Ziffer 5 dieser Datenschutzerklärung genannten Betroffenenrechte.

-

Weitere Informationen zu Zweck und Umfang der Datenerhebung und ihrer Verarbeitung durch Google erhalten Sie in den Datenschutzhinweisen von Google. Dort erhalten Sie auch weitere Informationen zu Ihren Rechten und Einstellungsmöglichkeiten zum Schutze Ihrer Privatsphäre. Google verarbeitet Ihre personenbezogenen Daten auch in den USA und hat sich zur Wahrung eines angemessenen Datenschutzniveaus iSd Art. 44 ff DSGVO dem EU- US-Privacy-Shield unterworfen.

-

3. Einbindung von Twitter: Weiter ist der Tweet-Button von twitter.com implementiert, für welchen das Unternehmen Twitter Inc., 795 Folsom St., Suite 600, San Francisco, CA 94107 in den USA verantwortlich zeichnet (im Folgenden "Twitter"). Der Button ist an einem weißem "t" oder an einem Vogel erkennbar. Wenn Sie einen Teil unserer Webseite aufrufen, der eine solche Schaltfläche enthält, baut der Browser bei einer Aktivierung eine direkte Verbindung mit den Servern von Twitter auf. Auch Twitter nutzt Cookies. Jedenfalls erhebt Twitter Daten über Ihr Nutzungsverhalten. Wir haben keinen Einfluss auf den Umfang der Daten, die Twitter mit der Schaltfläche erhebt.

-

Auch hier gilt: Wenn Sie Mitglied bei Twitter sind, sollten Sie wissen, dass Twitter über unsere Webseite Daten über Sie sammeln (z.B. auf welcher Seite Sie konkret waren) und mit Ihren Mitgliedskonten verknüpfen kann - und zwar unabhängig davon, ob Sie die Schaltfläche zum Teilen selbst nutzen. Wenn Sie das nicht möchten, sollten Sie die Schaltfläche nicht aktivieren und/oder sich nach der Betätigung des Tweet-Buttons ausloggen. Allerdings ist es nach unserem Kenntnisstand durchaus möglich, dass Twitter über sogenannte ständige Cookies die bei aktivierten Social-Plugins erhobenen Daten auch zu einem späteren Zeitpunkt mit den Mitgliedskonten verknüpfen kann.

-

Infolgedessen sollten Sie das Setzen von Cookies von Twitter über Ihre Browser-Einstellungen unterbinden.

-

Weitere Ausführungen finden Sie in der Datenschutzerklärung von Twitter.

-

IX. Wenn Sie Anmerkungen oder Fragen haben

-

Wir treffen alle erdenklichen Vorkehrungen zum Schutz und zur Sicherheit Ihrer Daten. Ihre Fragen und Kommentare zum Datenschutz sind uns willkommen, schreiben Sie einfach eine Mail an oklab@grain.one.

-

Flensburg, Mai 2023

-
-
- -
- - diff --git a/index.html b/index.html deleted file mode 100644 index de0f97e..0000000 --- a/index.html +++ /dev/null @@ -1,86 +0,0 @@ - - - - - Baumkataster Stadtplan Flensburg - - - - - - - - - - - - - -
-
-
-
-
-

Baumkataster

-

Stadtplan Flensburg

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

Hintergrund

-

Das Straßenbaumkataster der Stadt Flensburg wird von dem Technischen Betriebszentrum AöR (TBZ Flensburg) im Esri Shape Format über das Open Data Portal des Landes Schleswig-Holstein zum kostenlosen Download angeboten.

-

Haftungsausschluss

-

Das OK Lab Flensburg hostet die zum Download bereitgestellten Daten des TBZ Flensburg ohne inhaltliche Änderung als Feature Service auf dieser Webseite und stellt diese auf der Karte für Analysen zur Verfügung. Alle Daten werden ungeprüft und ohne Gewähr auf deren Genauigkeit zur Verfügung gestellt. Das OK Lab Flensburg übernimmt hierfür keinerlei Haftung und Gewähr.

-

Quellcode

-

Der aktuelle Entwicklungsstand kann auf GitHub eingesehen werden und von jeder Kommune, Stadt oder Land kostenfrei und lizenzfrei genutzt und redeployed werden.

-
-
-
- -
- - - diff --git a/lizenz.html b/lizenz.html deleted file mode 100644 index e75fec7..0000000 --- a/lizenz.html +++ /dev/null @@ -1,48 +0,0 @@ - - - - - Baumkataster Flensburg - Impressum - - - - - - -
-

Lizenz

-
-

Zweckerklärung

-

Die Gesetze der meisten Rechtsordnungen der Welt weisen dem Schöpfer und den nachfolgenden Inhabern (zusammengenommen die "Inhaber") automatisch ausschließliche Urheberrechte und verwandte Schutzrechte (wie unten definiert) am ursprünglichen Werk und/oder an einer Datenbank zu (zusammengenommen das "Werk").

-

Bestimmte Inhaber möchten diese Rechte an einem Werk aufgeben, um zu einer Allmende von schöpferischen, kulturellen und wissenschaftlichen Werken ("Allmende") beizutragen, auf die die Öffentlichkeit verlässlich und ohne Furcht vor späteren Ansprüchen aus Rechtsverletzungen aufbauen und die sie so frei wie möglich und in jedweder möglichen Form und für beliebige Zwecke, einschließlich umfassend kommerzieller Zwecke, verändern, in andere Werke einbinden, wiederverwenden und weiterverbreiten kann. Diese Inhaber mögen etwa deshalb zur Allmende beitragen, weil sie das Ideal einer freien Kultur und die weitere Erzeugung von kreativen, kulturellen und wissenschaftlichen Werken fördern wollen oder, um Reputation oder eine weitere Verbreitung ihres Werkes auch durch die Nutzung und Bemühungen anderer zu erreichen.

-

Wegen dieser und/oder anderer Zwecke und Beweggründe und ohne jegliche Erwartung einer zusätzlichen Gegenleistung oder Kompensation entschließt sich die Person, die CC0 mit einem Werk verknüpft (der bzw. die "Erklärende"), soweit sie Inhaberin von Urheberrechten und verwandten Schutzrechten an dem Werk ist, aus freien Stücken, CC0 auf das Werk anzuwenden und das Werk zu den darin enthaltenen Bedingungen und im Bewusstsein ihrer Urheberrechte und verwandten Schutzrechte am Werk sowie der Bedeutung und der beabsichtigten Rechtsfolgen von CC0 auf diese Rechte öffentlich zu verbreiten.

-

1. Urheberrecht und verwandte Schutzrechte.

-

Ein unter CC0 bereitgestelltes Werk kann urheberrechtlich und durch dem Urheberrecht verwandte Rechte geschützt sein ("Urheberrecht und verwandte Schutzrechte"). Zu den Urheberrechten und verwandten Schutzechten gehören insbesondere:

-
    -
  1. das Recht zur Vervielfältigung, Bearbeitung, Verbreitung, Aufführung, Ausstellung, öffentlichen Wiedergabe und Übersetzung eines Werks;
  2. -
  3. das Urheberpersönlichkeitsrecht des/der ursprünglichen Urheber(s) und/oder ausübenden Künstler(s);
  4. -
  5. Bild- und Persönlichkeitsrechte mit Bezug auf das Bild oder Abbild einer Person in einem Werk;
  6. -
  7. Rechte zum Schutz vor unlauterem Wettbewerb mit Bezug auf ein Werk, vorbehaltlich der Beschränkungen von Ziffer 4(a), siehe unten;
  8. -
  9. Rechte zum Schutz der Gewinnung, Verbreitung, Nutzung und Wiederverwendung von in einem Werk enthaltenen Daten;
  10. -
  11. Datenbankrechte (wie sie sich etwa aus der Richtlinie 96/9/EG des Europäischen Parlaments und des Rats vom 11. März 1996 über den rechtlichen Schutz von Datenbanken und der jeweiligen nationalen Umsetzung ergeben, einschließlich aller sich aus künftigen Änderungen oder Nachfolgeregelungen der Richtlinie ergebenden Rechte), und
  12. -
  13. andere ähnliche, gleichwertige oder entsprechende Rechte auf der Grundlage des anwendbaren Rechts oder völkerrechtlichen Vereinbarungen sowie ihrer jeweiligen nationalen Umsetzungen weltweit.
  14. -
-

2. Verzicht.

-

Im größtmöglichen rechtlich zulässigen Umfang, jedoch nicht im Widerspruch zum anwendbaren Recht, verzichtet der/die Erklärende hiermit offen, vollständig, dauerhaft, unwiderruflich und bedingungslos auf alle Urheberrechte und verwandten Schutzrechte des/der Erklärenden und der zugehörigen Ansprüche und Klagegründe, unabhängig davon, ob diese zum jetzigen Zeitpunkt bekannt sind oder nicht (einschließlich bestehender und zukünftiger Ansprüche und Klagegründe), am Werk und zwar (i) für alle Territorien weltweit, (ii) für die maximale nach anwendbarem Recht bzw. völkerrechtlicher Vereinbarung vorgesehene Schutzdauer (einschließlich künftiger Verlängerungen), (iii) in allen derzeitigen und künftigen Medien und für jedwede Anzahl an Exemplaren und Kopien und (iv) hinsichtlich jedweder Zwecke einschließlich, aber nicht beschränkt auf kommerzielle Zwecke, Werbezwecke und Zwecke der Verkaufsförderung ("Verzicht"). Der/die Erklärende erklärt den Verzicht zugunsten jedes Mitglieds der Öffentlichkeit insgesamt und zum Nachteil der Erben und Rechtsnachfolger des/der Erklärenden mit der uneingeschränkten Absicht, dass dieser Verzicht weder der Möglichkeit zum Widerruf noch zur Anfechtung, Aufhebung oder Kündigung oder einer anderen rechtlichen oder wiederherstellenden Maßnahme unterliegt, die die ungestörte Nutzung des Werks durch die Öffentlichkeit im Sinne der ausdrücklichen Zweckerklärung des/der Erklärenden vereiteln würde.

-

3. Public License als Auffangregelung.

-

Sollte irgendein Teil des Verzichts aus irgendeinem Grund nach anwendbarem Recht als ungültig oder unwirksam beurteilt werden, so soll der Verzicht im größtmöglichen rechtlich zulässigen Umfang unter Berücksichtigung der ausdrücklichen Zweckerklärung des/der Erklärenden aufrechterhalten werden. So weit eine etwaige Beurteilung des Verzichts wie vorgenannt dann reicht, gewährt der/die Erklärende hiermit zusätzlich jeder davon betroffenen Person eine lizenzkostenfreie, nicht übertragbare, nicht unterlizenzierbare, nicht- ausschließliche, unwiderrufliche und bedingungslose Lizenz zur Wahrnehmung des Urheberrechts und der verwandten Schutzrechte der/des Erklärenden am Werk, und zwar (i) für alle Territorien weltweit, (ii) für die maximale nach anwendbarem Recht bzw. völkerrechtlicher Vereinbarung vorgesehene Schutzdauer (einschließlich künftiger Verlängerungen), (iii) in allen derzeitigen und künftigen Medien und für jedwede Anzahl an Exemplaren und Kopien und (iv) für jedweden Zweck einschließlich kommerzieller Zwecke, Werbezwecke und Zwecke der Verkaufsförderung (nachstehend als "Lizenz" bezeichnet). Die Lizenz gilt als ab dem Tag wirksam, an dem der/die Erklärende CC0 auf das Werk angewandt hat. Sofern ein Bestandteil der Lizenz aus irgendeinem Grund als nach anwendbarem Recht ungültig oder unwirksam beurteilt werden sollte, so soll sich die betreffende teilweise Ungültigkeit oder Unwirksamkeit nicht auf die Gültigkeit der übrigen Lizenz auswirken, und für diesen Fall versichert der/die Erklärende, dass er/sie weder (i) ein ihr oder ihm verbleibendes Urheberrecht und verwandtes Schutzrecht am Werk ausüben noch (ii) damit zusammenhängende Ansprüche und Klagegründe in Bezug auf das Werk geltend machen wird, soweit all dies in irgendeiner Weise der ausdrücklichen Zweckerklärung des/der Erklärenden entgegensteht.

-

-

4. Beschränkungen und Haftungsausschluss.

-
    -
  1. Durch dieses Dokument wird nicht auf Marken- oder Patentrechte des/der Erklärenden verzichtet oder diese aufgegeben, niedergelegt, lizenziert oder anderweitig berührt.
  2. -
  3. Der/die Erklärende bietet sein bzw. ihr Werk so an, wie es ist, und gibt in Bezug auf das Werk keinerlei Zusicherungen oder Gewährleistungsversprechen welcher Art auch immer ab, seien diese ausdrücklich oder konkludent, gesetzlich oder anderweitig, was insbesondere auch gilt hinsichtlich Rechtsmängelgewährleistung, Verkehrsfähigkeit und Eignung für einen bestimmten Zweck, Nichtverletzung von Rechten, Nichtvorliegen verborgener oder anderer Mängel, Richtigkeit und für das Vorliegen oder Nichtvorliegen von Fehlern, unabhängig davon, ob diese erkennbar sind oder nicht, all dies jeweils im nach anwendbarem Recht größtmöglich zulässigen Umfang.
  4. -
  5. Der/die Erklärende weist eine Verantwortlichkeit für die Klärung von Rechten anderer Personen von sich, sofern solche Rechte auf das Werk oder seine Nutzung anwendbar sein sollten, was insbesondere auch gilt hinsichtlich Urheberrechten und verwandter Schutzrechte anderer Personen am Werk. Des weiteren weist der/die Erklärende eine Verantwortlichkeit für die Einholung etwaig notwendiger Zustimmungen, Erlaubnisse oder anderer Rechte von sich, die für eine Nutzung des Werks erforderlich sein könnten.
  6. -
  7. Der/die Erklärende ist sich bewusst und erkennt an, dass Creative Commons nicht Partei dieser Vereinbarung ist und keinerlei Pflichten oder Obliegenheiten in Bezug auf CC0 oder die Nutzung des Werkes hat.
  8. -
-
- -
- - diff --git a/main.css b/main.css deleted file mode 100644 index 74f80fb..0000000 --- a/main.css +++ /dev/null @@ -1,104 +0,0 @@ -html, body { - margin: 0; - padding: 0; -} - -.table { - border-collapse: separate; - border-spacing: 5em; -} - -.leaflet-popup-content { - margin: 7px 37px 7px 8px; - line-height: 1.4; - font-size: 1.3em; -} - -.leaflet-control-geocoder-icon { - background-color: #ffffff !important; - background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24'%3E%3Cpath d='M12.2 13l3.4 6.6c.6 1.1 2.5-.4 2-1.2l-4-6.2z'/%3E%3Ccircle cx='10.8' cy='8.9' r='3.9' fill='none' stroke='%23000' stroke-width='1.5'/%3E%3C/svg%3E") !important; -} - -.marker-cluster-small { - background-color: rgba(64, 64, 65, .7); -} - -.marker-cluster-small div { - background-color: rgba(64, 64, 65, .7); -} - -.marker-cluster-medium { - background-color: rgba(64, 64, 65, .7); -} - -.marker-cluster-medium div { - background-color: rgba(64, 64, 65, .7); -} - -.marker-cluster-large { - background-color: rgba(64, 64, 65, .7); -} - -.marker-cluster-large div { - background-color: rgba(64, 64, 65, .7); -} - - /* IE 6-8 fallback colors */ -.leaflet-oldie .marker-cluster-small { - background-color: rgb(64, 64, 65, .7); -} - -.leaflet-oldie .marker-cluster-small div { - background-color: rgb(64, 64, 65, .7); -} - -.leaflet-oldie .marker-cluster-medium { - background-color: rgb(64, 64, 65, .7); -} - -.leaflet-oldie .marker-cluster-medium div { - background-color: rgb(64, 64, 65, .7); -} - -.leaflet-oldie .marker-cluster-large { - background-color: rgb(64, 64, 65, .7); -} - -.leaflet-oldie .marker-cluster-large div { - background-color: rgb(64, 64, 65, .7); -} - -.marker-cluster { - background-clip: padding-box; - border-radius: 20px; -} - -.marker-cluster div { - width: 30px; - height: 30px; - margin-left: 5px; - margin-top: 5px; - - text-align: center; - border-radius: 15px; - font: 12px "Helvetica Neue", Arial, Helvetica, sans-serif; -} - -.marker-cluster span { - color: #fff; - line-height: 30px; -} - -#map { - height: 40vh -} - -@media (min-width: 768px) { - tr > td:first-of-type { - padding-right: 15px; - } - - #map, #filter { - height: 96vh; - } -} diff --git a/main.js b/main.js deleted file mode 100644 index 4319628..0000000 --- a/main.js +++ /dev/null @@ -1,234 +0,0 @@ -let dataObject = null -let cluster = null - -fetch('./data/baumkataster_flensburg.updated.geojson', { - method: 'GET' -}) -.then((response) => { - return response.json() -}) -.then((data) => { - renderPromise(data, 0, false) -}) -.catch(function (error) { - console.log(error) -}) - -fetch('./data/flensburg_stadtteile.geojson', { - method: 'GET' -}) -.then((response) => { - return response.json() -}) -.then((data) => { - addDistrictsLayer(data) -}) -.catch(function (error) { - console.log(error) -}) - -const map = L.map('map').setView([54.7879075, 9.4334885], 13) - -L.tileLayer('https://tile.openstreetmap.org/{z}/{x}/{y}.png', { - maxZoom: 19, - attribution: '© OpenStreetMap' -}).addTo(map) - -let geocoder = L.Control.Geocoder.nominatim() - -if (typeof URLSearchParams !== 'undefined' && location.search) { - // parse /?geocoder=nominatim from URL - let params = new URLSearchParams(location.search) - let geocoderString = params.get('geocoder') - - if (geocoderString && L.Control.Geocoder[geocoderString]) { - console.log('Using geocoder', geocoderString) - geocoder = L.Control.Geocoder[geocoderString]() - } else if (geocoderString) { - console.warn('Unsupported geocoder', geocoderString) - } -} - -const osmGeocoder = new L.Control.geocoder({ - query: 'Flensburg', - position: 'topright', - placeholder: 'Adresse oder Ort', - defaultMarkGeocode: false -}).addTo(map) - -osmGeocoder.on('markgeocode', e => { - const bounds = L.latLngBounds(e.geocode.bbox._southWest, e.geocode.bbox._northEast) - map.fitBounds(bounds) -}) - - -const customIcon = L.icon({ - iconUrl: './static/marker-icon-green.png', - shadowUrl: './static/marker-shadow.png', - iconSize: [31, 41], - iconAnchor: [12, 41], - tooltipAnchor: [4, -41], - shadowSize: [45, 41] -}) - - -const blackIcon = L.icon({ - iconUrl: './static/marker-icon-black.png', - shadowUrl: './static/marker-shadow.png', - iconSize: [25, 41], - iconAnchor: [12, 41], - tooltipAnchor: [2, -41], - shadowSize: [45, 41] -}) - - -const queryform = document.querySelector('#form') - -if (queryform.length) { - queryform.addEventListener('change', (e) => { - e.preventDefault() - - let onlyFellings = false - - const data = new FormData(queryform) - const districtId = parseInt(data.get('district')) - onlyFellings = /^true$/i.test(data.get('onlyFellings')) - - renderPromise(dataObject, districtId, onlyFellings) - }) -} - - -function addDistrictsLayer(data) { - L.geoJson(data, { - style: { - color: '#fff', - fillColor: '#185a44', - fillOpacity: 0.4, - opacity: 0.6, - weight: 1 - } - }).addTo(map) -} - - -function formatAmountOfTrees(amountOfTrees) { - const numberFormat = new Intl.NumberFormat('de-DE'); - const amountOfTreesFormatted = numberFormat.format(amountOfTrees) - - return amountOfTreesFormatted -} - - -function renderPromise(data, districtId, onlyFellings) { - dataObject = data - console.log(onlyFellings) - - if (cluster) { - map.removeLayer(cluster) - } - - const geojsonGroup = L.geoJSON(data, { - filter: function (feature) { - if (districtId === 0 && onlyFellings === false) { - return true - } else if (districtId === 0 && onlyFellings === true && 'felling_year' in feature.properties) { - return true - } - - if (feature.properties.district_id === districtId && onlyFellings === false) { - return true - } else if (feature.properties.district_id === districtId && onlyFellings === true && 'felling_year' in feature.properties) { - return true - } - - }, - onEachFeature: function (feature, layer) { - layer.on('click', function (e) { - document.querySelector('#filter').scrollTo({ - top: 0, - left: 0 - }) - - map.setView(e.latlng, 19) - - document.querySelector('#details').classList.remove('hidden') - document.querySelector('#fellingYear').innerHTML = '' - - if ('tree_type' in e.target.feature.properties) { - document.querySelector('#treeType').innerHTML = e.target.feature.properties.tree_type - } - - if ('tree_species' in e.target.feature.properties) { - document.querySelector('#treeSpecies').innerHTML = e.target.feature.properties.tree_species - } - - if ('trunk_diameter' in e.target.feature.properties) { - document.querySelector('#trunkDiameter').innerHTML = e.target.feature.properties.trunk_diameter - } - - if ('crown_diameter' in e.target.feature.properties) { - document.querySelector('#crownDiameter').innerHTML = e.target.feature.properties.crown_diameter - } - - if ('total_height' in e.target.feature.properties) { - document.querySelector('#totalHeight').innerHTML = e.target.feature.properties.total_height - } - - if ('felling_year' in e.target.feature.properties) { - const fellingYear = e.target.feature.properties.felling_year - document.querySelector('#fellingYear').innerHTML = `Hinweis: Gefällt ${fellingYear}` - } - - if ('plant_year' in e.target.feature.properties) { - document.querySelector('#plantYear').innerHTML = e.target.feature.properties.plant_year - } - - if ('place' in e.target.feature.properties) { - document.querySelector('#place').innerHTML = e.target.feature.properties.place - } - - if ('topology' in e.target.feature.properties) { - document.querySelector('#topology').innerHTML = `${e.target.feature.properties.topology}m` - } - - if ('wikipedia_url' in e.target.feature.properties) { - document.querySelector('#wikipediaUrl').innerHTML = e.target.feature.properties.wikipedia_url - } - }) - }, - pointToLayer: function (feature, latlng) { - let label = String(feature.properties.tree_species) - let icon = customIcon - - if ('felling_year' in feature.properties) { - const fellingYear = feature.properties.felling_year - - label = `Gefällt ${fellingYear}` - icon = blackIcon - } - - return L.marker(latlng, {icon: icon}).bindTooltip(label, { - permanent: false, - direction: 'top' - }).openTooltip() - } - }) - - cluster = L.markerClusterGroup({ - spiderfyOnMaxZoom: false, - showCoverageOnHover: false, - disableClusteringAtZoom: 19, - maxClusterRadius: 40 - }) - - cluster.addLayer(geojsonGroup) - const lengthTrees = geojsonGroup.getLayers().length - const amountOfTrees = formatAmountOfTrees(lengthTrees) - document.querySelector('#amountTrees').innerHTML = `Anzahl angezeigter Straßenbäume ${amountOfTrees}` - - map.addLayer(cluster) - - map.fitBounds(cluster.getBounds(), {padding: [0, 0, 0, 0]}) - // console.log(cluster.getBounds().getCenter()) -} diff --git a/package.json b/package.json new file mode 100644 index 0000000..1931fe4 --- /dev/null +++ b/package.json @@ -0,0 +1,41 @@ +{ + "name": "baumkataster-flensburg", + "source": "src/index.html", + "browserslist": "> 0.5%, last 2 versions, not dead", + "staticFiles": { + "staticPath": "static" + }, + "scripts": { + "start": "parcel", + "build": "parcel build", + "htmlhint": "htmlhint \"src/**/*.html\" --ignore \"dist/**/*.html\" --format unix", + "lint:js": "pnpm exec eslint \"src/**/*.js\" --no-error-on-unmatched-pattern", + "lint:html": "pnpm run htmlhint", + "lint:css": "pnpm exec stylelint \"src/**/*.css\"", + "lint": "pnpm run lint:js && pnpm run lint:css && pnpm run lint:html" + }, + "dependencies": { + "leaflet": "^1.9.4", + "parcel": "^2.11.0" + }, + "devDependencies": { + "@parcel/config-default": "^2.11.0", + "@parcel/transformer-raw": "^2.11.0", + "eslint": "^8.56.0", + "htmlhint": "^1.1.4", + "leaflet-control-geocoder": "^2.4.0", + "leaflet.markercluster": "^1.5.3", + "parcel-reporter-static-files-copy": "^1.5.3", + "postcss": "^8.4.33", + "stylelint": "^16.2.1", + "stylelint-config-standard": "^36.0.0", + "tailwindcss": "^3.4.1" + }, + "pnpm": { + "peerDependencyRules": { + "allowedVersions": { + "svgo": "2.8.0" + } + } + } +} diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml new file mode 100644 index 0000000..13b33a4 --- /dev/null +++ b/pnpm-lock.yaml @@ -0,0 +1,3244 @@ +lockfileVersion: '6.0' + +settings: + autoInstallPeers: true + excludeLinksFromLockfile: false + +dependencies: + leaflet: + specifier: ^1.9.4 + version: 1.9.4 + parcel: + specifier: ^2.11.0 + version: 2.11.0(postcss@8.4.35) + +devDependencies: + '@parcel/config-default': + specifier: ^2.11.0 + version: 2.11.0(@parcel/core@2.11.0)(postcss@8.4.35) + '@parcel/transformer-raw': + specifier: ^2.11.0 + version: 2.11.0(@parcel/core@2.11.0) + eslint: + specifier: ^8.56.0 + version: 8.56.0 + htmlhint: + specifier: ^1.1.4 + version: 1.1.4 + leaflet-control-geocoder: + specifier: ^2.4.0 + version: 2.4.0(leaflet@1.9.4) + leaflet.markercluster: + specifier: ^1.5.3 + version: 1.5.3(leaflet@1.9.4) + parcel-reporter-static-files-copy: + specifier: ^1.5.3 + version: 1.5.3(@parcel/core@2.11.0) + postcss: + specifier: ^8.4.33 + version: 8.4.35 + stylelint: + specifier: ^16.2.1 + version: 16.2.1 + stylelint-config-standard: + specifier: ^36.0.0 + version: 36.0.0(stylelint@16.2.1) + tailwindcss: + specifier: ^3.4.1 + version: 3.4.1 + +packages: + + /@aashutoshrathi/word-wrap@1.2.6: + resolution: {integrity: sha512-1Yjs2SvM8TflER/OD3cOjhWWOZb58A2t7wpE2S9XfBYTiIl+XFhQG2bjy4Pu1I+EAlCNUzRDYDdFwFYUKvXcIA==} + engines: {node: '>=0.10.0'} + dev: true + + /@alloc/quick-lru@5.2.0: + resolution: {integrity: sha512-UrcABB+4bUrFABwbluTIBErXwvbsU/V7TZWfmbgJfbkwiBuziS9gxdODUyuiecfdGQ85jglMW6juS3+z5TsKLw==} + engines: {node: '>=10'} + dev: true + + /@babel/code-frame@7.23.5: + resolution: {integrity: sha512-CgH3s1a96LipHCmSUmYFPwY7MNx8C3avkq7i4Wl3cfa662ldtUe4VM1TPXX70pfmrlWTb6jLqTYrZyT2ZTJBgA==} + engines: {node: '>=6.9.0'} + dependencies: + '@babel/highlight': 7.23.4 + chalk: 2.4.2 + + /@babel/helper-validator-identifier@7.22.20: + resolution: {integrity: sha512-Y4OZ+ytlatR8AI+8KZfKuL5urKp7qey08ha31L8b3BwewJAoJamTzyvxPR/5D+KkdJCGPq/+8TukHBlY10FX9A==} + engines: {node: '>=6.9.0'} + + /@babel/highlight@7.23.4: + resolution: {integrity: sha512-acGdbYSfp2WheJoJm/EBBBLh/ID8KDc64ISZ9DYtBmC8/Q204PZJLHyzeB5qMzJ5trcOkybd78M4x2KWsUq++A==} + engines: {node: '>=6.9.0'} + dependencies: + '@babel/helper-validator-identifier': 7.22.20 + chalk: 2.4.2 + js-tokens: 4.0.0 + + /@csstools/css-parser-algorithms@2.5.0(@csstools/css-tokenizer@2.2.3): + resolution: {integrity: sha512-abypo6m9re3clXA00eu5syw+oaPHbJTPapu9C4pzNsJ4hdZDzushT50Zhu+iIYXgEe1CxnRMn7ngsbV+MLrlpQ==} + engines: {node: ^14 || ^16 || >=18} + peerDependencies: + '@csstools/css-tokenizer': ^2.2.3 + dependencies: + '@csstools/css-tokenizer': 2.2.3 + dev: true + + /@csstools/css-tokenizer@2.2.3: + resolution: {integrity: sha512-pp//EvZ9dUmGuGtG1p+n17gTHEOqu9jO+FiCUjNN3BDmyhdA2Jq9QsVeR7K8/2QCK17HSsioPlTW9ZkzoWb3Lg==} + engines: {node: ^14 || ^16 || >=18} + dev: true + + /@csstools/media-query-list-parser@2.1.7(@csstools/css-parser-algorithms@2.5.0)(@csstools/css-tokenizer@2.2.3): + resolution: {integrity: sha512-lHPKJDkPUECsyAvD60joYfDmp8UERYxHGkFfyLJFTVK/ERJe0sVlIFLXU5XFxdjNDTerp5L4KeaKG+Z5S94qxQ==} + engines: {node: ^14 || ^16 || >=18} + peerDependencies: + '@csstools/css-parser-algorithms': ^2.5.0 + '@csstools/css-tokenizer': ^2.2.3 + dependencies: + '@csstools/css-parser-algorithms': 2.5.0(@csstools/css-tokenizer@2.2.3) + '@csstools/css-tokenizer': 2.2.3 + dev: true + + /@csstools/selector-specificity@3.0.1(postcss-selector-parser@6.0.15): + resolution: {integrity: sha512-NPljRHkq4a14YzZ3YD406uaxh7s0g6eAq3L9aLOWywoqe8PkYamAvtsh7KNX6c++ihDrJ0RiU+/z7rGnhlZ5ww==} + engines: {node: ^14 || ^16 || >=18} + peerDependencies: + postcss-selector-parser: ^6.0.13 + dependencies: + postcss-selector-parser: 6.0.15 + dev: true + + /@eslint-community/eslint-utils@4.4.0(eslint@8.56.0): + resolution: {integrity: sha512-1/sA4dwrzBAyeUoQ6oxahHKmrZvsnLCg4RfxW3ZFGGmQkSNQPFNLV9CUEFQP1x9EYXHTo5p6xdhZM1Ne9p/AfA==} + engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + peerDependencies: + eslint: ^6.0.0 || ^7.0.0 || >=8.0.0 + dependencies: + eslint: 8.56.0 + eslint-visitor-keys: 3.4.3 + dev: true + + /@eslint-community/regexpp@4.10.0: + resolution: {integrity: sha512-Cu96Sd2By9mCNTx2iyKOmq10v22jUVQv0lQnlGNy16oE9589yE+QADPbrMGCkA51cKZSg3Pu/aTJVTGfL/qjUA==} + engines: {node: ^12.0.0 || ^14.0.0 || >=16.0.0} + dev: true + + /@eslint/eslintrc@2.1.4: + resolution: {integrity: sha512-269Z39MS6wVJtsoUl10L60WdkhJVdPG24Q4eZTH3nnF6lpvSShEK3wQjDX9JRWAUPvPh7COouPpU9IrqaZFvtQ==} + engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + dependencies: + ajv: 6.12.6 + debug: 4.3.4 + espree: 9.6.1 + globals: 13.24.0 + ignore: 5.3.1 + import-fresh: 3.3.0 + js-yaml: 4.1.0 + minimatch: 3.1.2 + strip-json-comments: 3.1.1 + transitivePeerDependencies: + - supports-color + dev: true + + /@eslint/js@8.56.0: + resolution: {integrity: sha512-gMsVel9D7f2HLkBma9VbtzZRehRogVRfbr++f06nL2vnCGCNlzOD+/MUov/F4p8myyAHspEhVobgjpX64q5m6A==} + engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + dev: true + + /@humanwhocodes/config-array@0.11.14: + resolution: {integrity: sha512-3T8LkOmg45BV5FICb15QQMsyUSWrQ8AygVfC7ZG32zOalnqrilm018ZVCw0eapXux8FtA33q8PSRSstjee3jSg==} + engines: {node: '>=10.10.0'} + dependencies: + '@humanwhocodes/object-schema': 2.0.2 + debug: 4.3.4 + minimatch: 3.1.2 + transitivePeerDependencies: + - supports-color + dev: true + + /@humanwhocodes/module-importer@1.0.1: + resolution: {integrity: sha512-bxveV4V8v5Yb4ncFTT3rPSgZBOpCkjfK0y4oVVVJwIuDVBRMDXrPyXRL988i5ap9m9bnyEEjWfm5WkBmtffLfA==} + engines: {node: '>=12.22'} + dev: true + + /@humanwhocodes/object-schema@2.0.2: + resolution: {integrity: sha512-6EwiSjwWYP7pTckG6I5eyFANjPhmPjUX9JRLUSfNPC7FX7zK9gyZAfUEaECL6ALTpGX5AjnBq3C9XmVWPitNpw==} + dev: true + + /@isaacs/cliui@8.0.2: + resolution: {integrity: sha512-O8jcjabXaleOG9DQ0+ARXWZBTfnP4WNAqzuiJK7ll44AmxGKv/J2M4TPjxjY3znBCfvBXFzucm1twdyFybFqEA==} + engines: {node: '>=12'} + dependencies: + string-width: 5.1.2 + string-width-cjs: /string-width@4.2.3 + strip-ansi: 7.1.0 + strip-ansi-cjs: /strip-ansi@6.0.1 + wrap-ansi: 8.1.0 + wrap-ansi-cjs: /wrap-ansi@7.0.0 + dev: true + + /@jridgewell/gen-mapping@0.3.3: + resolution: {integrity: sha512-HLhSWOLRi875zjjMG/r+Nv0oCW8umGb0BgEhyX3dDX3egwZtB8PqLnjz3yedt8R5StBrzcg4aBpnh8UA9D1BoQ==} + engines: {node: '>=6.0.0'} + dependencies: + '@jridgewell/set-array': 1.1.2 + '@jridgewell/sourcemap-codec': 1.4.15 + '@jridgewell/trace-mapping': 0.3.22 + 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==} + dev: true + + /@jridgewell/trace-mapping@0.3.22: + resolution: {integrity: sha512-Wf963MzWtA2sjrNt+g18IAln9lKnlRp+K2eH4jjIoF1wYeq3aMREpG09xhlhdzS0EjwU7qmUJYangWa+151vZw==} + dependencies: + '@jridgewell/resolve-uri': 3.1.1 + '@jridgewell/sourcemap-codec': 1.4.15 + dev: true + + /@lezer/common@1.2.1: + resolution: {integrity: sha512-yemX0ZD2xS/73llMZIK6KplkjIjf2EvAHcinDi/TfJ9hS25G0388+ClHt6/3but0oOxinTcQHJLDXh6w1crzFQ==} + + /@lezer/lr@1.4.0: + resolution: {integrity: sha512-Wst46p51km8gH0ZUmeNrtpRYmdlRHUpN1DQd3GFAyKANi8WVz8c2jHYTf1CVScFaCjQw1iO3ZZdqGDxQPRErTg==} + dependencies: + '@lezer/common': 1.2.1 + + /@lmdb/lmdb-darwin-arm64@2.8.5: + resolution: {integrity: sha512-KPDeVScZgA1oq0CiPBcOa3kHIqU+pTOwRFDIhxvmf8CTNvqdZQYp5cCKW0bUk69VygB2PuTiINFWbY78aR2pQw==} + cpu: [arm64] + os: [darwin] + requiresBuild: true + optional: true + + /@lmdb/lmdb-darwin-x64@2.8.5: + resolution: {integrity: sha512-w/sLhN4T7MW1nB3R/U8WK5BgQLz904wh+/SmA2jD8NnF7BLLoUgflCNxOeSPOWp8geP6nP/+VjWzZVip7rZ1ug==} + cpu: [x64] + os: [darwin] + requiresBuild: true + optional: true + + /@lmdb/lmdb-linux-arm64@2.8.5: + resolution: {integrity: sha512-vtbZRHH5UDlL01TT5jB576Zox3+hdyogvpcbvVJlmU5PdL3c5V7cj1EODdh1CHPksRl+cws/58ugEHi8bcj4Ww==} + cpu: [arm64] + os: [linux] + requiresBuild: true + optional: true + + /@lmdb/lmdb-linux-arm@2.8.5: + resolution: {integrity: sha512-c0TGMbm2M55pwTDIfkDLB6BpIsgxV4PjYck2HiOX+cy/JWiBXz32lYbarPqejKs9Flm7YVAKSILUducU9g2RVg==} + cpu: [arm] + os: [linux] + requiresBuild: true + optional: true + + /@lmdb/lmdb-linux-x64@2.8.5: + resolution: {integrity: sha512-Xkc8IUx9aEhP0zvgeKy7IQ3ReX2N8N1L0WPcQwnZweWmOuKfwpS3GRIYqLtK5za/w3E60zhFfNdS+3pBZPytqQ==} + cpu: [x64] + os: [linux] + requiresBuild: true + optional: true + + /@lmdb/lmdb-win32-x64@2.8.5: + resolution: {integrity: sha512-4wvrf5BgnR8RpogHhtpCPJMKBmvyZPhhUtEwMJbXh0ni2BucpfF07jlmyM11zRqQ2XIq6PbC2j7W7UCCcm1rRQ==} + cpu: [x64] + os: [win32] + requiresBuild: true + optional: true + + /@mischnic/json-sourcemap@0.1.1: + resolution: {integrity: sha512-iA7+tyVqfrATAIsIRWQG+a7ZLLD0VaOCKV2Wd/v4mqIU3J9c4jx9p7S0nw1XH3gJCKNBOOwACOPYYSUu9pgT+w==} + engines: {node: '>=12.0.0'} + dependencies: + '@lezer/common': 1.2.1 + '@lezer/lr': 1.4.0 + json5: 2.2.3 + + /@msgpackr-extract/msgpackr-extract-darwin-arm64@3.0.2: + resolution: {integrity: sha512-9bfjwDxIDWmmOKusUcqdS4Rw+SETlp9Dy39Xui9BEGEk19dDwH0jhipwFzEff/pFg95NKymc6TOTbRKcWeRqyQ==} + cpu: [arm64] + os: [darwin] + requiresBuild: true + optional: true + + /@msgpackr-extract/msgpackr-extract-darwin-x64@3.0.2: + resolution: {integrity: sha512-lwriRAHm1Yg4iDf23Oxm9n/t5Zpw1lVnxYU3HnJPTi2lJRkKTrps1KVgvL6m7WvmhYVt/FIsssWay+k45QHeuw==} + cpu: [x64] + os: [darwin] + requiresBuild: true + optional: true + + /@msgpackr-extract/msgpackr-extract-linux-arm64@3.0.2: + resolution: {integrity: sha512-FU20Bo66/f7He9Fp9sP2zaJ1Q8L9uLPZQDub/WlUip78JlPeMbVL8546HbZfcW9LNciEXc8d+tThSJjSC+tmsg==} + cpu: [arm64] + os: [linux] + requiresBuild: true + optional: true + + /@msgpackr-extract/msgpackr-extract-linux-arm@3.0.2: + resolution: {integrity: sha512-MOI9Dlfrpi2Cuc7i5dXdxPbFIgbDBGgKR5F2yWEa6FVEtSWncfVNKW5AKjImAQ6CZlBK9tympdsZJ2xThBiWWA==} + cpu: [arm] + os: [linux] + requiresBuild: true + optional: true + + /@msgpackr-extract/msgpackr-extract-linux-x64@3.0.2: + resolution: {integrity: sha512-gsWNDCklNy7Ajk0vBBf9jEx04RUxuDQfBse918Ww+Qb9HCPoGzS+XJTLe96iN3BVK7grnLiYghP/M4L8VsaHeA==} + cpu: [x64] + os: [linux] + requiresBuild: true + optional: true + + /@msgpackr-extract/msgpackr-extract-win32-x64@3.0.2: + resolution: {integrity: sha512-O+6Gs8UeDbyFpbSh2CPEz/UOrrdWPTBYNblZK5CxxLisYt4kGX3Sc+czffFonyjiGSq3jWLwJS/CCJc7tBr4sQ==} + cpu: [x64] + os: [win32] + requiresBuild: true + optional: true + + /@nodelib/fs.scandir@2.1.5: + resolution: {integrity: sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==} + engines: {node: '>= 8'} + 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==} + engines: {node: '>= 8'} + dependencies: + '@nodelib/fs.scandir': 2.1.5 + fastq: 1.17.1 + dev: true + + /@parcel/bundler-default@2.11.0(@parcel/core@2.11.0): + resolution: {integrity: sha512-ZIs0865Lp871ZK83k5I9L4DeeE26muNMrHa7j8bvls6fKBJKAn8djrhfU4XOLyziU4aAOobcPwXU0+npWqs52g==} + engines: {node: '>= 12.0.0', parcel: ^2.11.0} + dependencies: + '@parcel/diagnostic': 2.11.0 + '@parcel/graph': 3.1.0 + '@parcel/plugin': 2.11.0(@parcel/core@2.11.0) + '@parcel/rust': 2.11.0 + '@parcel/utils': 2.11.0 + nullthrows: 1.1.1 + transitivePeerDependencies: + - '@parcel/core' + + /@parcel/cache@2.11.0(@parcel/core@2.11.0): + resolution: {integrity: sha512-RSSkGNjO00lJPyftzaC9eaNVs4jMjPSAm0VJNWQ9JSm2n4A9BzQtTFAt1vhJOzzW1UsQvvBge9DdfkB7a2gIOw==} + engines: {node: '>= 12.0.0'} + peerDependencies: + '@parcel/core': ^2.11.0 + dependencies: + '@parcel/core': 2.11.0 + '@parcel/fs': 2.11.0(@parcel/core@2.11.0) + '@parcel/logger': 2.11.0 + '@parcel/utils': 2.11.0 + lmdb: 2.8.5 + + /@parcel/codeframe@2.11.0: + resolution: {integrity: sha512-YHs9g/i5af/sd/JrWAojU9YFbKffcJ3Tx2EJaK0ME8OJsye91UaI/3lxSUYLmJG9e4WLNJtqci8V5FBMz//ZPg==} + engines: {node: '>= 12.0.0'} + dependencies: + chalk: 4.1.2 + + /@parcel/compressor-raw@2.11.0(@parcel/core@2.11.0): + resolution: {integrity: sha512-RArhBPRTCfz77soX2IECH09NUd76UBWujXiPRcXGPIHK+C3L1cRuzsNcA39QeSb3thz3b99JcozMJ1nkC2Bsgw==} + engines: {node: '>= 12.0.0', parcel: ^2.11.0} + dependencies: + '@parcel/plugin': 2.11.0(@parcel/core@2.11.0) + transitivePeerDependencies: + - '@parcel/core' + + /@parcel/config-default@2.11.0(@parcel/core@2.11.0)(postcss@8.4.35): + resolution: {integrity: sha512-1e2+qcZkm5/0f4eI20p/DemcYiSxq9d/eyjpTXA7PulJaHbL1wonwUAuy3mvnAvDnLOJmAk/obDVgX1ZfxMGtg==} + peerDependencies: + '@parcel/core': ^2.11.0 + dependencies: + '@parcel/bundler-default': 2.11.0(@parcel/core@2.11.0) + '@parcel/compressor-raw': 2.11.0(@parcel/core@2.11.0) + '@parcel/core': 2.11.0 + '@parcel/namer-default': 2.11.0(@parcel/core@2.11.0) + '@parcel/optimizer-css': 2.11.0(@parcel/core@2.11.0) + '@parcel/optimizer-htmlnano': 2.11.0(@parcel/core@2.11.0)(postcss@8.4.35) + '@parcel/optimizer-image': 2.11.0(@parcel/core@2.11.0) + '@parcel/optimizer-svgo': 2.11.0(@parcel/core@2.11.0) + '@parcel/optimizer-swc': 2.11.0(@parcel/core@2.11.0) + '@parcel/packager-css': 2.11.0(@parcel/core@2.11.0) + '@parcel/packager-html': 2.11.0(@parcel/core@2.11.0) + '@parcel/packager-js': 2.11.0(@parcel/core@2.11.0) + '@parcel/packager-raw': 2.11.0(@parcel/core@2.11.0) + '@parcel/packager-svg': 2.11.0(@parcel/core@2.11.0) + '@parcel/packager-wasm': 2.11.0(@parcel/core@2.11.0) + '@parcel/reporter-dev-server': 2.11.0(@parcel/core@2.11.0) + '@parcel/resolver-default': 2.11.0(@parcel/core@2.11.0) + '@parcel/runtime-browser-hmr': 2.11.0(@parcel/core@2.11.0) + '@parcel/runtime-js': 2.11.0(@parcel/core@2.11.0) + '@parcel/runtime-react-refresh': 2.11.0(@parcel/core@2.11.0) + '@parcel/runtime-service-worker': 2.11.0(@parcel/core@2.11.0) + '@parcel/transformer-babel': 2.11.0(@parcel/core@2.11.0) + '@parcel/transformer-css': 2.11.0(@parcel/core@2.11.0) + '@parcel/transformer-html': 2.11.0(@parcel/core@2.11.0) + '@parcel/transformer-image': 2.11.0(@parcel/core@2.11.0) + '@parcel/transformer-js': 2.11.0(@parcel/core@2.11.0) + '@parcel/transformer-json': 2.11.0(@parcel/core@2.11.0) + '@parcel/transformer-postcss': 2.11.0(@parcel/core@2.11.0) + '@parcel/transformer-posthtml': 2.11.0(@parcel/core@2.11.0) + '@parcel/transformer-raw': 2.11.0(@parcel/core@2.11.0) + '@parcel/transformer-react-refresh-wrap': 2.11.0(@parcel/core@2.11.0) + '@parcel/transformer-svg': 2.11.0(@parcel/core@2.11.0) + transitivePeerDependencies: + - '@swc/helpers' + - cssnano + - postcss + - purgecss + - relateurl + - srcset + - terser + - typescript + - uncss + + /@parcel/core@2.11.0: + resolution: {integrity: sha512-Npe0S6hVaqWEwRL+HI7gtOYOaoE5bJQZTgUDhsDoppWbau51jOlRYOZTXuvRK/jxXnze4/S1sdM24xBYAQ5qkw==} + engines: {node: '>= 12.0.0'} + dependencies: + '@mischnic/json-sourcemap': 0.1.1 + '@parcel/cache': 2.11.0(@parcel/core@2.11.0) + '@parcel/diagnostic': 2.11.0 + '@parcel/events': 2.11.0 + '@parcel/fs': 2.11.0(@parcel/core@2.11.0) + '@parcel/graph': 3.1.0 + '@parcel/logger': 2.11.0 + '@parcel/package-manager': 2.11.0(@parcel/core@2.11.0) + '@parcel/plugin': 2.11.0(@parcel/core@2.11.0) + '@parcel/profiler': 2.11.0 + '@parcel/rust': 2.11.0 + '@parcel/source-map': 2.1.1 + '@parcel/types': 2.11.0(@parcel/core@2.11.0) + '@parcel/utils': 2.11.0 + '@parcel/workers': 2.11.0(@parcel/core@2.11.0) + abortcontroller-polyfill: 1.7.5 + base-x: 3.0.9 + browserslist: 4.22.3 + clone: 2.1.2 + dotenv: 7.0.0 + dotenv-expand: 5.1.0 + json5: 2.2.3 + msgpackr: 1.10.1 + nullthrows: 1.1.1 + semver: 7.6.0 + + /@parcel/diagnostic@2.11.0: + resolution: {integrity: sha512-4dJmOXVL5YGGQRRsQosQbSRONBcboB71mSwaeaEgz3pPdq9QXVPLACkGe/jTXSqa3OnAHu3g5vQLpE1g5xqBqw==} + engines: {node: '>= 12.0.0'} + dependencies: + '@mischnic/json-sourcemap': 0.1.1 + nullthrows: 1.1.1 + + /@parcel/events@2.11.0: + resolution: {integrity: sha512-K6SOjOrQsz1GdNl2qKBktq7KJ3Q3yxK8WXdmQYo10wG39dr051xtMb38aqieTp4eVhL8Yaq2iJgGkdr11fuBnA==} + engines: {node: '>= 12.0.0'} + + /@parcel/fs@2.11.0(@parcel/core@2.11.0): + resolution: {integrity: sha512-zWckdnnovdrgdFX4QYuQV4bbKCsh6IYCkmwaB4yp47rhw1MP0lkBINLt4yFPHBxWXOpElCfxjL+z69c9xJQRBQ==} + engines: {node: '>= 12.0.0'} + peerDependencies: + '@parcel/core': ^2.11.0 + dependencies: + '@parcel/core': 2.11.0 + '@parcel/rust': 2.11.0 + '@parcel/types': 2.11.0(@parcel/core@2.11.0) + '@parcel/utils': 2.11.0 + '@parcel/watcher': 2.4.0 + '@parcel/workers': 2.11.0(@parcel/core@2.11.0) + + /@parcel/graph@3.1.0: + resolution: {integrity: sha512-d1dTW5C7A52HgDtoXlyvlET1ypSlmIxSIZOJ1xp3R9L9hgo3h1u3jHNyaoTe/WPkGVe2QnFxh0h+UibVJhu9vg==} + engines: {node: '>= 12.0.0'} + dependencies: + nullthrows: 1.1.1 + + /@parcel/logger@2.11.0: + resolution: {integrity: sha512-HtMEdCq3LKnvv4T2CIskcqlf2gpBvHMm3pkeUFB/hc/7hW/hE1k6/HA2VOQvc0tBsaMpmEx7PCrfrH56usQSyA==} + engines: {node: '>= 12.0.0'} + dependencies: + '@parcel/diagnostic': 2.11.0 + '@parcel/events': 2.11.0 + + /@parcel/markdown-ansi@2.11.0: + resolution: {integrity: sha512-YA60EWbXi6cLOIzcwRC2wijotPauOGQbUi0vSbu0O6/mjQ68kWCMGz0hwZjDRQcPypQVJEIvTgMymLbvumxwhg==} + engines: {node: '>= 12.0.0'} + dependencies: + chalk: 4.1.2 + + /@parcel/namer-default@2.11.0(@parcel/core@2.11.0): + resolution: {integrity: sha512-DEwBSKSClg4DA2xAWimYkw9bFi7MFb9TdT7/TYZStMTsfYHPWOyyjGR7aVr3Ra4wNb+XX6g4rR41yp3HD6KO7A==} + engines: {node: '>= 12.0.0', parcel: ^2.11.0} + dependencies: + '@parcel/diagnostic': 2.11.0 + '@parcel/plugin': 2.11.0(@parcel/core@2.11.0) + nullthrows: 1.1.1 + transitivePeerDependencies: + - '@parcel/core' + + /@parcel/node-resolver-core@3.2.0(@parcel/core@2.11.0): + resolution: {integrity: sha512-XJRSxCkNbGFWjfmwFdcQZ/qlzWZd35qLtvLz2va8euGL7M5OMEQOv7dsvEhl0R+CC2zcnfFzZwxk78q6ezs8AQ==} + engines: {node: '>= 12.0.0'} + dependencies: + '@mischnic/json-sourcemap': 0.1.1 + '@parcel/diagnostic': 2.11.0 + '@parcel/fs': 2.11.0(@parcel/core@2.11.0) + '@parcel/rust': 2.11.0 + '@parcel/utils': 2.11.0 + nullthrows: 1.1.1 + semver: 7.6.0 + transitivePeerDependencies: + - '@parcel/core' + + /@parcel/optimizer-css@2.11.0(@parcel/core@2.11.0): + resolution: {integrity: sha512-bV97PRxshHV3dMwOpLRgcP1QNhrVWh6VVDfm2gmWULpvsjoykcPS6vrCFksY5CpQsSvNHqJBzQjWS8FubUI76w==} + engines: {node: '>= 12.0.0', parcel: ^2.11.0} + dependencies: + '@parcel/diagnostic': 2.11.0 + '@parcel/plugin': 2.11.0(@parcel/core@2.11.0) + '@parcel/source-map': 2.1.1 + '@parcel/utils': 2.11.0 + browserslist: 4.22.3 + lightningcss: 1.23.0 + nullthrows: 1.1.1 + transitivePeerDependencies: + - '@parcel/core' + + /@parcel/optimizer-htmlnano@2.11.0(@parcel/core@2.11.0)(postcss@8.4.35): + resolution: {integrity: sha512-c20pz4EFF5DNFmqYgptlIj49eT6xjGLkDTdHH3RRzxKovuSXWfYSPs3GED3ZsjVuQyjNQif+/MAk9547F7hrdQ==} + engines: {node: '>= 12.0.0', parcel: ^2.11.0} + dependencies: + '@parcel/plugin': 2.11.0(@parcel/core@2.11.0) + htmlnano: 2.1.0(postcss@8.4.35)(svgo@2.8.0) + nullthrows: 1.1.1 + posthtml: 0.16.6 + svgo: 2.8.0 + transitivePeerDependencies: + - '@parcel/core' + - cssnano + - postcss + - purgecss + - relateurl + - srcset + - terser + - typescript + - uncss + + /@parcel/optimizer-image@2.11.0(@parcel/core@2.11.0): + resolution: {integrity: sha512-jCaJww5QFG2GuNzYW8nlSW+Ea+Cv47TRnOPJNquFIajgfTLJ5ddsWbaNal0GQsL8yNiCBKWd1AV4W0RH9tG0Jg==} + engines: {node: '>= 12.0.0', parcel: ^2.11.0} + peerDependencies: + '@parcel/core': ^2.11.0 + dependencies: + '@parcel/core': 2.11.0 + '@parcel/diagnostic': 2.11.0 + '@parcel/plugin': 2.11.0(@parcel/core@2.11.0) + '@parcel/rust': 2.11.0 + '@parcel/utils': 2.11.0 + '@parcel/workers': 2.11.0(@parcel/core@2.11.0) + + /@parcel/optimizer-svgo@2.11.0(@parcel/core@2.11.0): + resolution: {integrity: sha512-TQpvfBhjV2IsuFHXUolbDS6XWB3DDR2rYTlqlA8LMmuOY7jQd9Bnkl4JnapzWm/bRuzRlzdGjjVCPGL8iShFvA==} + engines: {node: '>= 12.0.0', parcel: ^2.11.0} + dependencies: + '@parcel/diagnostic': 2.11.0 + '@parcel/plugin': 2.11.0(@parcel/core@2.11.0) + '@parcel/utils': 2.11.0 + svgo: 2.8.0 + transitivePeerDependencies: + - '@parcel/core' + + /@parcel/optimizer-swc@2.11.0(@parcel/core@2.11.0): + resolution: {integrity: sha512-ftf42F3JyZxJb6nnLlgNGyNQ273YOla4dFGH/tWC8iTwObHUpWe7cMbCGcrSJBvAlsLkZfLpFNAXFxUgxdKyHQ==} + engines: {node: '>= 12.0.0', parcel: ^2.11.0} + dependencies: + '@parcel/diagnostic': 2.11.0 + '@parcel/plugin': 2.11.0(@parcel/core@2.11.0) + '@parcel/source-map': 2.1.1 + '@parcel/utils': 2.11.0 + '@swc/core': 1.4.1 + nullthrows: 1.1.1 + transitivePeerDependencies: + - '@parcel/core' + - '@swc/helpers' + + /@parcel/package-manager@2.11.0(@parcel/core@2.11.0): + resolution: {integrity: sha512-QzdsrUYlAwIzb8by7WJjqYnbR1MoMKWbtE1MXUeYsZbFusV8B6pOH+lwqNJKS/BFtddZMRPYFueZS2N2fwzjig==} + engines: {node: '>= 12.0.0'} + peerDependencies: + '@parcel/core': ^2.11.0 + dependencies: + '@parcel/core': 2.11.0 + '@parcel/diagnostic': 2.11.0 + '@parcel/fs': 2.11.0(@parcel/core@2.11.0) + '@parcel/logger': 2.11.0 + '@parcel/node-resolver-core': 3.2.0(@parcel/core@2.11.0) + '@parcel/types': 2.11.0(@parcel/core@2.11.0) + '@parcel/utils': 2.11.0 + '@parcel/workers': 2.11.0(@parcel/core@2.11.0) + semver: 7.6.0 + + /@parcel/packager-css@2.11.0(@parcel/core@2.11.0): + resolution: {integrity: sha512-AyIxsp4eL8c22vp2oO2hSRnr3hSVNkARNZc9DG6uXxCc2Is5tUEX0I4PwxWnAx0EI44l+3zX/o414zT8yV9wwQ==} + engines: {node: '>= 12.0.0', parcel: ^2.11.0} + dependencies: + '@parcel/diagnostic': 2.11.0 + '@parcel/plugin': 2.11.0(@parcel/core@2.11.0) + '@parcel/source-map': 2.1.1 + '@parcel/utils': 2.11.0 + nullthrows: 1.1.1 + transitivePeerDependencies: + - '@parcel/core' + + /@parcel/packager-html@2.11.0(@parcel/core@2.11.0): + resolution: {integrity: sha512-ho5AQ70naTV8IqkKIbKtK+jsXQ5TJfFgtBvmJlyB3YydRMbIc+3g4G0xgIvf15V4uCMw9Md0Sv1W65nQXHPQoA==} + engines: {node: '>= 12.0.0', parcel: ^2.11.0} + dependencies: + '@parcel/plugin': 2.11.0(@parcel/core@2.11.0) + '@parcel/types': 2.11.0(@parcel/core@2.11.0) + '@parcel/utils': 2.11.0 + nullthrows: 1.1.1 + posthtml: 0.16.6 + transitivePeerDependencies: + - '@parcel/core' + + /@parcel/packager-js@2.11.0(@parcel/core@2.11.0): + resolution: {integrity: sha512-SxjCsd0xQfg5H73YtVJj9VOpr9s0rwMsSoeykjkatbkEla9NsZajsUkd/bfYf+/0WvEKOrB8oUBo15HkGOgKug==} + engines: {node: '>= 12.0.0', parcel: ^2.11.0} + dependencies: + '@parcel/diagnostic': 2.11.0 + '@parcel/plugin': 2.11.0(@parcel/core@2.11.0) + '@parcel/rust': 2.11.0 + '@parcel/source-map': 2.1.1 + '@parcel/types': 2.11.0(@parcel/core@2.11.0) + '@parcel/utils': 2.11.0 + globals: 13.24.0 + nullthrows: 1.1.1 + transitivePeerDependencies: + - '@parcel/core' + + /@parcel/packager-raw@2.11.0(@parcel/core@2.11.0): + resolution: {integrity: sha512-2/0JQ8DZrz7cVNXwD6OYoUUtSSnlr4dsz8ZkpFDKsBJhvMHtC78Sq+1EDixDGOMiUcalSEjNsoHtkpq9uNh+Xw==} + engines: {node: '>= 12.0.0', parcel: ^2.11.0} + dependencies: + '@parcel/plugin': 2.11.0(@parcel/core@2.11.0) + transitivePeerDependencies: + - '@parcel/core' + + /@parcel/packager-svg@2.11.0(@parcel/core@2.11.0): + resolution: {integrity: sha512-2wQBkzLwcaWFGWz8TP+bgsXgiueWPzrjKsWugWdDfq0FbXh8XVeR/599qnus3RFHZy4cH6L6yq/7zxcljtxK8A==} + engines: {node: '>= 12.0.0', parcel: ^2.11.0} + dependencies: + '@parcel/plugin': 2.11.0(@parcel/core@2.11.0) + '@parcel/types': 2.11.0(@parcel/core@2.11.0) + '@parcel/utils': 2.11.0 + posthtml: 0.16.6 + transitivePeerDependencies: + - '@parcel/core' + + /@parcel/packager-wasm@2.11.0(@parcel/core@2.11.0): + resolution: {integrity: sha512-tTy4EbDXeeiZ0oB7L2FWaHSD1mbmYZP6R5HXqkvc5dECGUKPU5Jz6ek2C5AM+HfQdQLKXPQ/Xw3eJnI/AmctVg==} + engines: {node: '>=12.0.0', parcel: ^2.11.0} + dependencies: + '@parcel/plugin': 2.11.0(@parcel/core@2.11.0) + transitivePeerDependencies: + - '@parcel/core' + + /@parcel/plugin@2.11.0(@parcel/core@2.11.0): + resolution: {integrity: sha512-9npuKBlhnPn7oeUpLJGecceg16GkXbvzbr6MNSZiHhkx3IBeITHQXlZnp2zAjUOFreNsYOfifwEF2S4KsARfBQ==} + engines: {node: '>= 12.0.0'} + dependencies: + '@parcel/types': 2.11.0(@parcel/core@2.11.0) + transitivePeerDependencies: + - '@parcel/core' + + /@parcel/profiler@2.11.0: + resolution: {integrity: sha512-s10SS09prOdwnaAcjK8M5zO8o+zPJJW5oOqXPNdf6KH4NGD/ue7iOk2xM8QLw6ulSwxE7NDt++lyfW3AXgCZwg==} + engines: {node: '>= 12.0.0'} + dependencies: + '@parcel/diagnostic': 2.11.0 + '@parcel/events': 2.11.0 + chrome-trace-event: 1.0.3 + + /@parcel/reporter-cli@2.11.0(@parcel/core@2.11.0): + resolution: {integrity: sha512-hY0iO0f+LifgJHDUIjGQJnxLFSkk2jlbfy+kIaft5oI3/IM+UljecfGO+14XH8mYlqRXXPsT09TJe8ZKQzp4ZQ==} + engines: {node: '>= 12.0.0', parcel: ^2.11.0} + dependencies: + '@parcel/plugin': 2.11.0(@parcel/core@2.11.0) + '@parcel/types': 2.11.0(@parcel/core@2.11.0) + '@parcel/utils': 2.11.0 + chalk: 4.1.2 + cli-progress: 3.12.0 + term-size: 2.2.1 + transitivePeerDependencies: + - '@parcel/core' + dev: false + + /@parcel/reporter-dev-server@2.11.0(@parcel/core@2.11.0): + resolution: {integrity: sha512-T4ue1+oLFNdcd9maw8QWQuxzOS2kX2jOrSvYKwYd9oGnqiAr1rpiHYYKJhHng+PF5ybwWkj8dUJfGh2NoQysJA==} + engines: {node: '>= 12.0.0', parcel: ^2.11.0} + dependencies: + '@parcel/plugin': 2.11.0(@parcel/core@2.11.0) + '@parcel/utils': 2.11.0 + transitivePeerDependencies: + - '@parcel/core' + + /@parcel/reporter-tracer@2.11.0(@parcel/core@2.11.0): + resolution: {integrity: sha512-33q4ftO26OPWHkUpEm0bzzSjW2kHEh6q/JFePwf8W6APTQVruj4mV46+Fh6rxX42ixs92K/QoiE0gYgWZQVDHA==} + engines: {node: '>= 12.0.0', parcel: ^2.11.0} + dependencies: + '@parcel/plugin': 2.11.0(@parcel/core@2.11.0) + '@parcel/utils': 2.11.0 + chrome-trace-event: 1.0.3 + nullthrows: 1.1.1 + transitivePeerDependencies: + - '@parcel/core' + dev: false + + /@parcel/resolver-default@2.11.0(@parcel/core@2.11.0): + resolution: {integrity: sha512-suZNN2lE5W48LPTwAbG7gnj1IeubkCVEm0XspWXcXUtCzglimNJ8PVVBGx171o5CqDpdbGF3AqHjG9N3uOwXag==} + engines: {node: '>= 12.0.0', parcel: ^2.11.0} + dependencies: + '@parcel/node-resolver-core': 3.2.0(@parcel/core@2.11.0) + '@parcel/plugin': 2.11.0(@parcel/core@2.11.0) + transitivePeerDependencies: + - '@parcel/core' + + /@parcel/runtime-browser-hmr@2.11.0(@parcel/core@2.11.0): + resolution: {integrity: sha512-uVwNBtoLMrlPHLvRS05BVhLseduMOpZT36yiIjS0YSBJcC6/otI9AY7ZiDPYmrB5xTqM0R+D554JhPaJHCuocw==} + engines: {node: '>= 12.0.0', parcel: ^2.11.0} + dependencies: + '@parcel/plugin': 2.11.0(@parcel/core@2.11.0) + '@parcel/utils': 2.11.0 + transitivePeerDependencies: + - '@parcel/core' + + /@parcel/runtime-js@2.11.0(@parcel/core@2.11.0): + resolution: {integrity: sha512-fH3nJoexINz7s4cDzp0Vjsx0k1pMYSa5ch38LbbNqCKTermy0pS0zZuvgfLfHFFP+AMRpFQenrF7h7N3bgDmHw==} + engines: {node: '>= 12.0.0', parcel: ^2.11.0} + dependencies: + '@parcel/diagnostic': 2.11.0 + '@parcel/plugin': 2.11.0(@parcel/core@2.11.0) + '@parcel/utils': 2.11.0 + nullthrows: 1.1.1 + transitivePeerDependencies: + - '@parcel/core' + + /@parcel/runtime-react-refresh@2.11.0(@parcel/core@2.11.0): + resolution: {integrity: sha512-Kfnc7gLjhoephLMnjABrkIkzVfzPrpJlxiJFIleY2Fm57YhmCfKsEYxm3lHOutNaYl1VArW0LKClPH/VHG9vfQ==} + engines: {node: '>= 12.0.0', parcel: ^2.11.0} + dependencies: + '@parcel/plugin': 2.11.0(@parcel/core@2.11.0) + '@parcel/utils': 2.11.0 + react-error-overlay: 6.0.9 + react-refresh: 0.9.0 + transitivePeerDependencies: + - '@parcel/core' + + /@parcel/runtime-service-worker@2.11.0(@parcel/core@2.11.0): + resolution: {integrity: sha512-c8MaSpSbXIKuN5sA/g4UsrsH1BtBZ6Em+eSxt9AYbdPtWrW+qwCioNVZj9lugBRUzDMjVfJz0yK59nS42hABvw==} + engines: {node: '>= 12.0.0', parcel: ^2.11.0} + dependencies: + '@parcel/plugin': 2.11.0(@parcel/core@2.11.0) + '@parcel/utils': 2.11.0 + nullthrows: 1.1.1 + transitivePeerDependencies: + - '@parcel/core' + + /@parcel/rust@2.11.0: + resolution: {integrity: sha512-UkLWdHOD8Md2YmJDPsqd3yIs9chhdl/ATfV/B/xdPKGmqtNouYpDCRlq+WxMt3mLoYgHEg9UwrWLTebo2rr2iQ==} + engines: {node: '>= 12.0.0'} + + /@parcel/source-map@2.1.1: + resolution: {integrity: sha512-Ejx1P/mj+kMjQb8/y5XxDUn4reGdr+WyKYloBljpppUy8gs42T+BNoEOuRYqDVdgPc6NxduzIDoJS9pOFfV5Ew==} + engines: {node: ^12.18.3 || >=14} + dependencies: + detect-libc: 1.0.3 + + /@parcel/transformer-babel@2.11.0(@parcel/core@2.11.0): + resolution: {integrity: sha512-WKGblnp7r426VG+cpeQzc6dj/30EoUaYwyl4OEaigQSJizyuPWTBWTz6FUw+ih1/sg37h+D1BIh9C2FsVzpzbw==} + engines: {node: '>= 12.0.0', parcel: ^2.11.0} + dependencies: + '@parcel/diagnostic': 2.11.0 + '@parcel/plugin': 2.11.0(@parcel/core@2.11.0) + '@parcel/source-map': 2.1.1 + '@parcel/utils': 2.11.0 + browserslist: 4.22.3 + json5: 2.2.3 + nullthrows: 1.1.1 + semver: 7.6.0 + transitivePeerDependencies: + - '@parcel/core' + + /@parcel/transformer-css@2.11.0(@parcel/core@2.11.0): + resolution: {integrity: sha512-nFmBulF/ErNoafO87JbVrBavjBMNwE/kahbCRVxc2Mvlphz4F4lBW4eDRS5l4xBqFJaNkHr9R55ehLBBilF4Jw==} + engines: {node: '>= 12.0.0', parcel: ^2.11.0} + dependencies: + '@parcel/diagnostic': 2.11.0 + '@parcel/plugin': 2.11.0(@parcel/core@2.11.0) + '@parcel/source-map': 2.1.1 + '@parcel/utils': 2.11.0 + browserslist: 4.22.3 + lightningcss: 1.23.0 + nullthrows: 1.1.1 + transitivePeerDependencies: + - '@parcel/core' + + /@parcel/transformer-html@2.11.0(@parcel/core@2.11.0): + resolution: {integrity: sha512-90vp7mbvvfqPr9XIINpMcELtywj56f1bxfOkLQgWU1bm22H0FT3i5dqdac++2My0IGDvMwhAEjQfbn4pA579NQ==} + engines: {node: '>= 12.0.0', parcel: ^2.11.0} + dependencies: + '@parcel/diagnostic': 2.11.0 + '@parcel/plugin': 2.11.0(@parcel/core@2.11.0) + '@parcel/rust': 2.11.0 + nullthrows: 1.1.1 + posthtml: 0.16.6 + posthtml-parser: 0.10.2 + posthtml-render: 3.0.0 + semver: 7.6.0 + srcset: 4.0.0 + transitivePeerDependencies: + - '@parcel/core' + + /@parcel/transformer-image@2.11.0(@parcel/core@2.11.0): + resolution: {integrity: sha512-QiZj18UHf3lVFsi65Vz8YbS3ydx9Pe9x8ktMxE1oh9qpznN8lD7gE/Z9DxuTZB84EZ9pKytKwcv5WGXP25xIFg==} + engines: {node: '>= 12.0.0', parcel: ^2.11.0} + peerDependencies: + '@parcel/core': ^2.11.0 + dependencies: + '@parcel/core': 2.11.0 + '@parcel/plugin': 2.11.0(@parcel/core@2.11.0) + '@parcel/utils': 2.11.0 + '@parcel/workers': 2.11.0(@parcel/core@2.11.0) + nullthrows: 1.1.1 + + /@parcel/transformer-js@2.11.0(@parcel/core@2.11.0): + resolution: {integrity: sha512-G1sv0n8/fJqHqwUs0iVnVdmRY0Kh8kWaDkuWcU/GJBHMGhUnLXKdNwxX2Av9UdBL14bU1nTINfr9qOfnQotXWg==} + engines: {node: '>= 12.0.0', parcel: ^2.11.0} + peerDependencies: + '@parcel/core': ^2.11.0 + dependencies: + '@parcel/core': 2.11.0 + '@parcel/diagnostic': 2.11.0 + '@parcel/plugin': 2.11.0(@parcel/core@2.11.0) + '@parcel/rust': 2.11.0 + '@parcel/source-map': 2.1.1 + '@parcel/utils': 2.11.0 + '@parcel/workers': 2.11.0(@parcel/core@2.11.0) + '@swc/helpers': 0.5.6 + browserslist: 4.22.3 + nullthrows: 1.1.1 + regenerator-runtime: 0.13.11 + semver: 7.6.0 + + /@parcel/transformer-json@2.11.0(@parcel/core@2.11.0): + resolution: {integrity: sha512-Wt/wgSBaRWmPL4gpvjkV0bCBRxFOtsuLNzsm8vYA5poxTFhuLY+AoyQ8S2+xXU4VxwBfdppfIr2Ny3SwGs8xbQ==} + engines: {node: '>= 12.0.0', parcel: ^2.11.0} + dependencies: + '@parcel/plugin': 2.11.0(@parcel/core@2.11.0) + json5: 2.2.3 + transitivePeerDependencies: + - '@parcel/core' + + /@parcel/transformer-postcss@2.11.0(@parcel/core@2.11.0): + resolution: {integrity: sha512-Ugy8XHBaUptGotsvwzq7gPCvkCopTIqqZ0JZ40Jmy9slGms8wnx06pNHA1Be/RcJwkJ2TbSu+7ncZdgmP5x5GQ==} + engines: {node: '>= 12.0.0', parcel: ^2.11.0} + dependencies: + '@parcel/diagnostic': 2.11.0 + '@parcel/plugin': 2.11.0(@parcel/core@2.11.0) + '@parcel/rust': 2.11.0 + '@parcel/utils': 2.11.0 + clone: 2.1.2 + nullthrows: 1.1.1 + postcss-value-parser: 4.2.0 + semver: 7.6.0 + transitivePeerDependencies: + - '@parcel/core' + + /@parcel/transformer-posthtml@2.11.0(@parcel/core@2.11.0): + resolution: {integrity: sha512-dMK4p1RRAoIJEjK/Wz9GOLqwHqdD/VQDhMPk+6sUKp5zf2MhSohUstpp5gKsSZivCM3PS2f8k9rgroacJ/ReuA==} + engines: {node: '>= 12.0.0', parcel: ^2.11.0} + dependencies: + '@parcel/plugin': 2.11.0(@parcel/core@2.11.0) + '@parcel/utils': 2.11.0 + nullthrows: 1.1.1 + posthtml: 0.16.6 + posthtml-parser: 0.10.2 + posthtml-render: 3.0.0 + semver: 7.6.0 + transitivePeerDependencies: + - '@parcel/core' + + /@parcel/transformer-raw@2.11.0(@parcel/core@2.11.0): + resolution: {integrity: sha512-2ltp3TgS+cxEqSM1vk5gDtJrYx4KMuRRtbSgSvkdldyOgPhflnLU3/HRz72hXSNGqYOV0/JN0+ocsfPnqR00ug==} + engines: {node: '>= 12.0.0', parcel: ^2.11.0} + dependencies: + '@parcel/plugin': 2.11.0(@parcel/core@2.11.0) + transitivePeerDependencies: + - '@parcel/core' + + /@parcel/transformer-react-refresh-wrap@2.11.0(@parcel/core@2.11.0): + resolution: {integrity: sha512-6pY0CdIgIpXC6XpsDWizf+zLgiuEsJ106HjWLwF7/R72BrvDhLPZ6jRu4UTrnd6bM89KahPw9fZZzjKoA5Efcw==} + engines: {node: '>= 12.0.0', parcel: ^2.11.0} + dependencies: + '@parcel/plugin': 2.11.0(@parcel/core@2.11.0) + '@parcel/utils': 2.11.0 + react-refresh: 0.9.0 + transitivePeerDependencies: + - '@parcel/core' + + /@parcel/transformer-svg@2.11.0(@parcel/core@2.11.0): + resolution: {integrity: sha512-GrTNi04OoQSXsyrB7FqQPeYREscEXFhIBPkyQ0q7WDG/yYynWljiA0kwITCtMjPfv2EDVks292dvM3EcnERRIA==} + engines: {node: '>= 12.0.0', parcel: ^2.11.0} + dependencies: + '@parcel/diagnostic': 2.11.0 + '@parcel/plugin': 2.11.0(@parcel/core@2.11.0) + '@parcel/rust': 2.11.0 + nullthrows: 1.1.1 + posthtml: 0.16.6 + posthtml-parser: 0.10.2 + posthtml-render: 3.0.0 + semver: 7.6.0 + transitivePeerDependencies: + - '@parcel/core' + + /@parcel/types@2.11.0(@parcel/core@2.11.0): + resolution: {integrity: sha512-lN5XlfV9b1s2rli8q1LqsLtu+D4ZwNI3sKmNcL/3tohSfQcF2EgF+MaiANGo9VzXOzoWFHt4dqWjO4OcdyC5tg==} + dependencies: + '@parcel/cache': 2.11.0(@parcel/core@2.11.0) + '@parcel/diagnostic': 2.11.0 + '@parcel/fs': 2.11.0(@parcel/core@2.11.0) + '@parcel/package-manager': 2.11.0(@parcel/core@2.11.0) + '@parcel/source-map': 2.1.1 + '@parcel/workers': 2.11.0(@parcel/core@2.11.0) + utility-types: 3.11.0 + transitivePeerDependencies: + - '@parcel/core' + + /@parcel/utils@2.11.0: + resolution: {integrity: sha512-AcL70cXlIyE7eQdvjQbYxegN5l+skqvlJllxTWg4YkIZe9p8Gmv74jLAeLWh5F+IGl5WRn0TSy9JhNJjIMQGwQ==} + engines: {node: '>= 12.0.0'} + dependencies: + '@parcel/codeframe': 2.11.0 + '@parcel/diagnostic': 2.11.0 + '@parcel/logger': 2.11.0 + '@parcel/markdown-ansi': 2.11.0 + '@parcel/rust': 2.11.0 + '@parcel/source-map': 2.1.1 + chalk: 4.1.2 + nullthrows: 1.1.1 + + /@parcel/watcher-android-arm64@2.4.0: + resolution: {integrity: sha512-+fPtO/GsbYX1LJnCYCaDVT3EOBjvSFdQN9Mrzh9zWAOOfvidPWyScTrHIZHHfJBvlHzNA0Gy0U3NXFA/M7PHUA==} + engines: {node: '>= 10.0.0'} + cpu: [arm64] + os: [android] + requiresBuild: true + optional: true + + /@parcel/watcher-darwin-arm64@2.4.0: + resolution: {integrity: sha512-T/At5pansFuQ8VJLRx0C6C87cgfqIYhW2N/kBfLCUvDhCah0EnLLwaD/6MW3ux+rpgkpQAnMELOCTKlbwncwiA==} + engines: {node: '>= 10.0.0'} + cpu: [arm64] + os: [darwin] + requiresBuild: true + optional: true + + /@parcel/watcher-darwin-x64@2.4.0: + resolution: {integrity: sha512-vZMv9jl+szz5YLsSqEGCMSllBl1gU1snfbRL5ysJU03MEa6gkVy9OMcvXV1j4g0++jHEcvzhs3Z3LpeEbVmY6Q==} + engines: {node: '>= 10.0.0'} + cpu: [x64] + os: [darwin] + requiresBuild: true + optional: true + + /@parcel/watcher-freebsd-x64@2.4.0: + resolution: {integrity: sha512-dHTRMIplPDT1M0+BkXjtMN+qLtqq24sLDUhmU+UxxLP2TEY2k8GIoqIJiVrGWGomdWsy5IO27aDV1vWyQ6gfHA==} + engines: {node: '>= 10.0.0'} + cpu: [x64] + os: [freebsd] + requiresBuild: true + optional: true + + /@parcel/watcher-linux-arm-glibc@2.4.0: + resolution: {integrity: sha512-9NQXD+qk46RwATNC3/UB7HWurscY18CnAPMTFcI9Y8CTbtm63/eex1SNt+BHFinEQuLBjaZwR2Lp+n7pmEJPpQ==} + engines: {node: '>= 10.0.0'} + cpu: [arm] + os: [linux] + requiresBuild: true + optional: true + + /@parcel/watcher-linux-arm64-glibc@2.4.0: + resolution: {integrity: sha512-QuJTAQdsd7PFW9jNGaV9Pw+ZMWV9wKThEzzlY3Lhnnwy7iW23qtQFPql8iEaSFMCVI5StNNmONUopk+MFKpiKg==} + engines: {node: '>= 10.0.0'} + cpu: [arm64] + os: [linux] + requiresBuild: true + optional: true + + /@parcel/watcher-linux-arm64-musl@2.4.0: + resolution: {integrity: sha512-oyN+uA9xcTDo/45bwsd6TFHa7Lc7hKujyMlvwrCLvSckvWogndCEoVYFNfZ6JJ2KNL/6fFiGPcbjp8jJmEh5Ng==} + engines: {node: '>= 10.0.0'} + cpu: [arm64] + os: [linux] + requiresBuild: true + optional: true + + /@parcel/watcher-linux-x64-glibc@2.4.0: + resolution: {integrity: sha512-KphV8awJmxU3q52JQvJot0QMu07CIyEjV+2Tb2ZtbucEgqyRcxOBDMsqp1JNq5nuDXtcCC0uHQICeiEz38dPBQ==} + engines: {node: '>= 10.0.0'} + cpu: [x64] + os: [linux] + requiresBuild: true + optional: true + + /@parcel/watcher-linux-x64-musl@2.4.0: + resolution: {integrity: sha512-7jzcOonpXNWcSijPpKD5IbC6xC7yTibjJw9jviVzZostYLGxbz8LDJLUnLzLzhASPlPGgpeKLtFUMjAAzM+gSA==} + engines: {node: '>= 10.0.0'} + cpu: [x64] + os: [linux] + requiresBuild: true + optional: true + + /@parcel/watcher-win32-arm64@2.4.0: + resolution: {integrity: sha512-NOej2lqlq8bQNYhUMnOD0nwvNql8ToQF+1Zhi9ULZoG+XTtJ9hNnCFfyICxoZLXor4bBPTOnzs/aVVoefYnjIg==} + engines: {node: '>= 10.0.0'} + cpu: [arm64] + os: [win32] + requiresBuild: true + optional: true + + /@parcel/watcher-win32-ia32@2.4.0: + resolution: {integrity: sha512-IO/nM+K2YD/iwjWAfHFMBPz4Zqn6qBDqZxY4j2n9s+4+OuTSRM/y/irksnuqcspom5DjkSeF9d0YbO+qpys+JA==} + engines: {node: '>= 10.0.0'} + cpu: [ia32] + os: [win32] + requiresBuild: true + optional: true + + /@parcel/watcher-win32-x64@2.4.0: + resolution: {integrity: sha512-pAUyUVjfFjWaf/pShmJpJmNxZhbMvJASUpdes9jL6bTEJ+gDxPRSpXTIemNyNsb9AtbiGXs9XduP1reThmd+dA==} + engines: {node: '>= 10.0.0'} + cpu: [x64] + os: [win32] + requiresBuild: true + optional: true + + /@parcel/watcher@2.4.0: + resolution: {integrity: sha512-XJLGVL0DEclX5pcWa2N9SX1jCGTDd8l972biNooLFtjneuGqodupPQh6XseXIBBeVIMaaJ7bTcs3qGvXwsp4vg==} + engines: {node: '>= 10.0.0'} + dependencies: + detect-libc: 1.0.3 + is-glob: 4.0.3 + micromatch: 4.0.5 + node-addon-api: 7.1.0 + optionalDependencies: + '@parcel/watcher-android-arm64': 2.4.0 + '@parcel/watcher-darwin-arm64': 2.4.0 + '@parcel/watcher-darwin-x64': 2.4.0 + '@parcel/watcher-freebsd-x64': 2.4.0 + '@parcel/watcher-linux-arm-glibc': 2.4.0 + '@parcel/watcher-linux-arm64-glibc': 2.4.0 + '@parcel/watcher-linux-arm64-musl': 2.4.0 + '@parcel/watcher-linux-x64-glibc': 2.4.0 + '@parcel/watcher-linux-x64-musl': 2.4.0 + '@parcel/watcher-win32-arm64': 2.4.0 + '@parcel/watcher-win32-ia32': 2.4.0 + '@parcel/watcher-win32-x64': 2.4.0 + + /@parcel/workers@2.11.0(@parcel/core@2.11.0): + resolution: {integrity: sha512-wjybqdSy6Nk0N9iBGsFcp7739W2zvx0WGfVxPVShqhz46pIkPOiFF/iSn+kFu5EmMKTRWeUif42+a6rRZ7pCnQ==} + engines: {node: '>= 12.0.0'} + peerDependencies: + '@parcel/core': ^2.11.0 + dependencies: + '@parcel/core': 2.11.0 + '@parcel/diagnostic': 2.11.0 + '@parcel/logger': 2.11.0 + '@parcel/profiler': 2.11.0 + '@parcel/types': 2.11.0(@parcel/core@2.11.0) + '@parcel/utils': 2.11.0 + nullthrows: 1.1.1 + + /@pkgjs/parseargs@0.11.0: + resolution: {integrity: sha512-+1VkjdD0QBLPodGrJUeqarH8VAIvQODIbwh9XpP5Syisf7YoQgsJKPNFoqqLQlu+VQ/tVSshMR6loPMn8U+dPg==} + engines: {node: '>=14'} + requiresBuild: true + dev: true + optional: true + + /@swc/core-darwin-arm64@1.4.1: + resolution: {integrity: sha512-ePyfx0348UbR4DOAW24TedeJbafnzha8liXFGuQ4bdXtEVXhLfPngprrxKrAddCuv42F9aTxydlF6+adD3FBhA==} + engines: {node: '>=10'} + cpu: [arm64] + os: [darwin] + requiresBuild: true + optional: true + + /@swc/core-darwin-x64@1.4.1: + resolution: {integrity: sha512-eLf4JSe6VkCMdDowjM8XNC5rO+BrgfbluEzAVtKR8L2HacNYukieumN7EzpYCi0uF1BYwu1ku6tLyG2r0VcGxA==} + engines: {node: '>=10'} + cpu: [x64] + os: [darwin] + requiresBuild: true + optional: true + + /@swc/core-linux-arm-gnueabihf@1.4.1: + resolution: {integrity: sha512-K8VtTLWMw+rkN/jDC9o/Q9SMmzdiHwYo2CfgkwVT29NsGccwmNhCQx6XoYiPKyKGIFKt4tdQnJHKUFzxUqQVtQ==} + engines: {node: '>=10'} + cpu: [arm] + os: [linux] + requiresBuild: true + optional: true + + /@swc/core-linux-arm64-gnu@1.4.1: + resolution: {integrity: sha512-0e8p4g0Bfkt8lkiWgcdiENH3RzkcqKtpRXIVNGOmVc0OBkvc2tpm2WTx/eoCnes2HpTT4CTtR3Zljj4knQ4Fvw==} + engines: {node: '>=10'} + cpu: [arm64] + os: [linux] + requiresBuild: true + optional: true + + /@swc/core-linux-arm64-musl@1.4.1: + resolution: {integrity: sha512-b/vWGQo2n7lZVUnSQ7NBq3Qrj85GrAPPiRbpqaIGwOytiFSk8VULFihbEUwDe0rXgY4LDm8z8wkgADZcLnmdUA==} + engines: {node: '>=10'} + cpu: [arm64] + os: [linux] + requiresBuild: true + optional: true + + /@swc/core-linux-x64-gnu@1.4.1: + resolution: {integrity: sha512-AFMQlvkKEdNi1Vk2GFTxxJzbICttBsOQaXa98kFTeWTnFFIyiIj2w7Sk8XRTEJ/AjF8ia8JPKb1zddBWr9+bEQ==} + engines: {node: '>=10'} + cpu: [x64] + os: [linux] + requiresBuild: true + optional: true + + /@swc/core-linux-x64-musl@1.4.1: + resolution: {integrity: sha512-QX2MxIECX1gfvUVZY+jk528/oFkS9MAl76e3ZRvG2KC/aKlCQL0KSzcTSm13mOxkDKS30EaGRDRQWNukGpMeRg==} + engines: {node: '>=10'} + cpu: [x64] + os: [linux] + requiresBuild: true + optional: true + + /@swc/core-win32-arm64-msvc@1.4.1: + resolution: {integrity: sha512-OklkJYXXI/tntD2zaY8i3iZldpyDw5q+NAP3k9OlQ7wXXf37djRsHLV0NW4+ZNHBjE9xp2RsXJ0jlOJhfgGoFA==} + engines: {node: '>=10'} + cpu: [arm64] + os: [win32] + requiresBuild: true + optional: true + + /@swc/core-win32-ia32-msvc@1.4.1: + resolution: {integrity: sha512-MBuc3/QfKX9FnLOU7iGN+6yHRTQaPQ9WskiC8s8JFiKQ+7I2p25tay2RplR9dIEEGgVAu6L7auv96LbNTh+FaA==} + engines: {node: '>=10'} + cpu: [ia32] + os: [win32] + requiresBuild: true + optional: true + + /@swc/core-win32-x64-msvc@1.4.1: + resolution: {integrity: sha512-lu4h4wFBb/bOK6N2MuZwg7TrEpwYXgpQf5R7ObNSXL65BwZ9BG8XRzD+dLJmALu8l5N08rP/TrpoKRoGT4WSxw==} + engines: {node: '>=10'} + cpu: [x64] + os: [win32] + requiresBuild: true + optional: true + + /@swc/core@1.4.1: + resolution: {integrity: sha512-3y+Y8js+e7BbM16iND+6Rcs3jdiL28q3iVtYsCviYSSpP2uUVKkp5sJnCY4pg8AaVvyN7CGQHO7gLEZQ5ByozQ==} + engines: {node: '>=10'} + requiresBuild: true + peerDependencies: + '@swc/helpers': ^0.5.0 + peerDependenciesMeta: + '@swc/helpers': + optional: true + dependencies: + '@swc/counter': 0.1.3 + '@swc/types': 0.1.5 + optionalDependencies: + '@swc/core-darwin-arm64': 1.4.1 + '@swc/core-darwin-x64': 1.4.1 + '@swc/core-linux-arm-gnueabihf': 1.4.1 + '@swc/core-linux-arm64-gnu': 1.4.1 + '@swc/core-linux-arm64-musl': 1.4.1 + '@swc/core-linux-x64-gnu': 1.4.1 + '@swc/core-linux-x64-musl': 1.4.1 + '@swc/core-win32-arm64-msvc': 1.4.1 + '@swc/core-win32-ia32-msvc': 1.4.1 + '@swc/core-win32-x64-msvc': 1.4.1 + + /@swc/counter@0.1.3: + resolution: {integrity: sha512-e2BR4lsJkkRlKZ/qCHPw9ZaSxc0MVUd7gtbtaB7aMvHeJVYe8sOB8DBZkP2DtISHGSku9sCK6T6cnY0CtXrOCQ==} + + /@swc/helpers@0.5.6: + resolution: {integrity: sha512-aYX01Ke9hunpoCexYAgQucEpARGQ5w/cqHFrIR+e9gdKb1QWTsVJuTJ2ozQzIAxLyRQe/m+2RqzkyOOGiMKRQA==} + dependencies: + tslib: 2.6.2 + + /@swc/types@0.1.5: + resolution: {integrity: sha512-myfUej5naTBWnqOCc/MdVOLVjXUXtIA+NpDrDBKJtLLg2shUjBu3cZmB/85RyitKc55+lUUyl7oRfLOvkr2hsw==} + + /@trysound/sax@0.2.0: + resolution: {integrity: sha512-L7z9BgrNEcYyUYtF+HaEfiS5ebkh9jXqbszz7pC0hRBPaatV0XjSD3+eHrpqFemQfgwiFF0QPIarnIihIDn7OA==} + engines: {node: '>=10.13.0'} + + /@ungap/structured-clone@1.2.0: + resolution: {integrity: sha512-zuVdFrMJiuCDQUMCzQaD6KL28MjnqqN8XnAqiEq9PNm/hCPTSGfrXCOfwj1ow4LFb/tNymJPwsNbVePc1xFqrQ==} + dev: true + + /abortcontroller-polyfill@1.7.5: + resolution: {integrity: sha512-JMJ5soJWP18htbbxJjG7bG6yuI6pRhgJ0scHHTfkUjf6wjP912xZWvM+A4sJK3gqd9E8fcPbDnOefbA9Th/FIQ==} + + /acorn-jsx@5.3.2(acorn@8.11.3): + resolution: {integrity: sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==} + peerDependencies: + acorn: ^6.0.0 || ^7.0.0 || ^8.0.0 + dependencies: + acorn: 8.11.3 + dev: true + + /acorn@8.11.3: + resolution: {integrity: sha512-Y9rRfJG5jcKOE0CLisYbojUjIrIEE7AGMzA/Sm4BslANhbS+cDMpgBdcPT91oJ7OuJ9hYJBx59RjbhxVnrF8Xg==} + engines: {node: '>=0.4.0'} + hasBin: true + dev: true + + /ajv@6.12.6: + resolution: {integrity: sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==} + dependencies: + fast-deep-equal: 3.1.3 + fast-json-stable-stringify: 2.1.0 + json-schema-traverse: 0.4.1 + uri-js: 4.4.1 + dev: true + + /ajv@8.12.0: + resolution: {integrity: sha512-sRu1kpcO9yLtYxBKvqfTeh9KzZEwO3STyX1HT+4CaDzC6HpTGYhIhPIzj9XuKU7KYDwnaeh5hcOwjy1QuJzBPA==} + dependencies: + fast-deep-equal: 3.1.3 + json-schema-traverse: 1.0.0 + require-from-string: 2.0.2 + uri-js: 4.4.1 + dev: true + + /ansi-regex@5.0.1: + resolution: {integrity: sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==} + engines: {node: '>=8'} + + /ansi-regex@6.0.1: + resolution: {integrity: sha512-n5M855fKb2SsfMIiFFoVrABHJC8QtHwVx+mHWP3QcEqBHYienj5dHSgjbxtC0WEZXYt4wcD6zrQElDPhFuZgfA==} + engines: {node: '>=12'} + dev: true + + /ansi-styles@3.2.1: + resolution: {integrity: sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==} + engines: {node: '>=4'} + dependencies: + color-convert: 1.9.3 + + /ansi-styles@4.3.0: + resolution: {integrity: sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==} + engines: {node: '>=8'} + dependencies: + color-convert: 2.0.1 + + /ansi-styles@6.2.1: + resolution: {integrity: sha512-bN798gFfQX+viw3R7yrGWRqnrN2oRkEkUjjl4JNn4E8GxxbjtG3FbrEIIY3l8/hrwUwIeCZvi4QuOTP4MErVug==} + engines: {node: '>=12'} + dev: true + + /any-promise@1.3.0: + resolution: {integrity: sha512-7UvmKalWRt1wgjL1RrGxoSJW/0QZFIegpeGvZG9kjp8vrRu55XTHbwnqq2GpXm9uLbcuhxm3IqX9OB4MZR1b2A==} + dev: true + + /anymatch@3.1.3: + resolution: {integrity: sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==} + engines: {node: '>= 8'} + dependencies: + normalize-path: 3.0.0 + picomatch: 2.3.1 + dev: true + + /arg@5.0.2: + resolution: {integrity: sha512-PYjyFOLKQ9y57JvQ6QLo8dAgNqswh8M1RMJYdQduT6xbWSgK36P/Z/v+p888pM69jMMfS8Xd8F6I1kQ/I9HUGg==} + dev: true + + /argparse@2.0.1: + resolution: {integrity: sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==} + + /array-union@2.1.0: + resolution: {integrity: sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw==} + engines: {node: '>=8'} + dev: true + + /astral-regex@2.0.0: + resolution: {integrity: sha512-Z7tMw1ytTXt5jqMcOP+OQteU1VuNK9Y02uuJtKQ1Sv69jXQKKg5cibLwGJow8yzZP+eAc18EmLGPal0bp36rvQ==} + engines: {node: '>=8'} + dev: true + + /async@3.2.3: + resolution: {integrity: sha512-spZRyzKL5l5BZQrr/6m/SqFdBN0q3OCI0f9rjfBzCMBIP4p75P620rR3gTmaksNOhmzgdxcaxdNfMy6anrbM0g==} + dev: true + + /balanced-match@1.0.2: + resolution: {integrity: sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==} + dev: true + + /balanced-match@2.0.0: + resolution: {integrity: sha512-1ugUSr8BHXRnK23KfuYS+gVMC3LB8QGH9W1iGtDPsNWoQbgtXSExkBu2aDR4epiGWZOjZsj6lDl/N/AqqTC3UA==} + dev: true + + /base-x@3.0.9: + resolution: {integrity: sha512-H7JU6iBHTal1gp56aKoaa//YUxEaAOUiydvrV/pILqIHXTtqxSkATOnDA2u+jZ/61sD+L/412+7kzXRtWukhpQ==} + dependencies: + safe-buffer: 5.2.1 + + /binary-extensions@2.2.0: + resolution: {integrity: sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA==} + engines: {node: '>=8'} + dev: true + + /boolbase@1.0.0: + resolution: {integrity: sha512-JZOSA7Mo9sNGB8+UjSgzdLtokWAky1zbztM3WRLCbZ70/3cTANmQmOdR7y2g+J0e2WXywy1yS468tY+IruqEww==} + + /brace-expansion@1.1.11: + resolution: {integrity: sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==} + 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==} + engines: {node: '>=8'} + dependencies: + fill-range: 7.0.1 + + /browserslist@4.22.3: + resolution: {integrity: sha512-UAp55yfwNv0klWNapjs/ktHoguxuQNGnOzxYmfnXIS+8AsRDZkSDxg7R1AX3GKzn078SBI5dzwzj/Yx0Or0e3A==} + engines: {node: ^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7} + hasBin: true + dependencies: + caniuse-lite: 1.0.30001587 + electron-to-chromium: 1.4.668 + node-releases: 2.0.14 + update-browserslist-db: 1.0.13(browserslist@4.22.3) + + /callsites@3.1.0: + resolution: {integrity: sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==} + engines: {node: '>=6'} + + /camelcase-css@2.0.1: + resolution: {integrity: sha512-QOSvevhslijgYwRx6Rv7zKdMF8lbRmx+uQGx2+vDc+KI/eBnsy9kit5aj23AgGu3pa4t9AgwbnXWqS+iOY+2aA==} + engines: {node: '>= 6'} + dev: true + + /caniuse-lite@1.0.30001587: + resolution: {integrity: sha512-HMFNotUmLXn71BQxg8cijvqxnIAofforZOwGsxyXJ0qugTdspUF4sPSJ2vhgprHCB996tIDzEq1ubumPDV8ULA==} + + /chalk@2.4.2: + resolution: {integrity: sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==} + engines: {node: '>=4'} + dependencies: + ansi-styles: 3.2.1 + escape-string-regexp: 1.0.5 + supports-color: 5.5.0 + + /chalk@4.1.2: + resolution: {integrity: sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==} + engines: {node: '>=10'} + dependencies: + ansi-styles: 4.3.0 + supports-color: 7.2.0 + + /chokidar@3.6.0: + resolution: {integrity: sha512-7VT13fmjotKpGipCW9JEQAusEPE+Ei8nl6/g4FBAmIm0GOOLMua9NDDo/DWp0ZAxCr3cPq5ZpBqmPAQgDda2Pw==} + engines: {node: '>= 8.10.0'} + dependencies: + anymatch: 3.1.3 + braces: 3.0.2 + glob-parent: 5.1.2 + is-binary-path: 2.1.0 + is-glob: 4.0.3 + normalize-path: 3.0.0 + readdirp: 3.6.0 + optionalDependencies: + fsevents: 2.3.3 + dev: true + + /chrome-trace-event@1.0.3: + resolution: {integrity: sha512-p3KULyQg4S7NIHixdwbGX+nFHkoBiA4YQmyWtjb8XngSKV124nJmRysgAeujbUVb15vh+RvFUfCPqU7rXk+hZg==} + engines: {node: '>=6.0'} + + /cli-progress@3.12.0: + resolution: {integrity: sha512-tRkV3HJ1ASwm19THiiLIXLO7Im7wlTuKnvkYaTkyoAPefqjNg7W7DHKUlGRxy9vxDvbyCYQkQozvptuMkGCg8A==} + engines: {node: '>=4'} + dependencies: + string-width: 4.2.3 + dev: false + + /clone@2.1.2: + resolution: {integrity: sha512-3Pe/CF1Nn94hyhIYpjtiLhdCoEoz0DqQ+988E9gmeEdQZlojxnOb74wctFyuwWQHzqyf9X7C7MG8juUpqBJT8w==} + engines: {node: '>=0.8'} + + /color-convert@1.9.3: + resolution: {integrity: sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==} + dependencies: + color-name: 1.1.3 + + /color-convert@2.0.1: + resolution: {integrity: sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==} + engines: {node: '>=7.0.0'} + dependencies: + color-name: 1.1.4 + + /color-name@1.1.3: + resolution: {integrity: sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==} + + /color-name@1.1.4: + resolution: {integrity: sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==} + + /colord@2.9.3: + resolution: {integrity: sha512-jeC1axXpnb0/2nn/Y1LPuLdgXBLH7aDcHu4KEKfqw3CUhX7ZpfBSlPKyqXE6btIgEzfWtrX3/tyBCaCvXvMkOw==} + dev: true + + /commander@4.1.1: + resolution: {integrity: sha512-NOKm8xhkzAjzFx8B2v5OAHT+u5pRQc2UCa2Vq9jYL/31o2wi9mxBA7LIFs3sV5VSC49z6pEhfbMULvShKj26WA==} + engines: {node: '>= 6'} + dev: true + + /commander@7.2.0: + resolution: {integrity: sha512-QrWXB+ZQSVPmIWIhtEO9H+gwHaMGYiF5ChvoJ+K9ZGHG/sVsa6yiesAD1GC/x46sET00Xlwo1u49RVVVzvcSkw==} + engines: {node: '>= 10'} + + /commander@9.5.0: + resolution: {integrity: sha512-KRs7WVDKg86PWiuAqhDrAQnTXZKraVcCc6vFdL14qrZ/DcWwuRo7VoiYXalXO7S5GKpqYiVEwCbgFDfxNHKJBQ==} + engines: {node: ^12.20.0 || >=14} + dev: true + + /concat-map@0.0.1: + resolution: {integrity: sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==} + dev: true + + /cosmiconfig@8.3.6: + resolution: {integrity: sha512-kcZ6+W5QzcJ3P1Mt+83OUv/oHFqZHIx8DuxG6eZ5RGMERoLqp4BuGjhHLYGK+Kf5XVkQvqBSmAy/nGWN3qDgEA==} + engines: {node: '>=14'} + peerDependencies: + typescript: '>=4.9.5' + peerDependenciesMeta: + typescript: + optional: true + dependencies: + import-fresh: 3.3.0 + js-yaml: 4.1.0 + parse-json: 5.2.0 + path-type: 4.0.0 + + /cosmiconfig@9.0.0: + resolution: {integrity: sha512-itvL5h8RETACmOTFc4UfIyB2RfEHi71Ax6E/PivVxq9NseKbOWpeyHEOIbmAw1rs8Ak0VursQNww7lf7YtUwzg==} + engines: {node: '>=14'} + peerDependencies: + typescript: '>=4.9.5' + peerDependenciesMeta: + typescript: + optional: true + dependencies: + env-paths: 2.2.1 + import-fresh: 3.3.0 + js-yaml: 4.1.0 + parse-json: 5.2.0 + dev: true + + /cross-spawn@7.0.3: + resolution: {integrity: sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==} + engines: {node: '>= 8'} + dependencies: + 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==} + engines: {node: '>=12 || >=16'} + dev: true + + /css-select@4.3.0: + resolution: {integrity: sha512-wPpOYtnsVontu2mODhA19JrqWxNsfdatRKd64kmpRbQgh1KtItko5sTnEpPdpSaJszTOhEMlF/RPz28qj4HqhQ==} + dependencies: + boolbase: 1.0.0 + css-what: 6.1.0 + domhandler: 4.3.1 + domutils: 2.8.0 + nth-check: 2.1.1 + + /css-tree@1.1.3: + resolution: {integrity: sha512-tRpdppF7TRazZrjJ6v3stzv93qxRcSsFmW6cX0Zm2NVKpxE1WV1HblnghVv9TreireHkqI/VDEsfolRF1p6y7Q==} + engines: {node: '>=8.0.0'} + dependencies: + mdn-data: 2.0.14 + source-map: 0.6.1 + + /css-tree@2.3.1: + resolution: {integrity: sha512-6Fv1DV/TYw//QF5IzQdqsNDjx/wc8TrMBZsqjL9eW01tWb7R7k/mq+/VXfJCl7SoD5emsJop9cOByJZfs8hYIw==} + engines: {node: ^10 || ^12.20.0 || ^14.13.0 || >=15.0.0} + dependencies: + mdn-data: 2.0.30 + source-map-js: 1.0.2 + dev: true + + /css-what@6.1.0: + resolution: {integrity: sha512-HTUrgRJ7r4dsZKU6GjmpfRK1O76h97Z8MfS1G0FozR+oF2kG6Vfe8JE6zwrkbxigziPHinCJ+gCPjA9EaBDtRw==} + engines: {node: '>= 6'} + + /cssesc@3.0.0: + resolution: {integrity: sha512-/Tb/JcjK111nNScGob5MNtsntNM1aCNUDipB/TkwZFhyDrrE47SOx/18wF2bbjgc3ZzCSKW1T5nt5EbFoAz/Vg==} + engines: {node: '>=4'} + hasBin: true + dev: true + + /csso@4.2.0: + resolution: {integrity: sha512-wvlcdIbf6pwKEk7vHj8/Bkc0B4ylXZruLvOgs9doS5eOsOpuodOV2zJChSpkp+pRpYQLQMeF04nr3Z68Sta9jA==} + engines: {node: '>=8.0.0'} + dependencies: + css-tree: 1.1.3 + + /debug@4.3.4: + resolution: {integrity: sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==} + engines: {node: '>=6.0'} + peerDependencies: + supports-color: '*' + peerDependenciesMeta: + supports-color: + optional: true + dependencies: + ms: 2.1.2 + dev: true + + /deep-is@0.1.4: + resolution: {integrity: sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==} + dev: true + + /detect-libc@1.0.3: + resolution: {integrity: sha512-pGjwhsmsp4kL2RTz08wcOlGN83otlqHeD/Z5T8GXZB+/YcpQ/dgo+lbU8ZsGxV0HIvqqxo9l7mqYwyYMD9bKDg==} + engines: {node: '>=0.10'} + hasBin: true + + /detect-libc@2.0.2: + resolution: {integrity: sha512-UX6sGumvvqSaXgdKGUsgZWqcUyIXZ/vZTrlRT/iobiKhGL0zL4d3osHj3uqllWJK+i+sixDS/3COVEOFbupFyw==} + engines: {node: '>=8'} + + /didyoumean@1.2.2: + resolution: {integrity: sha512-gxtyfqMg7GKyhQmb056K7M3xszy/myH8w+B4RT+QXBQsvAOdc3XymqDDPHx1BgPgsdAA5SIifona89YtRATDzw==} + dev: true + + /dir-glob@3.0.1: + resolution: {integrity: sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA==} + engines: {node: '>=8'} + dependencies: + path-type: 4.0.0 + dev: true + + /dlv@1.1.3: + resolution: {integrity: sha512-+HlytyjlPKnIG8XuRG8WvmBP8xs8P71y+SKKS6ZXWoEgLuePxtDoUEiH7WkdePWrQ5JBpE6aoVqfZfJUQkjXwA==} + dev: true + + /doctrine@3.0.0: + resolution: {integrity: sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w==} + engines: {node: '>=6.0.0'} + dependencies: + esutils: 2.0.3 + dev: true + + /dom-serializer@1.4.1: + resolution: {integrity: sha512-VHwB3KfrcOOkelEG2ZOfxqLZdfkil8PtJi4P8N2MMXucZq2yLp75ClViUlOVwyoHEDjYU433Aq+5zWP61+RGag==} + dependencies: + domelementtype: 2.3.0 + domhandler: 4.3.1 + entities: 2.2.0 + + /domelementtype@2.3.0: + resolution: {integrity: sha512-OLETBj6w0OsagBwdXnPdN0cnMfF9opN69co+7ZrbfPGrdpPVNBUj02spi6B1N7wChLQiPn4CSH/zJvXw56gmHw==} + + /domhandler@4.3.1: + resolution: {integrity: sha512-GrwoxYN+uWlzO8uhUXRl0P+kHE4GtVPfYzVLcUxPL7KNdHKj66vvlhiweIHqYYXWlw+T8iLMp42Lm67ghw4WMQ==} + engines: {node: '>= 4'} + dependencies: + domelementtype: 2.3.0 + + /domutils@2.8.0: + resolution: {integrity: sha512-w96Cjofp72M5IIhpjgobBimYEfoPjx1Vx0BSX9P30WBdZW2WIKU0T1Bd0kz2eNZ9ikjKgHbEyKx8BB6H1L3h3A==} + dependencies: + dom-serializer: 1.4.1 + domelementtype: 2.3.0 + domhandler: 4.3.1 + + /dotenv-expand@5.1.0: + resolution: {integrity: sha512-YXQl1DSa4/PQyRfgrv6aoNjhasp/p4qs9FjJ4q4cQk+8m4r6k4ZSiEyytKG8f8W9gi8WsQtIObNmKd+tMzNTmA==} + + /dotenv@7.0.0: + resolution: {integrity: sha512-M3NhsLbV1i6HuGzBUH8vXrtxOk+tWmzWKDMbAVSUp3Zsjm7ywFeuwrUXhmhQyRK1q5B5GGy7hcXPbj3bnfZg2g==} + engines: {node: '>=6'} + + /eastasianwidth@0.2.0: + resolution: {integrity: sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA==} + dev: true + + /electron-to-chromium@1.4.668: + resolution: {integrity: sha512-ZOBocMYCehr9W31+GpMclR+KBaDZOoAEabLdhpZ8oU1JFDwIaFY0UDbpXVEUFc0BIP2O2Qn3rkfCjQmMR4T/bQ==} + + /emoji-regex@8.0.0: + resolution: {integrity: sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==} + + /emoji-regex@9.2.2: + resolution: {integrity: sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==} + dev: true + + /entities@2.2.0: + resolution: {integrity: sha512-p92if5Nz619I0w+akJrLZH0MX0Pb5DX39XOwQTtXSdQQOaYH03S1uIQp4mhOZtAXrxq4ViO67YTiLBo2638o9A==} + + /entities@3.0.1: + resolution: {integrity: sha512-WiyBqoomrwMdFG1e0kqvASYfnlb0lp8M5o5Fw2OFq1hNZxxcNk8Ik0Xm7LxzBhuidnZB/UtBqVCgUz3kBOP51Q==} + engines: {node: '>=0.12'} + + /env-paths@2.2.1: + resolution: {integrity: sha512-+h1lkLKhZMTYjog1VEpJNG7NZJWcuc2DDk/qsqSTRRCOXiLjeQ1d1/udrUGhqMxUgAlwKNZ0cf2uqan5GLuS2A==} + engines: {node: '>=6'} + dev: true + + /error-ex@1.3.2: + resolution: {integrity: sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==} + dependencies: + is-arrayish: 0.2.1 + + /escalade@3.1.2: + resolution: {integrity: sha512-ErCHMCae19vR8vQGe50xIsVomy19rg6gFu3+r3jkEO46suLMWBksvVyoGgQV+jOfl84ZSOSlmv6Gxa89PmTGmA==} + engines: {node: '>=6'} + + /escape-string-regexp@1.0.5: + resolution: {integrity: sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==} + engines: {node: '>=0.8.0'} + + /escape-string-regexp@4.0.0: + resolution: {integrity: sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==} + engines: {node: '>=10'} + dev: true + + /eslint-scope@7.2.2: + resolution: {integrity: sha512-dOt21O7lTMhDM+X9mB4GX+DZrZtCUJPL/wlcTqxyrx5IvO0IYtILdtrQGQp+8n5S0gwSVmOf9NQrjMOgfQZlIg==} + engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + dependencies: + esrecurse: 4.3.0 + estraverse: 5.3.0 + dev: true + + /eslint-visitor-keys@3.4.3: + resolution: {integrity: sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag==} + engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + dev: true + + /eslint@8.56.0: + resolution: {integrity: sha512-Go19xM6T9puCOWntie1/P997aXxFsOi37JIHRWI514Hc6ZnaHGKY9xFhrU65RT6CcBEzZoGG1e6Nq+DT04ZtZQ==} + engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + hasBin: true + dependencies: + '@eslint-community/eslint-utils': 4.4.0(eslint@8.56.0) + '@eslint-community/regexpp': 4.10.0 + '@eslint/eslintrc': 2.1.4 + '@eslint/js': 8.56.0 + '@humanwhocodes/config-array': 0.11.14 + '@humanwhocodes/module-importer': 1.0.1 + '@nodelib/fs.walk': 1.2.8 + '@ungap/structured-clone': 1.2.0 + ajv: 6.12.6 + chalk: 4.1.2 + cross-spawn: 7.0.3 + debug: 4.3.4 + doctrine: 3.0.0 + escape-string-regexp: 4.0.0 + eslint-scope: 7.2.2 + eslint-visitor-keys: 3.4.3 + espree: 9.6.1 + esquery: 1.5.0 + esutils: 2.0.3 + fast-deep-equal: 3.1.3 + file-entry-cache: 6.0.1 + find-up: 5.0.0 + glob-parent: 6.0.2 + globals: 13.24.0 + graphemer: 1.4.0 + ignore: 5.3.1 + imurmurhash: 0.1.4 + is-glob: 4.0.3 + is-path-inside: 3.0.3 + js-yaml: 4.1.0 + json-stable-stringify-without-jsonify: 1.0.1 + levn: 0.4.1 + lodash.merge: 4.6.2 + minimatch: 3.1.2 + natural-compare: 1.4.0 + optionator: 0.9.3 + strip-ansi: 6.0.1 + text-table: 0.2.0 + transitivePeerDependencies: + - supports-color + dev: true + + /espree@9.6.1: + resolution: {integrity: sha512-oruZaFkjorTpF32kDSI5/75ViwGeZginGGy2NoOSg3Q9bnwlnmDm4HLnkl0RE3n+njDXR037aY1+x58Z/zFdwQ==} + engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + dependencies: + acorn: 8.11.3 + acorn-jsx: 5.3.2(acorn@8.11.3) + eslint-visitor-keys: 3.4.3 + dev: true + + /esquery@1.5.0: + resolution: {integrity: sha512-YQLXUplAwJgCydQ78IMJywZCceoqk1oH01OERdSAJc/7U2AylwjhSCLDEtqwg811idIS/9fIU5GjG73IgjKMVg==} + engines: {node: '>=0.10'} + dependencies: + estraverse: 5.3.0 + dev: true + + /esrecurse@4.3.0: + resolution: {integrity: sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==} + engines: {node: '>=4.0'} + dependencies: + estraverse: 5.3.0 + dev: true + + /estraverse@5.3.0: + resolution: {integrity: sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==} + engines: {node: '>=4.0'} + dev: true + + /esutils@2.0.3: + resolution: {integrity: sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==} + engines: {node: '>=0.10.0'} + dev: true + + /fast-deep-equal@3.1.3: + resolution: {integrity: sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==} + dev: true + + /fast-glob@3.3.2: + resolution: {integrity: sha512-oX2ruAFQwf/Orj8m737Y5adxDQO0LAB7/S5MnxCdTNDd4p6BsyIVsv9JQsATbTSq8KHRpLwIHbVlUNatxd+1Ow==} + engines: {node: '>=8.6.0'} + dependencies: + '@nodelib/fs.stat': 2.0.5 + '@nodelib/fs.walk': 1.2.8 + glob-parent: 5.1.2 + merge2: 1.4.1 + micromatch: 4.0.5 + dev: true + + /fast-json-stable-stringify@2.1.0: + resolution: {integrity: sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==} + dev: true + + /fast-levenshtein@2.0.6: + resolution: {integrity: sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==} + dev: true + + /fastest-levenshtein@1.0.16: + resolution: {integrity: sha512-eRnCtTTtGZFpQCwhJiUOuxPQWRXVKYDn0b2PeHfXL6/Zi53SLAzAHfVhVWK2AryC/WH05kGfxhFIPvTF0SXQzg==} + engines: {node: '>= 4.9.1'} + dev: true + + /fastq@1.17.1: + resolution: {integrity: sha512-sRVD3lWVIXWg6By68ZN7vho9a1pQcN/WBFaAAsDDFzlJjvoGx0P8z7V1t72grFJfJhu3YPZBuu25f7Kaw2jN1w==} + dependencies: + reusify: 1.0.4 + dev: true + + /file-entry-cache@6.0.1: + resolution: {integrity: sha512-7Gps/XWymbLk2QLYK4NzpMOrYjMhdIxXuIvy2QBsLE6ljuodKvdkWs/cpyJJ3CVIVpH0Oi1Hvg1ovbMzLdFBBg==} + engines: {node: ^10.12.0 || >=12.0.0} + dependencies: + flat-cache: 3.2.0 + dev: true + + /file-entry-cache@8.0.0: + resolution: {integrity: sha512-XXTUwCvisa5oacNGRP9SfNtYBNAMi+RPwBFmblZEF7N7swHYQS6/Zfk7SRwx4D5j3CH211YNRco1DEMNVfZCnQ==} + engines: {node: '>=16.0.0'} + dependencies: + flat-cache: 4.0.0 + dev: true + + /fill-range@7.0.1: + resolution: {integrity: sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==} + engines: {node: '>=8'} + dependencies: + to-regex-range: 5.0.1 + + /find-up@5.0.0: + resolution: {integrity: sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==} + engines: {node: '>=10'} + dependencies: + locate-path: 6.0.0 + path-exists: 4.0.0 + dev: true + + /flat-cache@3.2.0: + resolution: {integrity: sha512-CYcENa+FtcUKLmhhqyctpclsq7QF38pKjZHsGNiSQF5r4FtoKDWabFDl3hzaEQMvT1LHEysw5twgLvpYYb4vbw==} + engines: {node: ^10.12.0 || >=12.0.0} + dependencies: + flatted: 3.2.9 + keyv: 4.5.4 + rimraf: 3.0.2 + dev: true + + /flat-cache@4.0.0: + resolution: {integrity: sha512-EryKbCE/wxpxKniQlyas6PY1I9vwtF3uCBweX+N8KYTCn3Y12RTGtQAJ/bd5pl7kxUAc8v/R3Ake/N17OZiFqA==} + engines: {node: '>=16'} + dependencies: + flatted: 3.2.9 + keyv: 4.5.4 + rimraf: 5.0.5 + dev: true + + /flatted@3.2.9: + resolution: {integrity: sha512-36yxDn5H7OFZQla0/jFJmbIKTdZAQHngCedGxiMmpNfEZM0sdEeT+WczLQrjK6D7o2aiyLYDnkw0R3JK0Qv1RQ==} + dev: true + + /foreground-child@3.1.1: + resolution: {integrity: sha512-TMKDUnIte6bfb5nWv7V/caI169OHgvwjb7V4WkeUvbQQdjr5rWKqHFiKWb/fcOwB+CzBT+qbWjvj+DVwRskpIg==} + engines: {node: '>=14'} + dependencies: + cross-spawn: 7.0.3 + signal-exit: 4.1.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==} + engines: {node: ^8.16.0 || ^10.6.0 || >=11.0.0} + os: [darwin] + requiresBuild: true + dev: true + optional: true + + /function-bind@1.1.2: + resolution: {integrity: sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==} + dev: true + + /get-port@4.2.0: + resolution: {integrity: sha512-/b3jarXkH8KJoOMQc3uVGHASwGLPq3gSFJ7tgJm2diza+bydJPTGOibin2steecKeOylE8oY2JERlVWkAJO6yw==} + engines: {node: '>=6'} + dev: false + + /glob-parent@5.1.2: + resolution: {integrity: sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==} + engines: {node: '>= 6'} + dependencies: + is-glob: 4.0.3 + dev: true + + /glob-parent@6.0.2: + resolution: {integrity: sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==} + engines: {node: '>=10.13.0'} + dependencies: + is-glob: 4.0.3 + dev: true + + /glob@10.3.10: + resolution: {integrity: sha512-fa46+tv1Ak0UPK1TOy/pZrIybNNt4HCv7SDzwyfiOZkvZLEbjsZkJBPtDHVshZjbecAoAGSC20MjLDG/qr679g==} + engines: {node: '>=16 || 14 >=14.17'} + hasBin: true + dependencies: + foreground-child: 3.1.1 + jackspeak: 2.3.6 + minimatch: 9.0.3 + minipass: 7.0.4 + path-scurry: 1.10.1 + dev: true + + /glob@7.2.3: + resolution: {integrity: sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==} + dependencies: + fs.realpath: 1.0.0 + inflight: 1.0.6 + inherits: 2.0.4 + minimatch: 3.1.2 + once: 1.4.0 + path-is-absolute: 1.0.1 + dev: true + + /global-modules@2.0.0: + resolution: {integrity: sha512-NGbfmJBp9x8IxyJSd1P+otYK8vonoJactOogrVfFRIAEY1ukil8RSKDz2Yo7wh1oihl51l/r6W4epkeKJHqL8A==} + engines: {node: '>=6'} + dependencies: + global-prefix: 3.0.0 + dev: true + + /global-prefix@3.0.0: + resolution: {integrity: sha512-awConJSVCHVGND6x3tmMaKcQvwXLhjdkmomy2W+Goaui8YPgYgXJZewhg3fWC+DlfqqQuWg8AwqjGTD2nAPVWg==} + engines: {node: '>=6'} + dependencies: + ini: 1.3.8 + kind-of: 6.0.3 + which: 1.3.1 + dev: true + + /globals@13.24.0: + resolution: {integrity: sha512-AhO5QUcj8llrbG09iWhPU2B204J1xnPeL8kQmVorSsy+Sjj1sk8gIyh6cUocGmH4L0UuhAJy+hJMRA4mgA4mFQ==} + engines: {node: '>=8'} + dependencies: + type-fest: 0.20.2 + + /globby@11.1.0: + resolution: {integrity: sha512-jhIXaOzy1sb8IyocaruWSn1TjmnBVs8Ayhcy83rmxNJ8q2uWKCAj3CnJY+KpGSXCueAPc0i05kVvVKtP1t9S3g==} + engines: {node: '>=10'} + dependencies: + array-union: 2.1.0 + dir-glob: 3.0.1 + fast-glob: 3.3.2 + ignore: 5.3.1 + merge2: 1.4.1 + slash: 3.0.0 + dev: true + + /globjoin@0.1.4: + resolution: {integrity: sha512-xYfnw62CKG8nLkZBfWbhWwDw02CHty86jfPcc2cr3ZfeuK9ysoVPPEUxf21bAD/rWAgk52SuBrLJlefNy8mvFg==} + dev: true + + /graphemer@1.4.0: + resolution: {integrity: sha512-EtKwoO6kxCL9WO5xipiHTZlSzBm7WLT627TqC/uVRd0HKmq8NXyebnNYxDoBi7wt8eTWrUrKXCOVaFq9x1kgag==} + dev: true + + /has-flag@3.0.0: + resolution: {integrity: sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==} + engines: {node: '>=4'} + + /has-flag@4.0.0: + resolution: {integrity: sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==} + engines: {node: '>=8'} + + /hasown@2.0.1: + resolution: {integrity: sha512-1/th4MHjnwncwXsIW6QMzlvYL9kG5e/CpVvLRZe4XPa8TOUNbCELqmvhDmnkNsAjwaG4+I8gJJL0JBvTTLO9qA==} + engines: {node: '>= 0.4'} + dependencies: + function-bind: 1.1.2 + dev: true + + /html-tags@3.3.1: + resolution: {integrity: sha512-ztqyC3kLto0e9WbNp0aeP+M3kTt+nbaIveGmUxAtZa+8iFgKLUOD4YKM5j+f3QD89bra7UeumolZHKuOXnTmeQ==} + engines: {node: '>=8'} + dev: true + + /htmlhint@1.1.4: + resolution: {integrity: sha512-tSKPefhIaaWDk/vKxAOQbN+QwZmDeJCq3bZZGbJMoMQAfTjepudC+MkuT9MOBbuQI3dLLzDWbmU7fLV3JASC7Q==} + hasBin: true + dependencies: + async: 3.2.3 + chalk: 4.1.2 + commander: 9.5.0 + glob: 7.2.3 + is-glob: 4.0.3 + node-fetch: 2.7.0 + strip-json-comments: 3.1.0 + xml: 1.0.1 + transitivePeerDependencies: + - encoding + dev: true + + /htmlnano@2.1.0(postcss@8.4.35)(svgo@2.8.0): + resolution: {integrity: sha512-jVGRE0Ep9byMBKEu0Vxgl8dhXYOUk0iNQ2pjsG+BcRB0u0oDF5A9p/iBGMg/PGKYUyMD0OAGu8dVT5Lzj8S58g==} + peerDependencies: + cssnano: ^6.0.0 + postcss: ^8.3.11 + purgecss: ^5.0.0 + relateurl: ^0.2.7 + srcset: 4.0.0 + svgo: ^3.0.2 || 2.8.0 + terser: ^5.10.0 + uncss: ^0.17.3 + peerDependenciesMeta: + cssnano: + optional: true + postcss: + optional: true + purgecss: + optional: true + relateurl: + optional: true + srcset: + optional: true + svgo: + optional: true + terser: + optional: true + uncss: + optional: true + dependencies: + cosmiconfig: 8.3.6 + postcss: 8.4.35 + posthtml: 0.16.6 + svgo: 2.8.0 + timsort: 0.3.0 + transitivePeerDependencies: + - typescript + + /htmlparser2@7.2.0: + resolution: {integrity: sha512-H7MImA4MS6cw7nbyURtLPO1Tms7C5H602LRETv95z1MxO/7CP7rDVROehUYeYBUYEON94NXXDEPmZuq+hX4sog==} + dependencies: + domelementtype: 2.3.0 + domhandler: 4.3.1 + domutils: 2.8.0 + entities: 3.0.1 + + /ignore@5.3.1: + resolution: {integrity: sha512-5Fytz/IraMjqpwfd34ke28PTVMjZjJG2MPn5t7OE4eUCUNf8BAa7b5WUS9/Qvr6mwOQS7Mk6vdsMno5he+T8Xw==} + engines: {node: '>= 4'} + dev: true + + /import-fresh@3.3.0: + resolution: {integrity: sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw==} + engines: {node: '>=6'} + dependencies: + parent-module: 1.0.1 + resolve-from: 4.0.0 + + /imurmurhash@0.1.4: + resolution: {integrity: sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==} + engines: {node: '>=0.8.19'} + dev: true + + /inflight@1.0.6: + resolution: {integrity: sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==} + 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==} + dev: true + + /is-arrayish@0.2.1: + resolution: {integrity: sha512-zz06S8t0ozoDXMG+ube26zeCTNXcKIPJZJi8hBrF4idCLms4CG9QtK7qBl1boi5ODzFpjswb5JPmHCbMpjaYzg==} + + /is-binary-path@2.1.0: + resolution: {integrity: sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==} + engines: {node: '>=8'} + dependencies: + binary-extensions: 2.2.0 + dev: true + + /is-core-module@2.13.1: + resolution: {integrity: sha512-hHrIjvZsftOsvKSn2TRYl63zvxsgE0K+0mYMoH6gD4omR5IWB2KynivBQczo3+wF1cCkjzvptnI9Q0sPU66ilw==} + dependencies: + hasown: 2.0.1 + dev: true + + /is-extglob@2.1.1: + resolution: {integrity: sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==} + engines: {node: '>=0.10.0'} + + /is-fullwidth-code-point@3.0.0: + resolution: {integrity: sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==} + engines: {node: '>=8'} + + /is-glob@4.0.3: + resolution: {integrity: sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==} + engines: {node: '>=0.10.0'} + dependencies: + is-extglob: 2.1.1 + + /is-json@2.0.1: + resolution: {integrity: sha512-6BEnpVn1rcf3ngfmViLM6vjUjGErbdrL4rwlv+u1NO1XO8kqT4YGL8+19Q+Z/bas8tY90BTWMk2+fW1g6hQjbA==} + + /is-number@7.0.0: + resolution: {integrity: sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==} + engines: {node: '>=0.12.0'} + + /is-path-inside@3.0.3: + resolution: {integrity: sha512-Fd4gABb+ycGAmKou8eMftCupSir5lRxqf4aD/vd0cD2qc4HL07OjCeuHMr8Ro4CoMaeCKDB0/ECBOVWjTwUvPQ==} + engines: {node: '>=8'} + dev: true + + /is-plain-object@5.0.0: + resolution: {integrity: sha512-VRSzKkbMm5jMDoKLbltAkFQ5Qr7VDiTFGXxYFXXowVj387GeGNOCsOH6Msy00SGZ3Fp84b1Naa1psqgcCIEP5Q==} + engines: {node: '>=0.10.0'} + dev: true + + /isexe@2.0.0: + resolution: {integrity: sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==} + dev: true + + /jackspeak@2.3.6: + resolution: {integrity: sha512-N3yCS/NegsOBokc8GAdM8UcmfsKiSS8cipheD/nivzr700H+nsMOxJjQnvwOcRYVuFkdH0wGUvW2WbXGmrZGbQ==} + engines: {node: '>=14'} + dependencies: + '@isaacs/cliui': 8.0.2 + optionalDependencies: + '@pkgjs/parseargs': 0.11.0 + dev: true + + /jiti@1.21.0: + resolution: {integrity: sha512-gFqAIbuKyyso/3G2qhiO2OM6shY6EPP/R0+mkDbyspxKazh8BXDC5FiFsUjlczgdNz/vfra0da2y+aHrusLG/Q==} + hasBin: true + dev: true + + /js-tokens@4.0.0: + resolution: {integrity: sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==} + + /js-yaml@4.1.0: + resolution: {integrity: sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==} + hasBin: true + dependencies: + argparse: 2.0.1 + + /json-buffer@3.0.1: + resolution: {integrity: sha512-4bV5BfR2mqfQTJm+V5tPPdf+ZpuhiIvTuAB5g8kcrXOZpTT/QwwVRWBywX1ozr6lEuPdbHxwaJlm9G6mI2sfSQ==} + dev: true + + /json-parse-even-better-errors@2.3.1: + resolution: {integrity: sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w==} + + /json-schema-traverse@0.4.1: + resolution: {integrity: sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==} + dev: true + + /json-schema-traverse@1.0.0: + resolution: {integrity: sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==} + dev: true + + /json-stable-stringify-without-jsonify@1.0.1: + resolution: {integrity: sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw==} + dev: true + + /json5@2.2.3: + resolution: {integrity: sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg==} + engines: {node: '>=6'} + hasBin: true + + /keyv@4.5.4: + resolution: {integrity: sha512-oxVHkHR/EJf2CNXnWxRLW6mg7JyCCUcG0DtEGmL2ctUo1PNTin1PUil+r/+4r5MpVgC/fn1kjsx7mjSujKqIpw==} + dependencies: + json-buffer: 3.0.1 + dev: true + + /kind-of@6.0.3: + resolution: {integrity: sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==} + engines: {node: '>=0.10.0'} + dev: true + + /known-css-properties@0.29.0: + resolution: {integrity: sha512-Ne7wqW7/9Cz54PDt4I3tcV+hAyat8ypyOGzYRJQfdxnnjeWsTxt1cy8pjvvKeI5kfXuyvULyeeAvwvvtAX3ayQ==} + dev: true + + /leaflet-control-geocoder@2.4.0(leaflet@1.9.4): + resolution: {integrity: sha512-b2QlxuFd40uIDbnoUI3U9fzfnB4yKUYlmsXjquJ2d2YjoJqnyVYcIJeErAVv3kPvX3nI0gzvBq1XHMgSVFrGkQ==} + peerDependencies: + leaflet: ^1.6.0 + dependencies: + leaflet: 1.9.4 + optionalDependencies: + open-location-code: 1.0.3 + dev: true + + /leaflet.markercluster@1.5.3(leaflet@1.9.4): + resolution: {integrity: sha512-vPTw/Bndq7eQHjLBVlWpnGeLa3t+3zGiuM7fJwCkiMFq+nmRuG3RI3f7f4N4TDX7T4NpbAXpR2+NTRSEGfCSeA==} + peerDependencies: + leaflet: ^1.3.1 + dependencies: + leaflet: 1.9.4 + dev: true + + /leaflet@1.9.4: + resolution: {integrity: sha512-nxS1ynzJOmOlHp+iL3FyWqK89GtNL8U8rvlMOsQdTTssxZwCXh8N2NB3GDQOL+YR3XnWyZAxwQixURb+FA74PA==} + + /levn@0.4.1: + resolution: {integrity: sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==} + engines: {node: '>= 0.8.0'} + dependencies: + prelude-ls: 1.2.1 + type-check: 0.4.0 + dev: true + + /lightningcss-darwin-arm64@1.23.0: + resolution: {integrity: sha512-kl4Pk3Q2lnE6AJ7Qaij47KNEfY2/UXRZBT/zqGA24B8qwkgllr/j7rclKOf1axcslNXvvUdztjo4Xqh39Yq1aA==} + engines: {node: '>= 12.0.0'} + cpu: [arm64] + os: [darwin] + requiresBuild: true + optional: true + + /lightningcss-darwin-x64@1.23.0: + resolution: {integrity: sha512-KeRFCNoYfDdcolcFXvokVw+PXCapd2yHS1Diko1z1BhRz/nQuD5XyZmxjWdhmhN/zj5sH8YvWsp0/lPLVzqKpg==} + engines: {node: '>= 12.0.0'} + cpu: [x64] + os: [darwin] + requiresBuild: true + optional: true + + /lightningcss-freebsd-x64@1.23.0: + resolution: {integrity: sha512-xhnhf0bWPuZxcqknvMDRFFo2TInrmQRWZGB0f6YoAsZX8Y+epfjHeeOIGCfAmgF0DgZxHwYc8mIR5tQU9/+ROA==} + engines: {node: '>= 12.0.0'} + cpu: [x64] + os: [freebsd] + requiresBuild: true + optional: true + + /lightningcss-linux-arm-gnueabihf@1.23.0: + resolution: {integrity: sha512-fBamf/bULvmWft9uuX+bZske236pUZEoUlaHNBjnueaCTJ/xd8eXgb0cEc7S5o0Nn6kxlauMBnqJpF70Bgq3zg==} + engines: {node: '>= 12.0.0'} + cpu: [arm] + os: [linux] + requiresBuild: true + optional: true + + /lightningcss-linux-arm64-gnu@1.23.0: + resolution: {integrity: sha512-RS7sY77yVLOmZD6xW2uEHByYHhQi5JYWmgVumYY85BfNoVI3DupXSlzbw+b45A9NnVKq45+oXkiN6ouMMtTwfg==} + engines: {node: '>= 12.0.0'} + cpu: [arm64] + os: [linux] + requiresBuild: true + optional: true + + /lightningcss-linux-arm64-musl@1.23.0: + resolution: {integrity: sha512-cU00LGb6GUXCwof6ACgSMKo3q7XYbsyTj0WsKHLi1nw7pV0NCq8nFTn6ZRBYLoKiV8t+jWl0Hv8KkgymmK5L5g==} + engines: {node: '>= 12.0.0'} + cpu: [arm64] + os: [linux] + requiresBuild: true + optional: true + + /lightningcss-linux-x64-gnu@1.23.0: + resolution: {integrity: sha512-q4jdx5+5NfB0/qMbXbOmuC6oo7caPnFghJbIAV90cXZqgV8Am3miZhC4p+sQVdacqxfd+3nrle4C8icR3p1AYw==} + engines: {node: '>= 12.0.0'} + cpu: [x64] + os: [linux] + requiresBuild: true + optional: true + + /lightningcss-linux-x64-musl@1.23.0: + resolution: {integrity: sha512-G9Ri3qpmF4qef2CV/80dADHKXRAQeQXpQTLx7AiQrBYQHqBjB75oxqj06FCIe5g4hNCqLPnM9fsO4CyiT1sFSQ==} + engines: {node: '>= 12.0.0'} + cpu: [x64] + os: [linux] + requiresBuild: true + optional: true + + /lightningcss-win32-x64-msvc@1.23.0: + resolution: {integrity: sha512-1rcBDJLU+obPPJM6qR5fgBUiCdZwZLafZM5f9kwjFLkb/UBNIzmae39uCSmh71nzPCTXZqHbvwu23OWnWEz+eg==} + engines: {node: '>= 12.0.0'} + cpu: [x64] + os: [win32] + requiresBuild: true + optional: true + + /lightningcss@1.23.0: + resolution: {integrity: sha512-SEArWKMHhqn/0QzOtclIwH5pXIYQOUEkF8DgICd/105O+GCgd7jxjNod/QPnBCSWvpRHQBGVz5fQ9uScby03zA==} + engines: {node: '>= 12.0.0'} + dependencies: + detect-libc: 1.0.3 + optionalDependencies: + lightningcss-darwin-arm64: 1.23.0 + lightningcss-darwin-x64: 1.23.0 + lightningcss-freebsd-x64: 1.23.0 + lightningcss-linux-arm-gnueabihf: 1.23.0 + lightningcss-linux-arm64-gnu: 1.23.0 + lightningcss-linux-arm64-musl: 1.23.0 + lightningcss-linux-x64-gnu: 1.23.0 + lightningcss-linux-x64-musl: 1.23.0 + lightningcss-win32-x64-msvc: 1.23.0 + + /lilconfig@2.1.0: + resolution: {integrity: sha512-utWOt/GHzuUxnLKxB6dk81RoOeoNeHgbrXiuGk4yyF5qlRz+iIVWu56E2fqGHFrXz0QNUhLB/8nKqvRH66JKGQ==} + engines: {node: '>=10'} + dev: true + + /lilconfig@3.0.0: + resolution: {integrity: sha512-K2U4W2Ff5ibV7j7ydLr+zLAkIg5JJ4lPn1Ltsdt+Tz/IjQ8buJ55pZAxoP34lqIiwtF9iAvtLv3JGv7CAyAg+g==} + engines: {node: '>=14'} + dev: true + + /lines-and-columns@1.2.4: + resolution: {integrity: sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==} + + /lmdb@2.8.5: + resolution: {integrity: sha512-9bMdFfc80S+vSldBmG3HOuLVHnxRdNTlpzR6QDnzqCQtCzGUEAGTzBKYMeIM+I/sU4oZfgbcbS7X7F65/z/oxQ==} + hasBin: true + requiresBuild: true + dependencies: + msgpackr: 1.10.1 + node-addon-api: 6.1.0 + node-gyp-build-optional-packages: 5.1.1 + ordered-binary: 1.5.1 + weak-lru-cache: 1.2.2 + optionalDependencies: + '@lmdb/lmdb-darwin-arm64': 2.8.5 + '@lmdb/lmdb-darwin-x64': 2.8.5 + '@lmdb/lmdb-linux-arm': 2.8.5 + '@lmdb/lmdb-linux-arm64': 2.8.5 + '@lmdb/lmdb-linux-x64': 2.8.5 + '@lmdb/lmdb-win32-x64': 2.8.5 + + /locate-path@6.0.0: + resolution: {integrity: sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==} + engines: {node: '>=10'} + dependencies: + p-locate: 5.0.0 + dev: true + + /lodash.merge@4.6.2: + resolution: {integrity: sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==} + dev: true + + /lodash.truncate@4.4.2: + resolution: {integrity: sha512-jttmRe7bRse52OsWIMDLaXxWqRAmtIUccAQ3garviCqJjafXOfNMO0yMfNpdD6zbGaTU0P5Nz7e7gAT6cKmJRw==} + dev: true + + /lru-cache@10.2.0: + resolution: {integrity: sha512-2bIM8x+VAf6JT4bKAljS1qUWgMsqZRPGJS6FSahIMPVvctcNhyVp7AJu7quxOW9jwkryBReKZY5tY5JYv2n/7Q==} + engines: {node: 14 || >=16.14} + dev: true + + /lru-cache@6.0.0: + resolution: {integrity: sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==} + engines: {node: '>=10'} + dependencies: + yallist: 4.0.0 + + /mathml-tag-names@2.1.3: + resolution: {integrity: sha512-APMBEanjybaPzUrfqU0IMU5I0AswKMH7k8OTLs0vvV4KZpExkTkY87nR/zpbuTPj+gARop7aGUbl11pnDfW6xg==} + dev: true + + /mdn-data@2.0.14: + resolution: {integrity: sha512-dn6wd0uw5GsdswPFfsgMp5NSB0/aDe6fK94YJV/AJDYXL6HVLWBsxeq7js7Ad+mU2K9LAlwpk6kN2D5mwCPVow==} + + /mdn-data@2.0.30: + resolution: {integrity: sha512-GaqWWShW4kv/G9IEucWScBx9G1/vsFZZJUO+tD26M8J8z3Kw5RDQjaoZe03YAClgeS/SWPOcb4nkFBTEi5DUEA==} + dev: true + + /meow@13.2.0: + resolution: {integrity: sha512-pxQJQzB6djGPXh08dacEloMFopsOqGVRKFPYvPOt9XDZ1HasbgDZA74CJGreSU4G3Ak7EFJGoiH2auq+yXISgA==} + engines: {node: '>=18'} + dev: true + + /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==} + engines: {node: '>=8.6'} + dependencies: + braces: 3.0.2 + picomatch: 2.3.1 + + /minimatch@3.1.2: + resolution: {integrity: sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==} + dependencies: + brace-expansion: 1.1.11 + dev: true + + /minimatch@9.0.3: + resolution: {integrity: sha512-RHiac9mvaRw0x3AYRgDC1CxAP7HTcNrrECeA8YYJeWnpo+2Q5CegtZjaotWTWxDG3UeGA1coE05iH1mPjT/2mg==} + engines: {node: '>=16 || 14 >=14.17'} + dependencies: + brace-expansion: 2.0.1 + dev: true + + /minipass@7.0.4: + resolution: {integrity: sha512-jYofLM5Dam9279rdkWzqHozUo4ybjdZmCsDHePy5V/PbBcVMiSZR97gmAy45aqi8CK1lG2ECd356FU86avfwUQ==} + engines: {node: '>=16 || 14 >=14.17'} + dev: true + + /ms@2.1.2: + resolution: {integrity: sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==} + dev: true + + /msgpackr-extract@3.0.2: + resolution: {integrity: sha512-SdzXp4kD/Qf8agZ9+iTu6eql0m3kWm1A2y1hkpTeVNENutaB0BwHlSvAIaMxwntmRUAUjon2V4L8Z/njd0Ct8A==} + hasBin: true + requiresBuild: true + dependencies: + node-gyp-build-optional-packages: 5.0.7 + optionalDependencies: + '@msgpackr-extract/msgpackr-extract-darwin-arm64': 3.0.2 + '@msgpackr-extract/msgpackr-extract-darwin-x64': 3.0.2 + '@msgpackr-extract/msgpackr-extract-linux-arm': 3.0.2 + '@msgpackr-extract/msgpackr-extract-linux-arm64': 3.0.2 + '@msgpackr-extract/msgpackr-extract-linux-x64': 3.0.2 + '@msgpackr-extract/msgpackr-extract-win32-x64': 3.0.2 + optional: true + + /msgpackr@1.10.1: + resolution: {integrity: sha512-r5VRLv9qouXuLiIBrLpl2d5ZvPt8svdQTl5/vMvE4nzDMyEX4sgW5yWhuBBj5UmgwOTWj8CIdSXn5sAfsHAWIQ==} + optionalDependencies: + msgpackr-extract: 3.0.2 + + /mz@2.7.0: + resolution: {integrity: sha512-z81GNO7nnYMEhrGh9LeymoE4+Yr0Wn5McHIZMK5cfQCl+NDX08sCZgUc9/6MHni9IWuFLm1Z3HTCXu2z9fN62Q==} + dependencies: + any-promise: 1.3.0 + object-assign: 4.1.1 + thenify-all: 1.6.0 + dev: true + + /nanoid@3.3.7: + resolution: {integrity: sha512-eSRppjcPIatRIMC1U6UngP8XFcz8MQWGQdt1MTBQ7NaAmvXDfvNxbvWV3x2y6CdEUciCSsDHDQZbhYaB8QEo2g==} + engines: {node: ^10 || ^12 || ^13.7 || ^14 || >=15.0.1} + hasBin: true + + /natural-compare@1.4.0: + resolution: {integrity: sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==} + dev: true + + /node-addon-api@6.1.0: + resolution: {integrity: sha512-+eawOlIgy680F0kBzPUNFhMZGtJ1YmqM6l4+Crf4IkImjYrO/mqPwRMh352g23uIaQKFItcQ64I7KMaJxHgAVA==} + + /node-addon-api@7.1.0: + resolution: {integrity: sha512-mNcltoe1R8o7STTegSOHdnJNN7s5EUvhoS7ShnTHDyOSd+8H+UdWODq6qSv67PjC8Zc5JRT8+oLAMCr0SIXw7g==} + engines: {node: ^16 || ^18 || >= 20} + + /node-fetch@2.7.0: + resolution: {integrity: sha512-c4FRfUm/dbcWZ7U+1Wq0AwCyFL+3nt2bEw05wfxSz+DWpWsitgmSgYmy2dQdWyKC1694ELPqMs/YzUSNozLt8A==} + engines: {node: 4.x || >=6.0.0} + peerDependencies: + encoding: ^0.1.0 + peerDependenciesMeta: + encoding: + optional: true + dependencies: + whatwg-url: 5.0.0 + dev: true + + /node-gyp-build-optional-packages@5.0.7: + resolution: {integrity: sha512-YlCCc6Wffkx0kHkmam79GKvDQ6x+QZkMjFGrIMxgFNILFvGSbCp2fCBC55pGTT9gVaz8Na5CLmxt/urtzRv36w==} + hasBin: true + requiresBuild: true + optional: true + + /node-gyp-build-optional-packages@5.1.1: + resolution: {integrity: sha512-+P72GAjVAbTxjjwUmwjVrqrdZROD4nf8KgpBoDxqXXTiYZZt/ud60dE5yvCSr9lRO8e8yv6kgJIC0K0PfZFVQw==} + hasBin: true + dependencies: + detect-libc: 2.0.2 + + /node-releases@2.0.14: + resolution: {integrity: sha512-y10wOWt8yZpqXmOgRo77WaHEmhYQYGNA6y421PKsKYWEK8aW+cqAphborZDhqfyKrbZEN92CN1X2KbafY2s7Yw==} + + /normalize-path@3.0.0: + resolution: {integrity: sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==} + engines: {node: '>=0.10.0'} + dev: true + + /nth-check@2.1.1: + resolution: {integrity: sha512-lqjrjmaOoAnWfMmBPL+XNnynZh2+swxiX3WUE0s4yEHI6m+AwrK2UZOimIRl3X/4QctVqS8AiZjFqyOGrMXb/w==} + dependencies: + boolbase: 1.0.0 + + /nullthrows@1.1.1: + resolution: {integrity: sha512-2vPPEi+Z7WqML2jZYddDIfy5Dqb0r2fze2zTxNNknZaFpVHU3mFB3R+DWeJWGVx0ecvttSGlJTI+WG+8Z4cDWw==} + + /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 + + /once@1.4.0: + resolution: {integrity: sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==} + dependencies: + wrappy: 1.0.2 + dev: true + + /open-location-code@1.0.3: + resolution: {integrity: sha512-DBm14BSn40Ee241n80zIFXIT6+y8Tb0I+jTdosLJ8Sidvr2qONvymwqymVbHV2nS+1gkDZ5eTNpnOIVV0Kn2fw==} + requiresBuild: true + dev: true + optional: true + + /optionator@0.9.3: + resolution: {integrity: sha512-JjCoypp+jKn1ttEFExxhetCKeJt9zhAgAve5FXHixTvFDW/5aEktX9bufBKLRRMdU7bNtpLfcGu94B3cdEJgjg==} + engines: {node: '>= 0.8.0'} + dependencies: + '@aashutoshrathi/word-wrap': 1.2.6 + deep-is: 0.1.4 + fast-levenshtein: 2.0.6 + levn: 0.4.1 + prelude-ls: 1.2.1 + type-check: 0.4.0 + dev: true + + /ordered-binary@1.5.1: + resolution: {integrity: sha512-5VyHfHY3cd0iza71JepYG50My+YUbrFtGoUz2ooEydPyPM7Aai/JW098juLr+RG6+rDJuzNNTsEQu2DZa1A41A==} + + /p-limit@3.1.0: + resolution: {integrity: sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==} + engines: {node: '>=10'} + dependencies: + yocto-queue: 0.1.0 + dev: true + + /p-locate@5.0.0: + resolution: {integrity: sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==} + engines: {node: '>=10'} + dependencies: + p-limit: 3.1.0 + dev: true + + /parcel-reporter-static-files-copy@1.5.3(@parcel/core@2.11.0): + resolution: {integrity: sha512-Ukq2SyJYn3GFIPCLamXuQ+2t+0j54llujjOUoRjtmVvfsuGnJDEpMznADeIoKuQDvy0jpxtWzWkQvxqI/j+U4A==} + engines: {parcel: ^2.0.0-beta.1} + dependencies: + '@parcel/plugin': 2.11.0(@parcel/core@2.11.0) + transitivePeerDependencies: + - '@parcel/core' + dev: true + + /parcel@2.11.0(postcss@8.4.35): + resolution: {integrity: sha512-H/RI1/DmuOkL8RuG/EpNPvtzrbF+7jA/R56ydEEm+lqFbYktKB4COR7JXdHkZXRgbSJyimrFB8d0r9+SaRnj0Q==} + engines: {node: '>= 12.0.0'} + hasBin: true + peerDependenciesMeta: + '@parcel/core': + optional: true + dependencies: + '@parcel/config-default': 2.11.0(@parcel/core@2.11.0)(postcss@8.4.35) + '@parcel/core': 2.11.0 + '@parcel/diagnostic': 2.11.0 + '@parcel/events': 2.11.0 + '@parcel/fs': 2.11.0(@parcel/core@2.11.0) + '@parcel/logger': 2.11.0 + '@parcel/package-manager': 2.11.0(@parcel/core@2.11.0) + '@parcel/reporter-cli': 2.11.0(@parcel/core@2.11.0) + '@parcel/reporter-dev-server': 2.11.0(@parcel/core@2.11.0) + '@parcel/reporter-tracer': 2.11.0(@parcel/core@2.11.0) + '@parcel/utils': 2.11.0 + chalk: 4.1.2 + commander: 7.2.0 + get-port: 4.2.0 + transitivePeerDependencies: + - '@swc/helpers' + - cssnano + - postcss + - purgecss + - relateurl + - srcset + - terser + - typescript + - uncss + dev: false + + /parent-module@1.0.1: + resolution: {integrity: sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==} + engines: {node: '>=6'} + dependencies: + callsites: 3.1.0 + + /parse-json@5.2.0: + resolution: {integrity: sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg==} + engines: {node: '>=8'} + dependencies: + '@babel/code-frame': 7.23.5 + error-ex: 1.3.2 + json-parse-even-better-errors: 2.3.1 + lines-and-columns: 1.2.4 + + /path-exists@4.0.0: + resolution: {integrity: sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==} + engines: {node: '>=8'} + dev: true + + /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-parse@1.0.7: + resolution: {integrity: sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==} + dev: true + + /path-scurry@1.10.1: + resolution: {integrity: sha512-MkhCqzzBEpPvxxQ71Md0b1Kk51W01lrYvlMzSUaIzNsODdd7mqhiimSZlr+VegAz5Z6Vzt9Xg2ttE//XBhH3EQ==} + engines: {node: '>=16 || 14 >=14.17'} + dependencies: + lru-cache: 10.2.0 + minipass: 7.0.4 + dev: true + + /path-type@4.0.0: + resolution: {integrity: sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==} + engines: {node: '>=8'} + + /picocolors@1.0.0: + resolution: {integrity: sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ==} + + /picomatch@2.3.1: + resolution: {integrity: sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==} + engines: {node: '>=8.6'} + + /pify@2.3.0: + resolution: {integrity: sha512-udgsAY+fTnvv7kI7aaxbqwWNb0AHiB0qBO89PZKPkoTmGOgdbrHDKD+0B2X4uTfJ/FT1R09r9gTsjUjNJotuog==} + engines: {node: '>=0.10.0'} + dev: true + + /pirates@4.0.6: + resolution: {integrity: sha512-saLsH7WeYYPiD25LDuLRRY/i+6HaPYr6G1OUlN39otzkSTxKnubR9RTxS3/Kk50s1g2JTgFwWQDQyplC5/SHZg==} + engines: {node: '>= 6'} + dev: true + + /postcss-import@15.1.0(postcss@8.4.35): + resolution: {integrity: sha512-hpr+J05B2FVYUAXHeK1YyI267J/dDDhMU6B6civm8hSY1jYJnBXxzKDKDswzJmtLHryrjhnDjqqp/49t8FALew==} + engines: {node: '>=14.0.0'} + peerDependencies: + postcss: ^8.0.0 + dependencies: + postcss: 8.4.35 + 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==} + engines: {node: ^12 || ^14 || >= 16} + peerDependencies: + postcss: ^8.4.21 + dependencies: + camelcase-css: 2.0.1 + postcss: 8.4.35 + dev: true + + /postcss-load-config@4.0.2(postcss@8.4.35): + resolution: {integrity: sha512-bSVhyJGL00wMVoPUzAVAnbEoWyqRxkjv64tUl427SKnPrENtq6hJwUojroMz2VB+Q1edmi4IfrAPpami5VVgMQ==} + engines: {node: '>= 14'} + peerDependencies: + postcss: '>=8.0.9' + ts-node: '>=9.0.0' + peerDependenciesMeta: + postcss: + optional: true + ts-node: + optional: true + dependencies: + lilconfig: 3.0.0 + postcss: 8.4.35 + yaml: 2.3.4 + dev: true + + /postcss-nested@6.0.1(postcss@8.4.35): + resolution: {integrity: sha512-mEp4xPMi5bSWiMbsgoPfcP74lsWLHkQbZc3sY+jWYd65CUwXrUaTp0fmNpa01ZcETKlIgUdFN/MpS2xZtqL9dQ==} + engines: {node: '>=12.0'} + peerDependencies: + postcss: ^8.2.14 + dependencies: + postcss: 8.4.35 + postcss-selector-parser: 6.0.15 + dev: true + + /postcss-resolve-nested-selector@0.1.1: + resolution: {integrity: sha512-HvExULSwLqHLgUy1rl3ANIqCsvMS0WHss2UOsXhXnQaZ9VCc2oBvIpXrl00IUFT5ZDITME0o6oiXeiHr2SAIfw==} + dev: true + + /postcss-safe-parser@7.0.0(postcss@8.4.35): + resolution: {integrity: sha512-ovehqRNVCpuFzbXoTb4qLtyzK3xn3t/CUBxOs8LsnQjQrShaB4lKiHoVqY8ANaC0hBMHq5QVWk77rwGklFUDrg==} + engines: {node: '>=18.0'} + peerDependencies: + postcss: ^8.4.31 + dependencies: + postcss: 8.4.35 + dev: true + + /postcss-selector-parser@6.0.15: + resolution: {integrity: sha512-rEYkQOMUCEMhsKbK66tbEU9QVIxbhN18YiniAwA7XQYTVBqrBy+P2p5JcdqsHgKM2zWylp8d7J6eszocfds5Sw==} + engines: {node: '>=4'} + dependencies: + cssesc: 3.0.0 + util-deprecate: 1.0.2 + dev: true + + /postcss-value-parser@4.2.0: + resolution: {integrity: sha512-1NNCs6uurfkVbeXG4S8JFT9t19m45ICnif8zWLd5oPSZ50QnwMfK+H3jv408d4jw/7Bttv5axS5IiHoLaVNHeQ==} + + /postcss@8.4.35: + resolution: {integrity: sha512-u5U8qYpBCpN13BsiEB0CbR1Hhh4Gc0zLFuedrHJKMctHCHAGrMdG0PRM/KErzAL3CU6/eckEtmHNB3x6e3c0vA==} + engines: {node: ^10 || ^12 || >=14} + dependencies: + nanoid: 3.3.7 + picocolors: 1.0.0 + source-map-js: 1.0.2 + + /posthtml-parser@0.10.2: + resolution: {integrity: sha512-PId6zZ/2lyJi9LiKfe+i2xv57oEjJgWbsHGGANwos5AvdQp98i6AtamAl8gzSVFGfQ43Glb5D614cvZf012VKg==} + engines: {node: '>=12'} + dependencies: + htmlparser2: 7.2.0 + + /posthtml-parser@0.11.0: + resolution: {integrity: sha512-QecJtfLekJbWVo/dMAA+OSwY79wpRmbqS5TeXvXSX+f0c6pW4/SE6inzZ2qkU7oAMCPqIDkZDvd/bQsSFUnKyw==} + engines: {node: '>=12'} + dependencies: + htmlparser2: 7.2.0 + + /posthtml-render@3.0.0: + resolution: {integrity: sha512-z+16RoxK3fUPgwaIgH9NGnK1HKY9XIDpydky5eQGgAFVXTCSezalv9U2jQuNV+Z9qV1fDWNzldcw4eK0SSbqKA==} + engines: {node: '>=12'} + dependencies: + is-json: 2.0.1 + + /posthtml@0.16.6: + resolution: {integrity: sha512-JcEmHlyLK/o0uGAlj65vgg+7LIms0xKXe60lcDOTU7oVX/3LuEuLwrQpW3VJ7de5TaFKiW4kWkaIpJL42FEgxQ==} + engines: {node: '>=12.0.0'} + dependencies: + posthtml-parser: 0.11.0 + posthtml-render: 3.0.0 + + /prelude-ls@1.2.1: + resolution: {integrity: sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==} + engines: {node: '>= 0.8.0'} + dev: true + + /punycode@2.3.1: + resolution: {integrity: sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg==} + engines: {node: '>=6'} + dev: true + + /queue-microtask@1.2.3: + resolution: {integrity: sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==} + dev: true + + /react-error-overlay@6.0.9: + resolution: {integrity: sha512-nQTTcUu+ATDbrSD1BZHr5kgSD4oF8OFjxun8uAaL8RwPBacGBNPf/yAuVVdx17N8XNzRDMrZ9XcKZHCjPW+9ew==} + + /react-refresh@0.9.0: + resolution: {integrity: sha512-Gvzk7OZpiqKSkxsQvO/mbTN1poglhmAV7gR/DdIrRrSMXraRQQlfikRJOr3Nb9GTMPC5kof948Zy6jJZIFtDvQ==} + engines: {node: '>=0.10.0'} + + /read-cache@1.0.0: + resolution: {integrity: sha512-Owdv/Ft7IjOgm/i0xvNDZ1LrRANRfew4b2prF3OWMQLxLfu3bS8FVhCsrSCMK4lR56Y9ya+AThoTpDCTxCmpRA==} + dependencies: + pify: 2.3.0 + dev: true + + /readdirp@3.6.0: + resolution: {integrity: sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==} + engines: {node: '>=8.10.0'} + dependencies: + picomatch: 2.3.1 + dev: true + + /regenerator-runtime@0.13.11: + resolution: {integrity: sha512-kY1AZVr2Ra+t+piVaJ4gxaFaReZVH40AKNo7UCX6W+dEwBo/2oZJzqfuN1qLq1oL45o56cPaTXELwrTh8Fpggg==} + + /require-from-string@2.0.2: + resolution: {integrity: sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw==} + engines: {node: '>=0.10.0'} + dev: true + + /resolve-from@4.0.0: + resolution: {integrity: sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==} + engines: {node: '>=4'} + + /resolve-from@5.0.0: + resolution: {integrity: sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==} + engines: {node: '>=8'} + dev: true + + /resolve@1.22.8: + resolution: {integrity: sha512-oKWePCxqpd6FlLvGV1VU0x7bkPmmCNolxzjMf4NczoDnQcIWrAF+cPtZn5i6n+RfD2d9i0tzpKnG6Yk168yIyw==} + hasBin: true + dependencies: + is-core-module: 2.13.1 + path-parse: 1.0.7 + supports-preserve-symlinks-flag: 1.0.0 + dev: true + + /reusify@1.0.4: + resolution: {integrity: sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==} + engines: {iojs: '>=1.0.0', node: '>=0.10.0'} + dev: true + + /rimraf@3.0.2: + resolution: {integrity: sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==} + hasBin: true + dependencies: + glob: 7.2.3 + dev: true + + /rimraf@5.0.5: + resolution: {integrity: sha512-CqDakW+hMe/Bz202FPEymy68P+G50RfMQK+Qo5YUqc9SPipvbGjCGKd0RSKEelbsfQuw3g5NZDSrlZZAJurH1A==} + engines: {node: '>=14'} + hasBin: true + dependencies: + glob: 10.3.10 + dev: true + + /run-parallel@1.2.0: + resolution: {integrity: sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==} + dependencies: + queue-microtask: 1.2.3 + dev: true + + /safe-buffer@5.2.1: + resolution: {integrity: sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==} + + /semver@7.6.0: + resolution: {integrity: sha512-EnwXhrlwXMk9gKu5/flx5sv/an57AkRplG3hTK68W7FRDN+k+OWBj65M7719OkA82XLBxrcX0KSHj+X5COhOVg==} + engines: {node: '>=10'} + hasBin: true + dependencies: + lru-cache: 6.0.0 + + /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 + + /signal-exit@4.1.0: + resolution: {integrity: sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw==} + engines: {node: '>=14'} + dev: true + + /slash@3.0.0: + resolution: {integrity: sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==} + engines: {node: '>=8'} + dev: true + + /slice-ansi@4.0.0: + resolution: {integrity: sha512-qMCMfhY040cVHT43K9BFygqYbUPFZKHOg7K73mtTWJRb8pyP3fzf4Ixd5SzdEJQ6MRUg/WBnOLxghZtKKurENQ==} + engines: {node: '>=10'} + dependencies: + ansi-styles: 4.3.0 + astral-regex: 2.0.0 + is-fullwidth-code-point: 3.0.0 + dev: true + + /source-map-js@1.0.2: + resolution: {integrity: sha512-R0XvVJ9WusLiqTCEiGCmICCMplcCkIwwR11mOSD9CR5u+IXYdiseeEuXCVAjS54zqwkLcPNnmU4OeJ6tUrWhDw==} + engines: {node: '>=0.10.0'} + + /source-map@0.6.1: + resolution: {integrity: sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==} + engines: {node: '>=0.10.0'} + + /srcset@4.0.0: + resolution: {integrity: sha512-wvLeHgcVHKO8Sc/H/5lkGreJQVeYMm9rlmt8PuR1xE31rIuXhuzznUUqAt8MqLhB3MqJdFzlNAfpcWnxiFUcPw==} + engines: {node: '>=12'} + + /stable@0.1.8: + resolution: {integrity: sha512-ji9qxRnOVfcuLDySj9qzhGSEFVobyt1kIOSkj1qZzYLzq7Tos/oUUWvotUPQLlrsidqsK6tBH89Bc9kL5zHA6w==} + deprecated: 'Modern JS already guarantees Array#sort() is a stable sort, so this library is deprecated. See the compatibility table on MDN: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/sort#browser_compatibility' + + /string-width@4.2.3: + resolution: {integrity: sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==} + engines: {node: '>=8'} + dependencies: + emoji-regex: 8.0.0 + is-fullwidth-code-point: 3.0.0 + strip-ansi: 6.0.1 + + /string-width@5.1.2: + resolution: {integrity: sha512-HnLOCR3vjcY8beoNLtcjZ5/nxn2afmME6lhrDrebokqMap+XbeW8n9TXpPDOqdGK5qcI3oT0GKTW6wC7EMiVqA==} + engines: {node: '>=12'} + dependencies: + eastasianwidth: 0.2.0 + emoji-regex: 9.2.2 + strip-ansi: 7.1.0 + dev: true + + /strip-ansi@6.0.1: + resolution: {integrity: sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==} + engines: {node: '>=8'} + dependencies: + ansi-regex: 5.0.1 + + /strip-ansi@7.1.0: + resolution: {integrity: sha512-iq6eVVI64nQQTRYq2KtEg2d2uU7LElhTJwsH4YzIHZshxlgZms/wIc4VoDQTlG/IvVIrBKG06CrZnp0qv7hkcQ==} + engines: {node: '>=12'} + dependencies: + ansi-regex: 6.0.1 + dev: true + + /strip-json-comments@3.1.0: + resolution: {integrity: sha512-e6/d0eBu7gHtdCqFt0xJr642LdToM5/cN4Qb9DbHjVx1CP5RyeM+zH7pbecEmDv/lBqb0QH+6Uqq75rxFPkM0w==} + engines: {node: '>=8'} + dev: true + + /strip-json-comments@3.1.1: + resolution: {integrity: sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==} + engines: {node: '>=8'} + dev: true + + /stylelint-config-recommended@14.0.0(stylelint@16.2.1): + resolution: {integrity: sha512-jSkx290CglS8StmrLp2TxAppIajzIBZKYm3IxT89Kg6fGlxbPiTiyH9PS5YUuVAFwaJLl1ikiXX0QWjI0jmgZQ==} + engines: {node: '>=18.12.0'} + peerDependencies: + stylelint: ^16.0.0 + dependencies: + stylelint: 16.2.1 + dev: true + + /stylelint-config-standard@36.0.0(stylelint@16.2.1): + resolution: {integrity: sha512-3Kjyq4d62bYFp/Aq8PMKDwlgUyPU4nacXsjDLWJdNPRUgpuxALu1KnlAHIj36cdtxViVhXexZij65yM0uNIHug==} + engines: {node: '>=18.12.0'} + peerDependencies: + stylelint: ^16.1.0 + dependencies: + stylelint: 16.2.1 + stylelint-config-recommended: 14.0.0(stylelint@16.2.1) + dev: true + + /stylelint@16.2.1: + resolution: {integrity: sha512-SfIMGFK+4n7XVAyv50CpVfcGYWG4v41y6xG7PqOgQSY8M/PgdK0SQbjWFblxjJZlN9jNq879mB4BCZHJRIJ1hA==} + engines: {node: '>=18.12.0'} + hasBin: true + dependencies: + '@csstools/css-parser-algorithms': 2.5.0(@csstools/css-tokenizer@2.2.3) + '@csstools/css-tokenizer': 2.2.3 + '@csstools/media-query-list-parser': 2.1.7(@csstools/css-parser-algorithms@2.5.0)(@csstools/css-tokenizer@2.2.3) + '@csstools/selector-specificity': 3.0.1(postcss-selector-parser@6.0.15) + balanced-match: 2.0.0 + colord: 2.9.3 + cosmiconfig: 9.0.0 + css-functions-list: 3.2.1 + css-tree: 2.3.1 + debug: 4.3.4 + fast-glob: 3.3.2 + fastest-levenshtein: 1.0.16 + file-entry-cache: 8.0.0 + global-modules: 2.0.0 + globby: 11.1.0 + globjoin: 0.1.4 + html-tags: 3.3.1 + ignore: 5.3.1 + imurmurhash: 0.1.4 + is-plain-object: 5.0.0 + known-css-properties: 0.29.0 + mathml-tag-names: 2.1.3 + meow: 13.2.0 + micromatch: 4.0.5 + normalize-path: 3.0.0 + picocolors: 1.0.0 + postcss: 8.4.35 + postcss-resolve-nested-selector: 0.1.1 + postcss-safe-parser: 7.0.0(postcss@8.4.35) + postcss-selector-parser: 6.0.15 + postcss-value-parser: 4.2.0 + resolve-from: 5.0.0 + string-width: 4.2.3 + strip-ansi: 7.1.0 + supports-hyperlinks: 3.0.0 + svg-tags: 1.0.0 + table: 6.8.1 + write-file-atomic: 5.0.1 + transitivePeerDependencies: + - supports-color + - typescript + dev: true + + /sucrase@3.35.0: + resolution: {integrity: sha512-8EbVDiu9iN/nESwxeSxDKe0dunta1GOlHufmSSXxMD2z2/tMZpDMpvXQGsc+ajGo8y2uYUmixaSRUc/QPoQ0GA==} + engines: {node: '>=16 || 14 >=14.17'} + hasBin: true + dependencies: + '@jridgewell/gen-mapping': 0.3.3 + commander: 4.1.1 + glob: 10.3.10 + lines-and-columns: 1.2.4 + mz: 2.7.0 + pirates: 4.0.6 + ts-interface-checker: 0.1.13 + dev: true + + /supports-color@5.5.0: + resolution: {integrity: sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==} + engines: {node: '>=4'} + dependencies: + has-flag: 3.0.0 + + /supports-color@7.2.0: + resolution: {integrity: sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==} + engines: {node: '>=8'} + dependencies: + has-flag: 4.0.0 + + /supports-hyperlinks@3.0.0: + resolution: {integrity: sha512-QBDPHyPQDRTy9ku4URNGY5Lah8PAaXs6tAAwp55sL5WCsSW7GIfdf6W5ixfziW+t7wh3GVvHyHHyQ1ESsoRvaA==} + engines: {node: '>=14.18'} + dependencies: + has-flag: 4.0.0 + supports-color: 7.2.0 + dev: true + + /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 + + /svgo@2.8.0: + resolution: {integrity: sha512-+N/Q9kV1+F+UeWYoSiULYo4xYSDQlTgb+ayMobAXPwMnLvop7oxKMo9OzIrX5x3eS4L4f2UHhc9axXwY8DpChg==} + engines: {node: '>=10.13.0'} + hasBin: true + dependencies: + '@trysound/sax': 0.2.0 + commander: 7.2.0 + css-select: 4.3.0 + css-tree: 1.1.3 + csso: 4.2.0 + picocolors: 1.0.0 + stable: 0.1.8 + + /table@6.8.1: + resolution: {integrity: sha512-Y4X9zqrCftUhMeH2EptSSERdVKt/nEdijTOacGD/97EKjhQ/Qs8RTlEGABSJNNN8lac9kheH+af7yAkEWlgneA==} + engines: {node: '>=10.0.0'} + dependencies: + ajv: 8.12.0 + lodash.truncate: 4.4.2 + slice-ansi: 4.0.0 + string-width: 4.2.3 + strip-ansi: 6.0.1 + dev: true + + /tailwindcss@3.4.1: + resolution: {integrity: sha512-qAYmXRfk3ENzuPBakNK0SRrUDipP8NQnEY6772uDhflcQz5EhRdD7JNZxyrFHVQNCwULPBn6FNPp9brpO7ctcA==} + engines: {node: '>=14.0.0'} + hasBin: true + dependencies: + '@alloc/quick-lru': 5.2.0 + arg: 5.0.2 + chokidar: 3.6.0 + didyoumean: 1.2.2 + dlv: 1.1.3 + fast-glob: 3.3.2 + glob-parent: 6.0.2 + is-glob: 4.0.3 + jiti: 1.21.0 + lilconfig: 2.1.0 + micromatch: 4.0.5 + normalize-path: 3.0.0 + object-hash: 3.0.0 + picocolors: 1.0.0 + postcss: 8.4.35 + postcss-import: 15.1.0(postcss@8.4.35) + postcss-js: 4.0.1(postcss@8.4.35) + postcss-load-config: 4.0.2(postcss@8.4.35) + postcss-nested: 6.0.1(postcss@8.4.35) + postcss-selector-parser: 6.0.15 + resolve: 1.22.8 + sucrase: 3.35.0 + transitivePeerDependencies: + - ts-node + dev: true + + /term-size@2.2.1: + resolution: {integrity: sha512-wK0Ri4fOGjv/XPy8SBHZChl8CM7uMc5VML7SqiQ0zG7+J5Vr+RMQDoHa2CNT6KHUnTGIXH34UDMkPzAUyapBZg==} + engines: {node: '>=8'} + dev: false + + /text-table@0.2.0: + resolution: {integrity: sha512-N+8UisAXDGk8PFXP4HAzVR9nbfmVJ3zYLAWiTIoqC5v5isinhr+r5uaO8+7r3BMfuNIufIsA7RdpVgacC2cSpw==} + dev: true + + /thenify-all@1.6.0: + resolution: {integrity: sha512-RNxQH/qI8/t3thXJDwcstUO4zeqo64+Uy/+sNVRBx4Xn2OX+OZ9oP+iJnNFqplFra2ZUVeKCSa2oVWi3T4uVmA==} + 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 + + /timsort@0.3.0: + resolution: {integrity: sha512-qsdtZH+vMoCARQtyod4imc2nIJwg9Cc7lPRrw9CzF8ZKR0khdr8+2nX80PBhET3tcyTtJDxAffGh2rXH4tyU8A==} + + /to-regex-range@5.0.1: + resolution: {integrity: sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==} + engines: {node: '>=8.0'} + dependencies: + is-number: 7.0.0 + + /tr46@0.0.3: + resolution: {integrity: sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw==} + dev: true + + /ts-interface-checker@0.1.13: + resolution: {integrity: sha512-Y/arvbn+rrz3JCKl9C4kVNfTfSm2/mEp5FSz5EsZSANGPSlQrpRI5M4PKF+mJnE52jOO90PnPSc3Ur3bTQw0gA==} + dev: true + + /tslib@2.6.2: + resolution: {integrity: sha512-AEYxH93jGFPn/a2iVAwW87VuUIkR1FVUKB77NwMF7nBTDkDrrT/Hpt/IrCJ0QXhW27jTBDcf5ZY7w6RiqTMw2Q==} + + /type-check@0.4.0: + resolution: {integrity: sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==} + engines: {node: '>= 0.8.0'} + dependencies: + prelude-ls: 1.2.1 + dev: true + + /type-fest@0.20.2: + resolution: {integrity: sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==} + engines: {node: '>=10'} + + /update-browserslist-db@1.0.13(browserslist@4.22.3): + resolution: {integrity: sha512-xebP81SNcPuNpPP3uzeW1NYXxI3rxyJzF3pD6sH4jE7o/IX+WtSpwnVU+qIsDPyk0d3hmFQ7mjqc6AtV604hbg==} + hasBin: true + peerDependencies: + browserslist: '>= 4.21.0' + dependencies: + browserslist: 4.22.3 + escalade: 3.1.2 + picocolors: 1.0.0 + + /uri-js@4.4.1: + resolution: {integrity: sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==} + dependencies: + punycode: 2.3.1 + dev: true + + /util-deprecate@1.0.2: + resolution: {integrity: sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==} + dev: true + + /utility-types@3.11.0: + resolution: {integrity: sha512-6Z7Ma2aVEWisaL6TvBCy7P8rm2LQoPv6dJ7ecIaIixHcwfbJ0x7mWdbcwlIM5IGQxPZSFYeqRCqlOOeKoJYMkw==} + engines: {node: '>= 4'} + + /weak-lru-cache@1.2.2: + resolution: {integrity: sha512-DEAoo25RfSYMuTGc9vPJzZcZullwIqRDSI9LOy+fkCJPi6hykCnfKaXTuPBDuXAUcqHXyOgFtHNp/kB2FjYHbw==} + + /webidl-conversions@3.0.1: + resolution: {integrity: sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ==} + dev: true + + /whatwg-url@5.0.0: + resolution: {integrity: sha512-saE57nupxk6v3HY35+jzBwYa0rKSy0XR8JSxZPwgLr7ys0IBzhGviA1/TUGJLmSVqs8pb9AnvICXEuOHLprYTw==} + dependencies: + tr46: 0.0.3 + webidl-conversions: 3.0.1 + dev: true + + /which@1.3.1: + resolution: {integrity: sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==} + hasBin: true + dependencies: + isexe: 2.0.0 + dev: true + + /which@2.0.2: + resolution: {integrity: sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==} + engines: {node: '>= 8'} + hasBin: true + dependencies: + isexe: 2.0.0 + dev: true + + /wrap-ansi@7.0.0: + resolution: {integrity: sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==} + engines: {node: '>=10'} + dependencies: + ansi-styles: 4.3.0 + string-width: 4.2.3 + strip-ansi: 6.0.1 + dev: true + + /wrap-ansi@8.1.0: + resolution: {integrity: sha512-si7QWI6zUMq56bESFvagtmzMdGOtoxfR+Sez11Mobfc7tm+VkUckk9bW2UeffTGVUbOksxmSw0AA2gs8g71NCQ==} + engines: {node: '>=12'} + dependencies: + ansi-styles: 6.2.1 + string-width: 5.1.2 + strip-ansi: 7.1.0 + dev: true + + /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==} + engines: {node: ^14.17.0 || ^16.13.0 || >=18.0.0} + dependencies: + imurmurhash: 0.1.4 + signal-exit: 4.1.0 + dev: true + + /xml@1.0.1: + resolution: {integrity: sha512-huCv9IH9Tcf95zuYCsQraZtWnJvBtLVE0QHMOs8bWyZAFZNDcYjsPq1nEx8jKA9y+Beo9v+7OBPRisQTjinQMw==} + dev: true + + /yallist@4.0.0: + resolution: {integrity: sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==} + + /yaml@2.3.4: + resolution: {integrity: sha512-8aAvwVUSHpfEqTQ4w/KMlf3HcRdt50E5ODIQJBw1fQ5RL34xabzxtUlzTXVqc4rkZsPbvrXKWnABCD7kWSmocA==} + engines: {node: '>= 14'} + dev: true + + /yocto-queue@0.1.0: + resolution: {integrity: sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==} + engines: {node: '>=10'} + dev: true diff --git a/src/impressum.html b/src/impressum.html new file mode 100644 index 0000000..6cf53cd --- /dev/null +++ b/src/impressum.html @@ -0,0 +1,163 @@ + + + + + Kitas in Flensburg - Impressum + + + + + + +
+
+ +
+
+

Impressum

+
+
+
Adresse:
+
OK Lab Flensburg
Am Nordertor 2
24939 Flensburg

+
+
+
E-Mail:
+
+ oklabflensburg@grain.one +
+
+
+
Telefon:
+
+ +4917659978074 +
+
+
+
+
+

Haftungsausschluss

+

Inhaltlich verantwortlich gemäß § 55 Abs. 2 RStV ist Aurelius Wendelken.

+

Haftung für Inhalte

+

Die Inhalte unserer Seiten wurden mit größter Sorgfalt erstellt. Für die Richtigkeit, Vollständigkeit und Aktualität der Inhalte können wir jedoch keine Gewähr übernehmen. Als Diensteanbieter sind wir gemäß § 7 Abs.1 TMG für eigene Inhalte auf diesen Seiten nach den allgemeinen Gesetzen verantwortlich. Nach § 8 bis 10 TMG sind wir als Diensteanbieter jedoch nicht verpflichtet, übermittelte oder gespeicherte fremde Informationen zu überwachen oder nach Umständen zu forschen, die auf eine rechtswidrige Tätigkeit hinweisen. Verpflichtungen zur Entfernung oder Sperrung der Nutzung von Informationen nach den allgemeinen Gesetzen bleiben hiervon unberührt. Eine diesbezügliche Haftung ist jedoch erst ab dem Zeitpunkt der Kenntnis einer konkreten Rechtsverletzung möglich. Bei Bekanntwerden von entsprechenden Rechtsverletzungen werden wir diese Inhalte umgehend entfernen.

+

Haftung für Links

+

Unser Angebot enthält Links zu externen Webseiten Dritter, auf deren Inhalte wir keinen Einfluss haben. Deshalb können wir für diese fremden Inhalte auch keine Gewähr übernehmen. Für die Inhalte der verlinkten Seiten ist stets der jeweilige Anbieter oder Betreiber der Seiten verantwortlich. Die verlinkten Seiten wurden zum Zeitpunkt der Verlinkung auf mögliche Rechtsverstöße überprüft. Rechtswidrige Inhalte waren zum Zeitpunkt der Verlinkung nicht erkennbar. Eine permanente inhaltliche Kontrolle der verlinkten Seiten ist jedoch ohne konkrete Anhaltspunkte einer Rechtsverletzung nicht zumutbar. Bei Bekanntwerden von Rechtsverletzungen werden wir derartige Links umgehend entfernen.

+

Urheberrecht

+

Die durch die Seitenbetreiber erstellten Inhalte und Werke auf diesen Seiten unterliegen dem deutschen Urheberrecht, sofern diese nicht unter der CC0 1.0 Universell Lizenz veröffentlicht worden sind. Soweit die Inhalte auf dieser Seite nicht vom Betreiber erstellt wurden, werden die Urheberrechte Dritter beachtet. Insbesondere werden Inhalte Dritter als solche gekennzeichnet. Sollten Sie trotzdem auf eine Urheberrechtsverletzung aufmerksam werden, bitten wir um einen entsprechenden Hinweis. Bei Bekanntwerden von Rechtsverletzungen werden wir derartige Inhalte umgehend entfernen.

+
+
+

Datenschutzerklärung

+
+
+

Das Open Knowledge Lab Flensburg, Am Nordertor 2, 24939 Flensburg, Deutschland (nachfolgend als "OK Lab Flensburg" oder "wir" bezeichnet) betreibt die im Internet unter und den jeweils dazu gehörenden Unterverzeichnissen abrufbare Internetseite (nachfolgend die "Website" genannt).

+

Das Open Knowledge Lab Flensburg möchte Ihnen mit dieser Datenschutzerklärung erläutern, welche Daten in welcher Form verarbeitet werden, wenn Sie unsere Website besuchen. Hiermit kommen wir zugleich unserer Informationspflicht gem. Art. 13 Datenschutz-Grundverordnung (DSGVO) Ihnen gegenüber nach.

+

I. Verantwortlicher und Kontaktmöglichkeiten des Datenschutzbeauftragten

+
+
+
Die datenschutzrechtlich Verantwortliche für die auf unserer Website stattfindenden Datenverarbeitungen ist das:
+
OK Lab Flensburg
Am Nordertor 2
24939 Flensburg

+
+
+
E-Mail:
+
+ oklabflensburg@grain.one +
+
+
+
Telefon:
+
+ +4917659978074 +
+
+
+
+
+
Unser Datenschutzbeauftragter ist erreichbar unter:
+
OK Lab Flensburg
Am Nordertor 2
24939 Flensburg

+
+
+
E-Mail:
+
+ oklabflensburg@grain.one +
+
+
+
Telefon:
+
+ +4917659978074 +
+
+
+

II. Personenbezogene Daten, Zwecke und Rechtsgrundlage der Datenverarbeitung

+

1. Personenbezogene Daten

+

Nach der DSGVO sind personenbezogene Daten "alle Informationen, die sich auf eine identifizierte oder identifizierbare natürliche Person (im Folgenden "betroffene Person") beziehen; als identifizierbar wird eine natürliche Person angesehen, die direkt oder indirekt, insbesondere mittels Zuordnung zu einer Kennung wie einem Namen, zu einer Kennnummer, zu Standortdaten, zu einer Online-Kennung oder zu einem oder mehreren besonderen Merkmalen identifiziert werden kann, die Ausdruck der physischen, physiologischen, genetischen, psychischen, wirtschaftlichen, kulturellen oder sozialen Identität dieser natürlichen Person sind.

+

2. Allgemeine Nutzung der Website

+

Wir erheben und speichern im Zuge Ihres Besuchs auf unserer Website keine personenbezogenen Daten. Unbeschadet der vorstehenden grundsätzlichen Gegebenheiten registriert aber der Webserver unseres Hosters automatisch Zugriffe auf die Websites und dabei insbesondere Ihre IP-Adresse. Zudem legt unser Hoster zur Erhaltung der Systemsicherheit sog. Logfiles an. Diese Logfiles enthalten die folgenden Informationen:

+
    +
  1. die IP - Adresse
  2. +
  3. Datum des Zugriffs
  4. +
  5. die URL
  6. +
  7. Inhalte auf die zugegriffen wurde sowie
  8. +
  9. die übertragenen Informationen
  10. +
+

Diese Informationen bleiben für uns anonym. Ein Rückschluss auf eine Person ist somit nicht möglich.

+

Nehmen Sie unter der auf unserer Website angegebenen E-Mail-Adresse Kontakt zu uns auf, teilen Sie uns zumindest Ihre E-Mail-Adresse mit, sowie gegebenenfalls weitere Informationen, die Sie in Ihrer E-Mail preisgeben. Damit wir Ihr Anliegen bearbeiten können, müssen wir diese Daten verarbeiten.

+

3. Zwecke und Rechtsgrundlage der Datenverarbeitung

+

Die Verarbeitung Ihrer IP-Adresse während des Verbindungsaufbaus erfolgt, damit wir Ihnen unsere Website zur Verfügung stellen können. Sie basiert auf Art. 6 Abs. 1 lit. f) DSGVO. Unser berechtigtes Interesse besteht im genannten Zweck.

+

Die Verarbeitung im Rahmen einer Kontaktaufnahme erfolgt, damit wir Ihre Anfrage bearbeiten und beantworten könne. Die Rechtsgrundlage ist Art. 6 Abs. 1 lit. f) DSGVO. Unser berechtigtes Interesse liegt im soeben genannten Zweck.

+

III. Empfänger der Daten

+

Die jeweiligen aktiven aktiven Projektbeteiligten haben ggf. Zugriff auf Ihre Daten, sofern diese für die Bearbeitung der Anliegen zuständig sind. Zudem setzen wir externe Dienstleister ein, soweit wir Leistungen nicht oder nicht sinnvoll selbst vornehmen können. Diese externen Dienstleister sind dabei vor allem Anbieter von IT-Dienstleistungen und Telekommunikationsdienste.

+

Eine übermittlung in Drittstaaten findet grundsätzlich nicht und nur dann statt, soweit sie zur Ausführung Ihrer Aufträge erforderlich ist, gesetzlich vorgeschrieben ist oder Sie uns Ihre Einwilligung hierzu erteilt haben.

+

IV. Speicherdauer

+

Ihre E-Mails und Kontaktaufnahmen speichern wir so lange, wie es zur Bearbeitung Ihrer Anfrage erforderlich ist und speichern Sie anschließend für einen Zeitraum von 3 Jahren, falls Sie sich bezugnehmend auf Ihre ursprüngliche Frage noch einmal an uns wenden.

+

V. Betroffenenrechte

+

Die Datenschutz-Grundverordnung garantiert Ihnen gewisse Rechte, die Sie uns gegenüber - soweit die gesetzlichen Voraussetzungen vorliegen - geltend machen können.

+
    +
  1. Art. 15 DSGVO - Auskunftsrecht der betroffenen Person:
    Sie haben das Recht, von uns eine Bestätigung darüber zu verlangen, ob Sie betreffende personenbezogene Daten verarbeitet werden und wenn ja, welche dies sind sowie die näheren Umstände der Datenverarbeitung.
  2. +
  3. Art. 16 DSGVO - Recht auf Berichtigung:
    Sie haben das Recht, von uns unverzüglich die Berichtigung Sie betreffender unrichtiger personenbezogener Daten zu verlangen. Dabei haben Sie unter Berücksichtigung der Zwecke der Verarbeitung auch das Recht, die Vervollständigung unvollständiger personenbezogener Daten - auch mittels einer ergänzenden Erklärung - zu verlangen.
  4. +
  5. Art. 17 DSGVO - Recht auf Löschung:
    Sie haben das Recht, von uns zu verlangen, dass Sie betreffende personenbezogene Daten unverzüglich gelöscht werden. Beachten Sie hier bitte die unter Punkt II. 4 beschriebene Ausnahme
  6. +
  7. Art. 18 DSGVO - Recht auf Einschränkung der Verarbeitung:
    Sie haben das Recht, von uns die Einschränkung der Verarbeitung zu verlangen.
  8. +
  9. Art. 20 DSGVO - Recht auf Datenübertragbarkeit:
    Sie haben das Recht, im Falle der Verarbeitung aufgrund einer Einwilligung oder zur Erfüllung eines Vertrags, die Sie betreffenden personenbezogenen Daten, die Sie uns bereitgestellt haben, in einem strukturierten, gängigen und maschinenlesbaren Format zu erhalten, und diese Daten einem anderen Verantwortlichen ohne Behinderung durch uns zu übermitteln oder die Daten direkt an den anderen Verantwortlichen übermitteln zu lassen, soweit dies technisch machbar ist.
  10. +
  11. Art. 21 DSGVO - Widerspruchsrecht:
    +

    Sie haben das Recht, aus Gründen, die sich aus ihrer besonderen Situation ergeben, jederzeit gegen die Verarbeitung Sie betreffender personenbezogener Daten, die aufgrund eines berechtigten Interesses unsererseits oder zur Wahrung einer Aufgabe im öffentlichen Interesse erforderlich ist, oder die in Ausübung öffentlicher Gewalt erfolgt, Widerspruch einzulegen.

    +

    Legen Sie Widerspruch ein, werden wir Ihre personenbezogenen Daten nicht mehr verarbeiten, es sei denn, wir können zwingende schutzwürdige Gründe für die Verarbeitung nachweisen, die Ihre Interessen, Rechte und Freiheiten überwiegen, oder die Verarbeitung dient der Geltendmachung, Ausübung oder Verteidigung von Rechtsansprüchen.

    +

    Soweit wir Ihre personenbezogenen Daten verarbeiten, um Direktwerbung zu betreiben, haben Sie das Recht, jederzeit Widerspruch gegen die Verarbeitung einzulegen. Widersprechen Sie der Verarbeitung für Zwecke der Direktwerbung, so werden wir Ihre personenbezogenen Daten nicht mehr für diese Zwecke verarbeiten.

    +
  12. +
  13. Art. 77 DSGVO i. V. m. § 19 BDSG - Recht auf Beschwerde bei einer Aufsichtsbehörde:
    Sie haben das Recht, jederzeit Beschwerde bei einer Aufsichtsbehörde, insbesondere in dem Mitgliedstaat ihres Aufenthaltsorts, ihres Arbeitsplatzes oder des Orts des mutmaßlichen Verstoßes, einzulegen, wenn Sie der Ansicht sind, dass die Verarbeitung der sie betreffenden personenbezogenen Daten gegen geltendes Recht verstößt.
  14. +
+

VI. Pflicht zur Bereitstellung von Daten

+

Sie haben keine vertragliche oder gesetzliche Pflicht uns personenbezogene Daten bereitzustellen. Allerdings sind wir ohne die von Ihnen mitgeteilten Daten nicht in der Lage, Ihnen unsere Services anzubieten.

+

VII. Bestehen von automatisierten Entscheidungsfindungen (einschließlich Profiling)

+

Wir verwenden keine automatisierten Entscheidungsfindungen, die Ihnen gegenüber rechtliche Wirkungen entfaltet oder Sie beeinträchtigt.

+

VIII. Internetspezifische Datenverarbeitungen

+

1. Matomo: Während der Nutzung unserer Internetseiten werden durch uns automatisch technische Zugriffsdaten aufgezeichnet und ausgewertet. Hierfür benutzen wir das Tool "Matomo", ein Open-Source-Programm für Webanalytik, welches statistische Kennwerte zur Nutzung unserer Website auswertet. Diese Daten können jedoch nicht einer bestimmten Person zugeordnet werden; der einzelne Benutzer bleibt hierbei anonym. Weitere Informationen zu "Matomo" finden Sie auf der Website https://matomo.org.

+

Zu diesen Daten gehören zum Beispiel

+
    +
  1. Die um die letzten beiden Oktette gekürzte IP-Adresse,
  2. +
  3. Informationen über den verwendeten Internet-Browser und das verwendete Betriebssystem,
  4. +
  5. der Domain-Name der Website, von der aus ein Besuch unserer Internet-Seiten erfolgt,
  6. +
  7. die durchschnittliche Verweildauer in unserem Angebot und
  8. +
  9. die in unserer Web-Site aufgerufenen Seiten.
  10. +
+

Durch die Entfernung des folgenden Hakens können Sie verhindern, dass wir mittels Matomo Ihre Besuche zählen. In diesem Fall wird ein Cookie gesetzt um uns zu signalisieren, dass Sie der Nutzung widersprochen haben.

+

Bitte beachten Sie, dass die jeweiligen Einstellungen bzgl. Cookies nur für Ihr aktuell benutztes Gerät und Ihren aktuell benutzten Browser wirksam sind. Sollten Sie ein anderes Gerät oder einen anderen Browser benutzen, müssen Sie in der Regel die Einstellungen erneut vornehmen. Zudem unterstützen wir die "Do not Track" Funktion Ihres Browsers. Hiermit können Sie uns aktiv über Ihre Browsereinstellungen mitteilen, ob Sie eine Aufzeichnung Ihrer Aktivitäten wünschen oder nicht. Haben Sie "Do not Track" aktiviert, erfolgt keine Aufzeichnung Ihrer Aktivitäten.

+

Die Rechtsgrundlage für die Verwendung von Matomo findet sich in Art. 6 Abs. 1 lit. f) DSGVO. Unser berechtigtes Interesse besteht darin, dass wir die Nutzung unserer Website zu deren Verbesserung und Optimierung auswerten. Die so erfassten Daten werden für einen Zeitraum von 24 Monaten gespeichert.

+

2. Einbindung von Youtube Videos: Wir haben YouTube-Videos in unser Online-Angebot eingebunden. YouTube ist ein Broadcasting-Dienst, der uns das kostenlose Einstellen und Verlinken von Videoclips zur Darstellung unseres Unternehmens ermöglicht. Der Dienst auf youtube.com wird bereitgestellt von der Google Ireland Limited, Gordon House, Barrow Street, Dublin 4, Irland ("Google").

+

Die Videos in unserem Online-Angebot sind auf youtube.com gespeichert und von unserer Website aus direkt abspielbar. Die Videos sind alle im "erweiterten Datenschutz-Modus" / "Zwei-Klick-Lösung" eingebunden. Das bedeutet, dass keine Daten über Sie als Nutzer an YouTube übertragen werden, wenn Sie die Videos nicht abspielen. Erst wenn Sie die Videos abspielen, werden personenbezogene Daten gemäß Absatz 2 an Google übertragen und wie dort dargestellt verarbeitet. Auf diese Datenübertragung und die weitere Verarbeitung durch Google haben wir keinen Einfluss.

+

Durch den Besuch auf der Website und das Abspielen der Videos erhält Google die Information, dass Sie die entsprechende Unterseite unserer Website aufgerufen haben. Zudem werden die unter Ziffer 2 dieser Datenschutzerklärung genannten Daten an Google übermittelt. Dies erfolgt unabhängig davon, ob YouTube ein Nutzerkonto über Sie führt, in das Sie mittels Google eingeloggt sind, oder ob kein Nutzerkonto besteht. Wenn Sie bei Google eingeloggt sind, werden Ihre Daten direkt Ihrem Konto zugeordnet. Wenn Sie die Zuordnung mit Ihrem Profil bei YouTube nicht wünschen, müssen Sie sich vor Betätigung des Play-Buttons ausloggen. Google speichert Ihre Daten als Nutzungsprofile und nutzt sie für Zwecke der Werbung, Marktforschung und/oder bedarfsgerechten Gestaltung seiner Dienste. Eine solche Auswertung erfolgt insbesondere (auch für nicht eingeloggte Nutzer) zur Erbringung von bedarfsgerechter Werbung und um andere Nutzer des sozialen Netzwerks über Ihre Aktivitäten auf unserer Website zu informieren, wobei uns die Einzelheiten unbekannt sind. Ihnen steht ein Widerspruchsrecht zu gegen die Bildung dieser Nutzerprofile, wobei Sie sich zur Ausübung dessen an Google richten müssen. Im übrigen gelten für Sie die unter Ziffer 5 dieser Datenschutzerklärung genannten Betroffenenrechte.

+

Weitere Informationen zu Zweck und Umfang der Datenerhebung und ihrer Verarbeitung durch Google erhalten Sie in den Datenschutzhinweisen von Google. Dort erhalten Sie auch weitere Informationen zu Ihren Rechten und Einstellungsmöglichkeiten zum Schutze Ihrer Privatsphäre. Google verarbeitet Ihre personenbezogenen Daten auch in den USA und hat sich zur Wahrung eines angemessenen Datenschutzniveaus iSd Art. 44 ff DSGVO dem EU- US-Privacy-Shield unterworfen.

+

IX. Wenn Sie Anmerkungen oder Fragen haben

+

Wir treffen alle erdenklichen Vorkehrungen zum Schutz und zur Sicherheit Ihrer Daten. Ihre Fragen und Kommentare zum Datenschutz sind uns willkommen, schreiben Sie einfach eine Mail an oklabflensburg@grain.one.

+

Flensburg, Januar 2024

+
+
+
+ +
+ + diff --git a/src/imprint.js b/src/imprint.js new file mode 100644 index 0000000..f2ac6b5 --- /dev/null +++ b/src/imprint.js @@ -0,0 +1,9 @@ +const origin = `${window.location.protocol}//${window.location.hostname}` +console.log(origin) + +const websiteOrigin = document.querySelector('#websiteOrigin') +websiteOrigin.href = origin +websiteOrigin.innerHTML = origin + +const matomoDisagreeOrigin = document.querySelector('#matomoDisagreeOrigin') +matomoDisagreeOrigin.href = `${origin}/index.php?module=CoreAdminHome&action=optOut&language=de` \ No newline at end of file diff --git a/src/index.html b/src/index.html new file mode 100644 index 0000000..1ff7cda --- /dev/null +++ b/src/index.html @@ -0,0 +1,74 @@ + + + + + Stadtplan mit Baumkataster für Flensburg + + + + + + + + + + + + +
+
+
+
+
+

Baumkataster

+

Stadtplan Flensburg

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

    Hintergrund

    +

    Das Straßenbaumkataster der Stadt Flensburg wird von dem Technischen Betriebszentrum AöR (TBZ Flensburg) im Esri Shape Format über das Open Data Portal des Landes Schleswig-Holstein zum kostenlosen Download angeboten.

    +

    Haftungsausschluss

    +

    Das OK Lab Flensburg hostet die zum Download bereitgestellten Daten des TBZ Flensburg ohne inhaltliche Änderung als Feature Service auf dieser Webseite und stellt diese auf der Karte für Analysen zur Verfügung. Alle Daten werden ungeprüft und ohne Gewähr auf deren Genauigkeit zur Verfügung gestellt. Das OK Lab Flensburg übernimmt hierfür keinerlei Haftung und Gewähr.

    +

    Quellcode

    +

    Der aktuelle Entwicklungsstand kann auf GitHub eingesehen werden und von jeder Kommune, Stadt oder Land kostenfrei und lizenzfrei genutzt und redeployed werden.

    +
    +
    +
    + +
    + + + + diff --git a/src/lizenz.html b/src/lizenz.html new file mode 100644 index 0000000..0cd7593 --- /dev/null +++ b/src/lizenz.html @@ -0,0 +1,53 @@ + + + + + Kitas in Flensburg - Zweckerklärung + + + + + +
    +
    + +
    +
    +

    CC0 1.0 Universal

    +

    Zweckerklärung

    +

    Die Gesetze der meisten Rechtsordnungen der Welt weisen dem Schöpfer und den nachfolgenden Inhabern (zusammengenommen die "Inhaber") automatisch ausschließliche Urheberrechte und verwandte Schutzrechte (wie unten definiert) am ursprünglichen Werk und/oder an einer Datenbank zu (zusammengenommen das "Werk").

    +

    Bestimmte Inhaber möchten diese Rechte an einem Werk aufgeben, um zu einer Allmende von schöpferischen, kulturellen und wissenschaftlichen Werken ("Allmende") beizutragen, auf die die Öffentlichkeit verlässlich und ohne Furcht vor späteren Ansprüchen aus Rechtsverletzungen aufbauen und die sie so frei wie möglich und in jedweder möglichen Form und für beliebige Zwecke, einschließlich umfassend kommerzieller Zwecke, verändern, in andere Werke einbinden, wiederverwenden und weiterverbreiten kann. Diese Inhaber mögen etwa deshalb zur Allmende beitragen, weil sie das Ideal einer freien Kultur und die weitere Erzeugung von kreativen, kulturellen und wissenschaftlichen Werken fördern wollen oder, um Reputation oder eine weitere Verbreitung ihres Werkes auch durch die Nutzung und Bemühungen anderer zu erreichen.

    +

    Wegen dieser und/oder anderer Zwecke und Beweggründe und ohne jegliche Erwartung einer zusätzlichen Gegenleistung oder Kompensation entschließt sich die Person, die CC0 mit einem Werk verknüpft (der bzw. die "Erklärende"), soweit sie Inhaberin von Urheberrechten und verwandten Schutzrechten an dem Werk ist, aus freien Stücken, CC0 auf das Werk anzuwenden und das Werk zu den darin enthaltenen Bedingungen und im Bewusstsein ihrer Urheberrechte und verwandten Schutzrechte am Werk sowie der Bedeutung und der beabsichtigten Rechtsfolgen von CC0 auf diese Rechte öffentlich zu verbreiten.

    +

    1. Urheberrecht und verwandte Schutzrechte

    +

    Ein unter CC0 bereitgestelltes Werk kann urheberrechtlich und durch dem Urheberrecht verwandte Rechte geschützt sein ("Urheberrecht und verwandte Schutzrechte"). Zu den Urheberrechten und verwandten Schutzechten gehören insbesondere:

    +
      +
    1. das Recht zur Vervielfältigung, Bearbeitung, Verbreitung, Aufführung, Ausstellung, öffentlichen Wiedergabe und Übersetzung eines Werks;
    2. +
    3. das Urheberpersönlichkeitsrecht des/der ursprünglichen Urheber(s) und/oder ausübenden Künstler(s);
    4. +
    5. Bild- und Persönlichkeitsrechte mit Bezug auf das Bild oder Abbild einer Person in einem Werk;
    6. +
    7. Rechte zum Schutz vor unlauterem Wettbewerb mit Bezug auf ein Werk, vorbehaltlich der Beschränkungen von Ziffer 4(a), siehe unten;
    8. +
    9. Rechte zum Schutz der Gewinnung, Verbreitung, Nutzung und Wiederverwendung von in einem Werk enthaltenen Daten;
    10. +
    11. Datenbankrechte (wie sie sich etwa aus der Richtlinie 96/9/EG des Europäischen Parlaments und des Rats vom 11. März 1996 über den rechtlichen Schutz von Datenbanken und der jeweiligen nationalen Umsetzung ergeben, einschließlich aller sich aus künftigen Änderungen oder Nachfolgeregelungen der Richtlinie ergebenden Rechte), und
    12. +
    13. andere ähnliche, gleichwertige oder entsprechende Rechte auf der Grundlage des anwendbaren Rechts oder völkerrechtlichen Vereinbarungen sowie ihrer jeweiligen nationalen Umsetzungen weltweit.
    14. +
    +

    2. Verzicht

    +

    Im größtmöglichen rechtlich zulässigen Umfang, jedoch nicht im Widerspruch zum anwendbaren Recht, verzichtet der/die Erklärende hiermit offen, vollständig, dauerhaft, unwiderruflich und bedingungslos auf alle Urheberrechte und verwandten Schutzrechte des/der Erklärenden und der zugehörigen Ansprüche und Klagegründe, unabhängig davon, ob diese zum jetzigen Zeitpunkt bekannt sind oder nicht (einschließlich bestehender und zukünftiger Ansprüche und Klagegründe), am Werk und zwar (i) für alle Territorien weltweit, (ii) für die maximale nach anwendbarem Recht bzw. völkerrechtlicher Vereinbarung vorgesehene Schutzdauer (einschließlich künftiger Verlängerungen), (iii) in allen derzeitigen und künftigen Medien und für jedwede Anzahl an Exemplaren und Kopien und (iv) hinsichtlich jedweder Zwecke einschließlich, aber nicht beschränkt auf kommerzielle Zwecke, Werbezwecke und Zwecke der Verkaufsförderung ("Verzicht"). Der/die Erklärende erklärt den Verzicht zugunsten jedes Mitglieds der Öffentlichkeit insgesamt und zum Nachteil der Erben und Rechtsnachfolger des/der Erklärenden mit der uneingeschränkten Absicht, dass dieser Verzicht weder der Möglichkeit zum Widerruf noch zur Anfechtung, Aufhebung oder Kündigung oder einer anderen rechtlichen oder wiederherstellenden Maßnahme unterliegt, die die ungestörte Nutzung des Werks durch die Öffentlichkeit im Sinne der ausdrücklichen Zweckerklärung des/der Erklärenden vereiteln würde.

    +

    3. Public License als Auffangregelung

    +

    Sollte irgendein Teil des Verzichts aus irgendeinem Grund nach anwendbarem Recht als ungültig oder unwirksam beurteilt werden, so soll der Verzicht im größtmöglichen rechtlich zulässigen Umfang unter Berücksichtigung der ausdrücklichen Zweckerklärung des/der Erklärenden aufrechterhalten werden. So weit eine etwaige Beurteilung des Verzichts wie vorgenannt dann reicht, gewährt der/die Erklärende hiermit zusätzlich jeder davon betroffenen Person eine lizenzkostenfreie, nicht übertragbare, nicht unterlizenzierbare, nicht- ausschließliche, unwiderrufliche und bedingungslose Lizenz zur Wahrnehmung des Urheberrechts und der verwandten Schutzrechte der/des Erklärenden am Werk, und zwar (i) für alle Territorien weltweit, (ii) für die maximale nach anwendbarem Recht bzw. völkerrechtlicher Vereinbarung vorgesehene Schutzdauer (einschließlich künftiger Verlängerungen), (iii) in allen derzeitigen und künftigen Medien und für jedwede Anzahl an Exemplaren und Kopien und (iv) für jedweden Zweck einschließlich kommerzieller Zwecke, Werbezwecke und Zwecke der Verkaufsförderung (nachstehend als "Lizenz" bezeichnet). Die Lizenz gilt als ab dem Tag wirksam, an dem der/die Erklärende CC0 auf das Werk angewandt hat. Sofern ein Bestandteil der Lizenz aus irgendeinem Grund als nach anwendbarem Recht ungültig oder unwirksam beurteilt werden sollte, so soll sich die betreffende teilweise Ungültigkeit oder Unwirksamkeit nicht auf die Gültigkeit der übrigen Lizenz auswirken, und für diesen Fall versichert der/die Erklärende, dass er/sie weder (i) ein ihr oder ihm verbleibendes Urheberrecht und verwandtes Schutzrecht am Werk ausüben noch (ii) damit zusammenhängende Ansprüche und Klagegründe in Bezug auf das Werk geltend machen wird, soweit all dies in irgendeiner Weise der ausdrücklichen Zweckerklärung des/der Erklärenden entgegensteht.

    +

    4. Beschränkungen und Haftungsausschluss

    +
      +
    1. Durch dieses Dokument wird nicht auf Marken- oder Patentrechte des/der Erklärenden verzichtet oder diese aufgegeben, niedergelegt, lizenziert oder anderweitig berührt.
    2. +
    3. Der/die Erklärende bietet sein bzw. ihr Werk so an, wie es ist, und gibt in Bezug auf das Werk keinerlei Zusicherungen oder Gewährleistungsversprechen welcher Art auch immer ab, seien diese ausdrücklich oder konkludent, gesetzlich oder anderweitig, was insbesondere auch gilt hinsichtlich Rechtsmängelgewährleistung, Verkehrsfähigkeit und Eignung für einen bestimmten Zweck, Nichtverletzung von Rechten, Nichtvorliegen verborgener oder anderer Mängel, Richtigkeit und für das Vorliegen oder Nichtvorliegen von Fehlern, unabhängig davon, ob diese erkennbar sind oder nicht, all dies jeweils im nach anwendbarem Recht größtmöglich zulässigen Umfang.
    4. +
    5. Der/die Erklärende weist eine Verantwortlichkeit für die Klärung von Rechten anderer Personen von sich, sofern solche Rechte auf das Werk oder seine Nutzung anwendbar sein sollten, was insbesondere auch gilt hinsichtlich Urheberrechten und verwandter Schutzrechte anderer Personen am Werk. Des weiteren weist der/die Erklärende eine Verantwortlichkeit für die Einholung etwaig notwendiger Zustimmungen, Erlaubnisse oder anderer Rechte von sich, die für eine Nutzung des Werks erforderlich sein könnten.
    6. +
    7. Der/die Erklärende ist sich bewusst und erkennt an, dass Creative Commons nicht Partei dieser Vereinbarung ist und keinerlei Pflichten oder Obliegenheiten in Bezug auf CC0 oder die Nutzung des Werkes hat.
    8. +
    +
    + +
    + + diff --git a/src/main.css b/src/main.css new file mode 100644 index 0000000..d12f34f --- /dev/null +++ b/src/main.css @@ -0,0 +1,181 @@ +@tailwind base; +@tailwind components; +@tailwind utilities; + +:root { + font-family: Inter, sans-serif; +} + +@supports (font-variation-settings: normal) { + :root { + font-family: InterVariable, sans-serif; font-optical-sizing: auto; + } +} + +@font-face { + font-family: InterVariable; + font-style: normal; + font-weight: 100 900; + font-display: swap; + src: url('../static/fonts/InterVariable.woff2') format('woff2'); +} + +@font-face { + font-family: InterVariable; + font-style: italic; + font-weight: 100 900; + font-display: swap; + src: url('../static/fonts/InterVariable-Italic.woff2') format('woff2'); +} + +html, body { + margin: 0; + padding: 0; +} + +.table { + border-collapse: separate; + border-spacing: 5em; +} + +.list-circle { + list-style-type: circle; +} + +.list-square { + list-style-type: square; +} + +.list-decimal-leading-zero { + list-style-type: decimal-leading-zero; +} + +.list-lower-roman { + list-style-type: lower-roman; +} + +.list-upper-roman { + list-style-type: upper-roman; +} + +.list-lower-greek { + list-style-type: lower-greek; +} + +.list-lower-latin { + list-style-type: lower-latin; +} + +.list-upper-latin { + list-style-type: upper-latin; +} + +.list-armenian { + list-style-type: armenian; +} + +.list-georgian { + list-style-type: georgian; +} + +.list-lower-alpha { + list-style-type: lower-alpha; +} + +.list-upper-alpha { + list-style-type: upper-alpha; +} + +.leaflet-popup-content { + margin: 7px 37px 7px 8px; + line-height: 1.4; + font-size: 1.3em; +} + +.leaflet-control-geocoder-icon { + background-color: #fff !important; + background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24'%3E%3Cpath d='M12.2 13l3.4 6.6c.6 1.1 2.5-.4 2-1.2l-4-6.2z'/%3E%3Ccircle cx='10.8' cy='8.9' r='3.9' fill='none' stroke='%23000' stroke-width='1.5'/%3E%3C/svg%3E") !important; +} + +.marker-cluster-small { + background-color: rgb(64 64 65 / 50%); +} + +.marker-cluster-small div { + background-color: rgb(64 64 65 / 70%); +} + +.marker-cluster-medium { + background-color: rgb(64 64 65 / 50%); +} + +.marker-cluster-medium div { + background-color: rgb(64 64 65 / 70%); +} + +.marker-cluster-large { + background-color: rgb(64 64 65 / 50%); +} + +.marker-cluster-large div { + background-color: rgb(64 64 65 / 70%); +} + +.marker-cluster { + background-clip: padding-box; + border-radius: 20px; +} + +.marker-cluster div { + width: 30px; + height: 30px; + margin-left: 5px; + margin-top: 5px; + text-align: center; + border-radius: 15px; + font: 12px "Helvetica Neue", Arial, Helvetica, sans-serif; +} + +.marker-cluster span { + color: #fff; + line-height: 30px; +} + +/* IE 6-8 fallback colors */ +.leaflet-oldie .marker-cluster-small { + background-color: rgb(64 64 65 / 70%); +} + +.leaflet-oldie .marker-cluster-small div { + background-color: rgb(64 64 65 / 70%); +} + +.leaflet-oldie .marker-cluster-medium { + background-color: rgb(64 64 65 / 70%); +} + +.leaflet-oldie .marker-cluster-medium div { + background-color: rgb(64 64 65 / 70%); +} + +.leaflet-oldie .marker-cluster-large { + background-color: rgb(64 64 65 / 70%); +} + +.leaflet-oldie .marker-cluster-large div { + background-color: rgb(64 64 65 / 70%); +} + +#map { + height: 40vh +} + +@media (width >= 768px) { + tr > td:first-of-type { + padding-right: 15px; + } + + #map, #filter { + height: 96vh; + } +} diff --git a/src/main.js b/src/main.js new file mode 100644 index 0000000..c77dc37 --- /dev/null +++ b/src/main.js @@ -0,0 +1,276 @@ +import L from 'leaflet' +import 'leaflet-control-geocoder' +import 'leaflet.markercluster' + +import 'leaflet/dist/leaflet.css' +import 'leaflet-control-geocoder/dist/Control.Geocoder.css' + +import inventory from 'url:../data/baumkataster_flensburg.updated.geojson' +import districts from 'url:../data/flensburg_stadtteile.geojson' + +import markerDefault from 'url:../static/marker-laubbaum-default.webp' +import markerGefaelltDefault from 'url:../static/marker-gefaellt-default.webp' +import markerGefaelltSelected from 'url:../static/marker-gefaellt-selected.webp' +import markerSelected from 'url:../static/marker-laubbaum-selected.webp' + + +let dataObject = null +let cluster = null + +fetch(inventory, { + method: 'GET' +}).then((response) => response.json()).then((data) => { + renderPromise(data, 0, false) +}).catch(function (error) { + console.log(error) +}) + +fetch(districts, { + method: 'GET' +}).then((response) => response.json()).then((data) => { + addDistrictsLayer(data) +}).catch(function (error) { + console.log(error) +}) + +const defaultIcon = L.icon({ + iconUrl: markerDefault, + iconSize: [30, 36], + iconAnchor: [15, 36], + tooltipAnchor: [0, -37] +}) + + +const selectedIcon = L.icon({ + iconUrl: markerSelected, + iconSize: [30, 36], + iconAnchor: [15, 36], + tooltipAnchor: [0, -37] +}) + + +const gefaelltDefaultIcon = L.icon({ + iconUrl: markerGefaelltDefault, + iconSize: [30, 36], + iconAnchor: [15, 36], + tooltipAnchor: [0, -37] +}) + + +const gefaelltSelectedIcon = L.icon({ + iconUrl: markerGefaelltSelected, + iconSize: [30, 36], + iconAnchor: [15, 36], + tooltipAnchor: [0, -37] +}) + + +const layerStyle = { + standard: { + color: '#fff', + fillColor: '#6ed0ef', + fillOpacity: 0.4, + opacity: 0.6, + weight: 3 + } +} + +const map = L.map('map').setView([54.7836, 9.4321], 13) + +L.tileLayer.wms('https://sgx.geodatenzentrum.de/wms_basemapde?SERVICE=WMS&Request=GetCapabilities', { + layers: 'de_basemapde_web_raster_grau', + maxZoom: 20, + attribution: '© GeoBasis-DE / BKG 2024 | CC BY 4.0' +}).addTo(map) + +let geocoder = L.Control.Geocoder.nominatim() +let previousSelectedMarker = null + +if (typeof URLSearchParams !== 'undefined' && location.search) { + // parse /?geocoder=nominatim from URL + const params = new URLSearchParams(location.search) + const geocoderString = params.get('geocoder') + + if (geocoderString && L.Control.Geocoder[geocoderString]) { + console.log('Using geocoder', geocoderString) + geocoder = L.Control.Geocoder[geocoderString]() + } + else if (geocoderString) { + console.warn('Unsupported geocoder', geocoderString) + } +} + +const osmGeocoder = new L.Control.geocoder({ + query: 'Flensburg', + position: 'topright', + placeholder: 'Adresse oder Ort', + defaultMarkGeocode: false +}).addTo(map) + +osmGeocoder.on('markgeocode', (e) => { + const bounds = L.latLngBounds(e.geocode.bbox._southWest, e.geocode.bbox._northEast) + map.fitBounds(bounds) +}) + +function addDistrictsLayer(data) { + L.geoJson(data, { + style: layerStyle.standard + }).addTo(map) +} + +function formatAmountOfTrees(amountOfTrees) { + const numberFormat = new Intl.NumberFormat('de-DE') + const amountOfTreesFormatted = numberFormat.format(amountOfTrees) + + return amountOfTreesFormatted +} + +function capitalizeEachWord(str) { + return str.replace(/-/g, ' ').replace(/\w\S*/g, function (txt) { + return txt.charAt(0).toUpperCase() + txt.substr(1).toLowerCase() + }) +} + +function renderFeatureDetails(feature) { + const treeType = feature.properties.tree_type || '---' + const treeSpecies = feature.properties.tree_species || '---' + const trunkDiameter = feature.properties.trunk_diameter || '---' + const crownDiameter = feature.properties.crown_diameter || '---' + const wikipediaUrl = feature.properties.wikipedia_url || '---' + const totalHeight = feature.properties.total_height || '---' + const fellingYear = feature.properties.felling_year || '---' + const plantYear = feature.properties.plant_year || '---' + const topology = feature.properties.topology || '---' + const place = feature.properties.place || '---' + + let detailOutput = '' + + detailOutput += `
  • Gebiet
    ${place}
  • ` + detailOutput += `
  • Wissenschaftlicher Name
    ${treeSpecies}
  • ` + detailOutput += `
  • Höhe über NHN
    ${topology}m
  • ` + detailOutput += `
  • Pflanzjahr
    ${plantYear}
  • ` + detailOutput += `
  • Stammumfang
    ${trunkDiameter}
  • ` + detailOutput += `
  • Kronendurchmesser
    ${crownDiameter}
  • ` + detailOutput += `
  • Baumhöhe
    ${totalHeight}
  • ` + detailOutput += `
  • Wikipedia
    ${wikipediaUrl}
  • ` + detailOutput += '
  • Alle Angaben ohne Gewähr
  • ' + + document.querySelector('#about').classList.add('hidden') + document.querySelector('#details').classList.remove('hidden') + document.querySelector('#detailList').innerHTML = detailOutput +} + +function renderPromise(data, districtId, onlyFellings) { + document.querySelector('#details').classList.add('hidden') + document.querySelector('#detailList').innerHTML = '' + + dataObject = data + + if (cluster) { + map.removeLayer(cluster) + } + + const geojsonGroup = L.geoJSON(data, { + filter(feature) { + if (districtId === 0 && onlyFellings === false) { + return true + } + else if (districtId === 0 && onlyFellings === true && 'felling_year' in feature.properties) { + return true + } + + if (feature.properties.district_id === districtId && onlyFellings === false) { + return true + } + else if (feature.properties.district_id === districtId && onlyFellings === true && 'felling_year' in feature.properties) { + return true + } + + return false + }, + onEachFeature(feature, layer) { + layer.on('click', function (e) { + document.querySelector('#filter').scrollTo({ + top: 0, + left: 0 + }) + + map.setView(e.latlng, 19) + renderFeatureDetails(e.target.feature) + }) + }, + pointToLayer(feature, latlng) { + let label = String(feature.properties.tree_species) + let icon = defaultIcon + + if ('felling_year' in feature.properties) { + const fellingYear = feature.properties.felling_year + + label = `Gefällt ${fellingYear}` + icon = gefaelltDefaultIcon + } + + return L.marker(latlng, { icon }).bindTooltip(label, { + permanent: false, + direction: 'top' + }).openTooltip() + } + }) + + cluster = L.markerClusterGroup({ + spiderfyOnMaxZoom: false, + showCoverageOnHover: false, + disableClusteringAtZoom: 19, + maxClusterRadius: 50 + }) + + cluster.on('click', function (a) { + let iconNormal = defaultIcon + let iconSelected = selectedIcon + + if ('felling_year' in a.layer.feature.properties) { + iconNormal = gefaelltDefaultIcon + iconSelected = gefaelltSelectedIcon + } + + if (previousSelectedMarker !== null) { + previousSelectedMarker.setIcon(iconNormal) + } + + a.layer.setIcon(iconSelected) + previousSelectedMarker = a.layer + }) + + cluster.addLayer(geojsonGroup) + map.addLayer(cluster) + + map.fitBounds(cluster.getBounds(), { padding: [0, 0, 0, 0] }) + + /* + const lengthFacilities = geojsonGroup.getLayers().length + const amountOfFacilities = formatAmountOfFacilities(lengthFacilities) + let hintAmountOfFacilities = 'Keine Treffer gefunden' + + if (amountOfFacilities > 0) { + hintAmountOfFacilities = `Anzahl angezeigter Schulen ${amountOfFacilities}` + } + + document.querySelector('#amountFacilities').innerHTML = hintAmountOfFacilities + */ +} + +const queryform = document.querySelector('#form') + +if (queryform.length) { + queryform.addEventListener('change', (e) => { + e.preventDefault() + + let onlyFellings = false + + const data = new FormData(queryform) + const districtId = parseInt(data.get('district')) + onlyFellings = /^true$/i.test(data.get('onlyFellings')) + + renderPromise(dataObject, districtId, onlyFellings) + }) +} \ No newline at end of file diff --git a/favicon.ico b/static/favicon.ico similarity index 100% rename from favicon.ico rename to static/favicon.ico diff --git a/static/fonts/InterVariable-Italic.woff2 b/static/fonts/InterVariable-Italic.woff2 new file mode 100644 index 0000000..f22ec25 Binary files /dev/null and b/static/fonts/InterVariable-Italic.woff2 differ diff --git a/static/fonts/InterVariable.woff2 b/static/fonts/InterVariable.woff2 new file mode 100644 index 0000000..22a12b0 Binary files /dev/null and b/static/fonts/InterVariable.woff2 differ diff --git a/static/fonts/LICENSE.txt b/static/fonts/LICENSE.txt new file mode 100644 index 0000000..9b2ca37 --- /dev/null +++ b/static/fonts/LICENSE.txt @@ -0,0 +1,92 @@ +Copyright (c) 2016 The Inter Project Authors (https://github.com/rsms/inter) + +This Font Software is licensed under the SIL Open Font License, Version 1.1. +This license is copied below, and is also available with a FAQ at: +http://scripts.sil.org/OFL + +----------------------------------------------------------- +SIL OPEN FONT LICENSE Version 1.1 - 26 February 2007 +----------------------------------------------------------- + +PREAMBLE +The goals of the Open Font License (OFL) are to stimulate worldwide +development of collaborative font projects, to support the font creation +efforts of academic and linguistic communities, and to provide a free and +open framework in which fonts may be shared and improved in partnership +with others. + +The OFL allows the licensed fonts to be used, studied, modified and +redistributed freely as long as they are not sold by themselves. The +fonts, including any derivative works, can be bundled, embedded, +redistributed and/or sold with any software provided that any reserved +names are not used by derivative works. The fonts and derivatives, +however, cannot be released under any other type of license. The +requirement for fonts to remain under this license does not apply +to any document created using the fonts or their derivatives. + +DEFINITIONS +"Font Software" refers to the set of files released by the Copyright +Holder(s) under this license and clearly marked as such. This may +include source files, build scripts and documentation. + +"Reserved Font Name" refers to any names specified as such after the +copyright statement(s). + +"Original Version" refers to the collection of Font Software components as +distributed by the Copyright Holder(s). + +"Modified Version" refers to any derivative made by adding to, deleting, +or substituting -- in part or in whole -- any of the components of the +Original Version, by changing formats or by porting the Font Software to a +new environment. + +"Author" refers to any designer, engineer, programmer, technical +writer or other person who contributed to the Font Software. + +PERMISSION AND CONDITIONS +Permission is hereby granted, free of charge, to any person obtaining +a copy of the Font Software, to use, study, copy, merge, embed, modify, +redistribute, and sell modified and unmodified copies of the Font +Software, subject to the following conditions: + +1) Neither the Font Software nor any of its individual components, +in Original or Modified Versions, may be sold by itself. + +2) Original or Modified Versions of the Font Software may be bundled, +redistributed and/or sold with any software, provided that each copy +contains the above copyright notice and this license. These can be +included either as stand-alone text files, human-readable headers or +in the appropriate machine-readable metadata fields within text or +binary files as long as those fields can be easily viewed by the user. + +3) No Modified Version of the Font Software may use the Reserved Font +Name(s) unless explicit written permission is granted by the corresponding +Copyright Holder. This restriction only applies to the primary font name as +presented to the users. + +4) The name(s) of the Copyright Holder(s) or the Author(s) of the Font +Software shall not be used to promote, endorse or advertise any +Modified Version, except to acknowledge the contribution(s) of the +Copyright Holder(s) and the Author(s) or with their explicit written +permission. + +5) The Font Software, modified or unmodified, in part or in whole, +must be distributed entirely under this license, and must not be +distributed under any other license. The requirement for fonts to +remain under this license does not apply to any document created +using the Font Software. + +TERMINATION +This license becomes null and void if any of the above conditions are +not met. + +DISCLAIMER +THE FONT SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, +EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO ANY WARRANTIES OF +MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT +OF COPYRIGHT, PATENT, TRADEMARK, OR OTHER RIGHT. IN NO EVENT SHALL THE +COPYRIGHT HOLDER BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, +INCLUDING ANY GENERAL, SPECIAL, INDIRECT, INCIDENTAL, OR CONSEQUENTIAL +DAMAGES, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING +FROM, OUT OF THE USE OR INABILITY TO USE THE FONT SOFTWARE OR FROM +OTHER DEALINGS IN THE FONT SOFTWARE. diff --git a/static/marker-gefaellt-default.webp b/static/marker-gefaellt-default.webp new file mode 100644 index 0000000..6d49831 Binary files /dev/null and b/static/marker-gefaellt-default.webp differ diff --git a/static/marker-gefaellt-selected.webp b/static/marker-gefaellt-selected.webp new file mode 100644 index 0000000..8208bce Binary files /dev/null and b/static/marker-gefaellt-selected.webp differ diff --git a/static/marker-icon-black.png b/static/marker-icon-black.png deleted file mode 100644 index d262ae4..0000000 Binary files a/static/marker-icon-black.png and /dev/null differ diff --git a/static/marker-icon-green.png b/static/marker-icon-green.png deleted file mode 100644 index 16398bb..0000000 Binary files a/static/marker-icon-green.png and /dev/null differ diff --git a/static/marker-laubbaum-default.webp b/static/marker-laubbaum-default.webp new file mode 100644 index 0000000..e044f66 Binary files /dev/null and b/static/marker-laubbaum-default.webp differ diff --git a/static/marker-laubbaum-selected.webp b/static/marker-laubbaum-selected.webp new file mode 100644 index 0000000..ce9aaed Binary files /dev/null and b/static/marker-laubbaum-selected.webp differ diff --git a/static/marker-nadelbaum-default.webp b/static/marker-nadelbaum-default.webp new file mode 100644 index 0000000..cb29a47 Binary files /dev/null and b/static/marker-nadelbaum-default.webp differ diff --git a/static/marker-nadelbaum-selected.webp b/static/marker-nadelbaum-selected.webp new file mode 100644 index 0000000..550a093 Binary files /dev/null and b/static/marker-nadelbaum-selected.webp differ diff --git a/static/marker-shadow.png b/static/marker-shadow.png deleted file mode 100644 index 84c5808..0000000 Binary files a/static/marker-shadow.png and /dev/null differ diff --git a/tailwind.config.js b/tailwind.config.js new file mode 100644 index 0000000..1ec1400 --- /dev/null +++ b/tailwind.config.js @@ -0,0 +1,8 @@ +/** @type {import('tailwindcss').Config} */ +module.exports = { + content: ['./src/*.{html,js}'], + theme: { + extend: {}, + }, + plugins: [], +} diff --git a/tidy.config b/tidy.config deleted file mode 100644 index 5190335..0000000 --- a/tidy.config +++ /dev/null @@ -1,99 +0,0 @@ -accessibility-check: 0 (Tidy Classic) -add-meta-charset: yes -add-xml-decl: no -add-xml-space: no -alt-text: -anchor-as-name: yes -ascii-chars: no -assume-xml-procins: no -bare: no -break-before-br: no -char-encoding: utf8 -clean: no -coerce-endtags: yes -css-prefix: c -custom-tags: no -decorate-inferred-ul: no -doctype: auto -drop-empty-elements: yes -drop-empty-paras: yes -drop-proprietary-attributes: no -enclose-block-text: no -enclose-text: no -error-file: -escape-cdata: no -escape-scripts: yes -fix-backslash: yes -fix-bad-comments: auto -fix-style-tags: yes -fix-uri: yes -force-output: no -gdoc: no -gnu-emacs: no -hide-comments: no -indent: auto -indent-attributes: no -indent-cdata: no -indent-spaces: 4 -indent-with-tabs: no -input-encoding: utf8 -input-xml: no -join-classes: no -join-styles: yes -keep-tabs: no -keep-time: no -literal-attributes: no -logical-emphasis: no -lower-literals: yes -markup: yes -merge-divs: auto -merge-emphasis: yes -merge-spans: auto -mute: -mute-id: no -ncr: yes -new-blocklevel-tags: -new-empty-tags: -new-inline-tags: li -new-pre-tags: -newline: LF -numeric-entities: no -omit-optional-tags: no -output-bom: auto -output-encoding: utf8 -output-file: -output-html: no -output-xhtml: no -output-xml: no -preserve-entities: no -priority-attributes: -punctuation-wrap: no -quiet: no -quote-ampersand: no -quote-marks: no -quote-nbsp: no -repeated-attributes: keep-last -replace-color: no -show-body-only: no -show-errors: 6 -show-info: yes -show-meta-change: no -show-warnings: yes -skip-nested: yes -sort-attributes: none -strict-tags-attributes: no -tab-size: 8 -tidy-mark: no -uppercase-attributes: no -uppercase-tags: no -vertical-space: no -warn-proprietary-attributes: yes -word-2000: no -wrap: 0 -wrap-asp: no -wrap-attributes: no -wrap-jste: yes -wrap-php: yes -wrap-script-literals: no -wrap-sections: yes -write-back: no