[feat] add working static frontend
Browse filesThis view is limited to 50 files because it contains too many changes.
See raw diff
- .dockerignore +7 -0
- Dockerfile +9 -6
- README.md +3 -3
- dockerfiles/dockerfile-lambda-fastsam-api +3 -3
- dockerfiles/dockerfile-samgis-base +55 -19
- static/.gitignore +38 -0
- static/.prettierrc.json +8 -0
- static/LICENSE +176 -0
- static/NOTICE +0 -0
- static/README.md +36 -0
- static/app.js +0 -35
- static/env.d.ts +1 -0
- static/index.html +14 -40
- static/package.json +35 -0
- static/pnpm-lock.yaml +2063 -0
- static/postcss.config.js +7 -0
- static/public/api-docs.svg +3 -0
- static/public/apple-touch-icon.png +0 -0
- static/public/blog.svg +98 -0
- static/public/favicon.ico +0 -0
- static/public/home-page.svg +3 -0
- static/public/icon-192.png +0 -0
- static/public/icon-512.png +0 -0
- static/public/icon.svg +0 -0
- static/public/loader.svg +1 -0
- static/public/login.svg +6 -0
- static/public/logout.svg +3 -0
- static/public/manifest.webmanifest +6 -0
- static/public/marker-icon-exclude-2x.png +0 -0
- static/public/marker-icon-exclude.png +0 -0
- static/public/marker-icon-include-2x.png +0 -0
- static/public/marker-icon-include.png +0 -0
- static/public/marker-shadow.png +0 -0
- static/public/prediction-map-bw.svg +0 -0
- static/public/user-profile.svg +60 -0
- static/src/App.vue +28 -0
- static/src/components/PageFooter.vue +16 -0
- static/src/components/PageFooterHyperlink.vue +16 -0
- static/src/components/PageLayout.vue +28 -0
- static/src/components/PagePredictionMap.vue +224 -0
- static/src/components/StatsGrid.vue +17 -0
- static/src/components/TableGenericComponent.vue +30 -0
- static/src/components/buttons/ButtonComponent.vue +11 -0
- static/src/components/buttons/ButtonMapSendRequest.vue +31 -0
- static/src/components/constants.ts +236 -0
- static/src/components/helpers.ts +253 -0
- static/src/components/types.d.ts +50 -0
- static/src/input.css +20 -0
- static/src/leaflet-custom.css +42 -0
- static/src/main.ts +6 -0
.dockerignore
CHANGED
@@ -7,3 +7,10 @@ tmp/
|
|
7 |
__pycache__
|
8 |
.DS_Store
|
9 |
.pytest_cache
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
7 |
__pycache__
|
8 |
.DS_Store
|
9 |
.pytest_cache
|
10 |
+
node_modules
|
11 |
+
dist
|
12 |
+
static/node_modules
|
13 |
+
static/dist
|
14 |
+
static/.env*
|
15 |
+
.coverage
|
16 |
+
.git
|
Dockerfile
CHANGED
@@ -8,10 +8,11 @@ ENV VIRTUAL_ENV=${LAMBDA_TASK_ROOT}/.venv \
|
|
8 |
|
9 |
# Set working directory to function root directory
|
10 |
WORKDIR ${LAMBDA_TASK_ROOT}
|
11 |
-
|
12 |
-
|
13 |
-
COPY
|
14 |
-
COPY
|
|
|
15 |
|
16 |
RUN ls -l /usr/bin/which
|
17 |
RUN /usr/bin/which python
|
@@ -32,7 +33,9 @@ RUN python -c "import rasterio"
|
|
32 |
RUN python -c "import uvicorn"
|
33 |
RUN df -h
|
34 |
RUN ls -l ${LAMBDA_TASK_ROOT}/samgis/
|
35 |
-
RUN ls -l ${LAMBDA_TASK_ROOT}/
|
36 |
RUN ls -l ${LAMBDA_TASK_ROOT}/static/
|
|
|
|
|
37 |
|
38 |
-
CMD ["uvicorn", "
|
|
|
8 |
|
9 |
# Set working directory to function root directory
|
10 |
WORKDIR ${LAMBDA_TASK_ROOT}
|
11 |
+
|
12 |
+
# don't copy here the "static" folder, is already present because of dist and node_modules folders
|
13 |
+
COPY machine_learning_models ${LAMBDA_TASK_ROOT}/machine_learning_models
|
14 |
+
COPY samgis ${LAMBDA_TASK_ROOT}/samgis
|
15 |
+
COPY wrappers ${LAMBDA_TASK_ROOT}/wrappers
|
16 |
|
17 |
RUN ls -l /usr/bin/which
|
18 |
RUN /usr/bin/which python
|
|
|
33 |
RUN python -c "import uvicorn"
|
34 |
RUN df -h
|
35 |
RUN ls -l ${LAMBDA_TASK_ROOT}/samgis/
|
36 |
+
RUN ls -l ${LAMBDA_TASK_ROOT}/wrappers/
|
37 |
RUN ls -l ${LAMBDA_TASK_ROOT}/static/
|
38 |
+
RUN ls -l ${LAMBDA_TASK_ROOT}/static/dist
|
39 |
+
RUN ls -l ${LAMBDA_TASK_ROOT}/static/node_modules
|
40 |
|
41 |
+
CMD ["uvicorn", "wrappers.fastapi_wrapper:app", "--host", "0.0.0.0", "--port", "7860"]
|
README.md
CHANGED
@@ -19,13 +19,13 @@ docker stop $(docker ps -a -q); docker rm $(docker ps -a -q)
|
|
19 |
docker build . -f dockerfiles/dockerfile-samgis-base --build-arg DEPENDENCY_GROUP=fastapi --tag localhost/samgis-base-fastapi --progress=plain
|
20 |
|
21 |
# build the image, use the tag "samgis-huggingface"
|
22 |
-
docker build . --tag samgis-huggingface --progress=plain
|
23 |
```
|
24 |
|
25 |
Run the container (keep it on background) and show logs
|
26 |
|
27 |
```bash
|
28 |
-
docker run -d --name samgis-huggingface -p 7860:7860 samgis-huggingface; docker logs -f samgis-huggingface
|
29 |
```
|
30 |
|
31 |
Test it with curl:
|
@@ -58,7 +58,7 @@ docker build . -f dockerfiles/dockerfile-lambda-fastsam-api --tag localhost/lamb
|
|
58 |
Run the container (keep it on background) and show logs
|
59 |
|
60 |
```bash
|
61 |
-
docker
|
62 |
```
|
63 |
|
64 |
Test it with curl:
|
|
|
19 |
docker build . -f dockerfiles/dockerfile-samgis-base --build-arg DEPENDENCY_GROUP=fastapi --tag localhost/samgis-base-fastapi --progress=plain
|
20 |
|
21 |
# build the image, use the tag "samgis-huggingface"
|
22 |
+
docker build . --tag localhost/samgis-huggingface --progress=plain
|
23 |
```
|
24 |
|
25 |
Run the container (keep it on background) and show logs
|
26 |
|
27 |
```bash
|
28 |
+
docker run -d --name samgis-huggingface -p 7860:7860 localhost/samgis-huggingface; docker logs -f samgis-huggingface
|
29 |
```
|
30 |
|
31 |
Test it with curl:
|
|
|
58 |
Run the container (keep it on background) and show logs
|
59 |
|
60 |
```bash
|
61 |
+
docker run -d --name lambda-fastsam-api -p 8080:8080 lambda-fastsam-api; docker logs -f lambda-fastsam-api
|
62 |
```
|
63 |
|
64 |
Test it with curl:
|
dockerfiles/dockerfile-lambda-fastsam-api
CHANGED
@@ -9,7 +9,7 @@ ENV VIRTUAL_ENV=${LAMBDA_TASK_ROOT}/.venv \
|
|
9 |
# Set working directory to function root directory
|
10 |
WORKDIR ${LAMBDA_TASK_ROOT}
|
11 |
COPY ./samgis ${LAMBDA_TASK_ROOT}/samgis
|
12 |
-
COPY ./
|
13 |
COPY ./machine_learning_models ${LAMBDA_TASK_ROOT}/machine_learning_models
|
14 |
|
15 |
RUN ls -l /usr/bin/which
|
@@ -30,7 +30,7 @@ RUN python -c "import rasterio"
|
|
30 |
RUN df -h
|
31 |
RUN ls -l /lambda-entrypoint.sh
|
32 |
RUN ls -l ${LAMBDA_TASK_ROOT}/samgis/
|
33 |
-
RUN ls -l ${LAMBDA_TASK_ROOT}/
|
34 |
|
35 |
ENTRYPOINT ["/lambda-entrypoint.sh"]
|
36 |
-
CMD [ "
|
|
|
9 |
# Set working directory to function root directory
|
10 |
WORKDIR ${LAMBDA_TASK_ROOT}
|
11 |
COPY ./samgis ${LAMBDA_TASK_ROOT}/samgis
|
12 |
+
COPY ./wrappers ${LAMBDA_TASK_ROOT}/wrappers
|
13 |
COPY ./machine_learning_models ${LAMBDA_TASK_ROOT}/machine_learning_models
|
14 |
|
15 |
RUN ls -l /usr/bin/which
|
|
|
30 |
RUN df -h
|
31 |
RUN ls -l /lambda-entrypoint.sh
|
32 |
RUN ls -l ${LAMBDA_TASK_ROOT}/samgis/
|
33 |
+
RUN ls -l ${LAMBDA_TASK_ROOT}/wrappers/
|
34 |
|
35 |
ENTRYPOINT ["/lambda-entrypoint.sh"]
|
36 |
+
CMD [ "wrappers.lambda_wrapper.lambda_handler" ]
|
dockerfiles/dockerfile-samgis-base
CHANGED
@@ -1,6 +1,7 @@
|
|
1 |
-
# Include global
|
2 |
ARG ARCH="x86_64"
|
3 |
ARG LAMBDA_TASK_ROOT="/var/task"
|
|
|
4 |
ARG PYTHONPATH="${LAMBDA_TASK_ROOT}:${PYTHONPATH}:/usr/local/lib/python3/dist-packages"
|
5 |
ARG POETRY_NO_INTERACTION=1
|
6 |
ARG POETRY_VIRTUALENVS_IN_PROJECT=1
|
@@ -9,7 +10,7 @@ ARG POETRY_CACHE_DIR=/tmp/poetry_cache
|
|
9 |
ARG RIE="https://github.com/aws/aws-lambda-runtime-interface-emulator/releases/latest/download/aws-lambda-rie"
|
10 |
|
11 |
|
12 |
-
FROM python:3.11-bookworm as
|
13 |
|
14 |
ARG ARCH
|
15 |
ARG LAMBDA_TASK_ROOT
|
@@ -28,18 +29,16 @@ RUN echo "ARG POETRY_CACHE_DIR: ${POETRY_CACHE_DIR} ..."
|
|
28 |
RUN echo "ARG PYTHONPATH: $PYTHONPATH ..."
|
29 |
RUN test -n ${DEPENDENCY_GROUP:?}
|
30 |
RUN echo "python DEPENDENCY_GROUP: ${DEPENDENCY_GROUP} ..."
|
|
|
31 |
|
32 |
# Set working directory to function root directory
|
33 |
WORKDIR ${LAMBDA_TASK_ROOT}
|
34 |
COPY requirements_poetry.txt pyproject.toml poetry.lock README.md ${LAMBDA_TASK_ROOT}/
|
35 |
|
36 |
# avoid segment-geospatial exception caused by missing libGL.so.1 library
|
37 |
-
RUN apt update && apt install -y libgl1 curl python3-pip && apt clean
|
38 |
-
RUN
|
39 |
-
RUN
|
40 |
-
RUN ls -ld /usr/lib/${ARCH}-linux-gnu/libGL.so* || echo "libGL.so* not found/2..."
|
41 |
-
RUN which python
|
42 |
-
RUN python --version
|
43 |
|
44 |
# poetry installation path is NOT within ${LAMBDA_TASK_ROOT}: not needed for runtime docker image
|
45 |
RUN python -m pip install -r ${LAMBDA_TASK_ROOT}/requirements_poetry.txt
|
@@ -51,11 +50,6 @@ RUN poetry install --with ${DEPENDENCY_GROUP} --no-root
|
|
51 |
|
52 |
RUN curl -Lo /usr/local/bin/aws-lambda-rie ${RIE}
|
53 |
|
54 |
-
RUN echo "check for libGL.so"
|
55 |
-
RUN ls -ld /usr/lib/*-linux-gnu/libGL.so* || echo "libGL.so* not found..."
|
56 |
-
RUN ls -ld ${LAMBDA_TASK_ROOT}/.venv
|
57 |
-
RUN ls -l ${LAMBDA_TASK_ROOT}/.venv
|
58 |
-
|
59 |
|
60 |
FROM python:3.11-slim-bookworm as runtime
|
61 |
|
@@ -65,17 +59,59 @@ ARG LAMBDA_TASK_ROOT
|
|
65 |
ENV VIRTUAL_ENV=${LAMBDA_TASK_ROOT}/.venv \
|
66 |
PATH="${LAMBDA_TASK_ROOT}/.venv/bin:$PATH"
|
67 |
|
68 |
-
RUN echo "COPY --from=
|
69 |
-
COPY --from=
|
70 |
-
COPY --from=
|
71 |
|
72 |
RUN echo "new LAMBDA_TASK_ROOT after hidden venv copy => ${LAMBDA_TASK_ROOT}"
|
73 |
RUN ls -ld ${LAMBDA_TASK_ROOT}/
|
74 |
RUN ls -lA ${LAMBDA_TASK_ROOT}/
|
75 |
|
76 |
-
|
77 |
-
COPY --from=builder /usr/local/bin/aws-lambda-rie /usr/local/bin/aws-lambda-rie
|
78 |
RUN chmod +x /usr/local/bin/aws-lambda-rie
|
79 |
COPY ./scripts/lambda-entrypoint.sh /lambda-entrypoint.sh
|
80 |
RUN chmod +x /lambda-entrypoint.sh
|
81 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
# Include global ARGs at the dockerfile top
|
2 |
ARG ARCH="x86_64"
|
3 |
ARG LAMBDA_TASK_ROOT="/var/task"
|
4 |
+
ARG FASTAPI_STATIC="${LAMBDA_TASK_ROOT}/static"
|
5 |
ARG PYTHONPATH="${LAMBDA_TASK_ROOT}:${PYTHONPATH}:/usr/local/lib/python3/dist-packages"
|
6 |
ARG POETRY_NO_INTERACTION=1
|
7 |
ARG POETRY_VIRTUALENVS_IN_PROJECT=1
|
|
|
10 |
ARG RIE="https://github.com/aws/aws-lambda-runtime-interface-emulator/releases/latest/download/aws-lambda-rie"
|
11 |
|
12 |
|
13 |
+
FROM python:3.11-bookworm as builder_global
|
14 |
|
15 |
ARG ARCH
|
16 |
ARG LAMBDA_TASK_ROOT
|
|
|
29 |
RUN echo "ARG PYTHONPATH: $PYTHONPATH ..."
|
30 |
RUN test -n ${DEPENDENCY_GROUP:?}
|
31 |
RUN echo "python DEPENDENCY_GROUP: ${DEPENDENCY_GROUP} ..."
|
32 |
+
RUN echo "arg dep:"
|
33 |
|
34 |
# Set working directory to function root directory
|
35 |
WORKDIR ${LAMBDA_TASK_ROOT}
|
36 |
COPY requirements_poetry.txt pyproject.toml poetry.lock README.md ${LAMBDA_TASK_ROOT}/
|
37 |
|
38 |
# avoid segment-geospatial exception caused by missing libGL.so.1 library
|
39 |
+
# RUN apt update && apt install -y libgl1 curl python3-pip && apt clean
|
40 |
+
RUN apt update && apt install -y libgl1 curl
|
41 |
+
RUN apt update && apt install -y python3-pip && apt clean
|
|
|
|
|
|
|
42 |
|
43 |
# poetry installation path is NOT within ${LAMBDA_TASK_ROOT}: not needed for runtime docker image
|
44 |
RUN python -m pip install -r ${LAMBDA_TASK_ROOT}/requirements_poetry.txt
|
|
|
50 |
|
51 |
RUN curl -Lo /usr/local/bin/aws-lambda-rie ${RIE}
|
52 |
|
|
|
|
|
|
|
|
|
|
|
53 |
|
54 |
FROM python:3.11-slim-bookworm as runtime
|
55 |
|
|
|
59 |
ENV VIRTUAL_ENV=${LAMBDA_TASK_ROOT}/.venv \
|
60 |
PATH="${LAMBDA_TASK_ROOT}/.venv/bin:$PATH"
|
61 |
|
62 |
+
RUN echo "COPY --from=builder_global /usr/lib/${ARCH}-linux-gnu/libGL.so* /usr/lib/${ARCH}-linux-gnu/"
|
63 |
+
COPY --from=builder_global /usr/lib/${ARCH}-linux-gnu/libGL.so* /usr/lib/${ARCH}-linux-gnu/
|
64 |
+
COPY --from=builder_global ${LAMBDA_TASK_ROOT}/.venv ${LAMBDA_TASK_ROOT}/.venv
|
65 |
|
66 |
RUN echo "new LAMBDA_TASK_ROOT after hidden venv copy => ${LAMBDA_TASK_ROOT}"
|
67 |
RUN ls -ld ${LAMBDA_TASK_ROOT}/
|
68 |
RUN ls -lA ${LAMBDA_TASK_ROOT}/
|
69 |
|
70 |
+
COPY --from=builder_global /usr/local/bin/aws-lambda-rie /usr/local/bin/aws-lambda-rie
|
|
|
71 |
RUN chmod +x /usr/local/bin/aws-lambda-rie
|
72 |
COPY ./scripts/lambda-entrypoint.sh /lambda-entrypoint.sh
|
73 |
RUN chmod +x /lambda-entrypoint.sh
|
74 |
+
|
75 |
+
|
76 |
+
### conditional section
|
77 |
+
FROM node:20-slim AS node_fastapi
|
78 |
+
|
79 |
+
ARG DEPENDENCY_GROUP
|
80 |
+
ENV PNPM_HOME="/pnpm"
|
81 |
+
ENV PATH="$PNPM_HOME:$PATH"
|
82 |
+
RUN corepack enable
|
83 |
+
|
84 |
+
COPY ./static /appnode
|
85 |
+
WORKDIR /appnode
|
86 |
+
# RUN if [ "${DEPENDENCY_GROUP}" = "fastapi" ]; then echo "pnpm store path:" && pnpm store path; fi
|
87 |
+
|
88 |
+
|
89 |
+
FROM node_fastapi AS node_prod_deps
|
90 |
+
|
91 |
+
ARG DEPENDENCY_GROUP
|
92 |
+
RUN --mount=type=cache,id=pnpm,target=/pnpm/store if [ "${DEPENDENCY_GROUP}" = "fastapi" ]; then \
|
93 |
+
pnpm install --prod --frozen-lockfile; else \
|
94 |
+
echo "DEPENDENCY_GROUP 1: ${DEPENDENCY_GROUP} ..."; fi
|
95 |
+
# here multiple conditions concatenated to avoid failing on check
|
96 |
+
RUN if [ "${DEPENDENCY_GROUP}" = "fastapi" ]; then if [ ! -d /appnode/node_modules ]; then echo "no node_modules folder" && exit 1; fi; fi
|
97 |
+
|
98 |
+
|
99 |
+
FROM node_fastapi AS node_build
|
100 |
+
|
101 |
+
ARG DEPENDENCY_GROUP
|
102 |
+
RUN --mount=type=cache,id=pnpm,target=/pnpm/store if [ "${DEPENDENCY_GROUP}" = "fastapi" ]; then \
|
103 |
+
pnpm install --frozen-lockfile; else \
|
104 |
+
echo "DEPENDENCY_GROUP 2: ${DEPENDENCY_GROUP} ..."; fi
|
105 |
+
RUN --mount=type=cache,id=pnpm,target=/pnpm/store if [ "${DEPENDENCY_GROUP}" = "fastapi" ]; then \
|
106 |
+
pnpm build; fi
|
107 |
+
RUN --mount=type=cache,id=pnpm,target=/pnpm/store if [ "${DEPENDENCY_GROUP}" = "fastapi" ]; then \
|
108 |
+
pnpm tailwindcss -i /appnode/src/input.css -o /appnode/dist/output.css; fi
|
109 |
+
RUN if [ "${DEPENDENCY_GROUP}" = "fastapi" ]; then if [ ! -d /appnode/dist ]; then echo "no dist folder" && exit 1; fi; fi
|
110 |
+
|
111 |
+
|
112 |
+
FROM runtime
|
113 |
+
ARG FASTAPI_STATIC
|
114 |
+
RUN mkdir ${FASTAPI_STATIC}
|
115 |
+
|
116 |
+
COPY --from=node_prod_deps /appnode/node_modules* ${FASTAPI_STATIC}/node_modules
|
117 |
+
COPY --from=node_build /appnode/dist* ${FASTAPI_STATIC}/dist
|
static/.gitignore
ADDED
@@ -0,0 +1,38 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
# Logs
|
2 |
+
logs
|
3 |
+
*.log
|
4 |
+
npm-debug.log*
|
5 |
+
yarn-debug.log*
|
6 |
+
yarn-error.log*
|
7 |
+
pnpm-debug.log*
|
8 |
+
lerna-debug.log*
|
9 |
+
|
10 |
+
node_modules
|
11 |
+
.DS_Store
|
12 |
+
dist
|
13 |
+
dist-ssr
|
14 |
+
coverage
|
15 |
+
*.local
|
16 |
+
|
17 |
+
tmp*/*
|
18 |
+
/cypress/videos/
|
19 |
+
/cypress/screenshots/
|
20 |
+
vite.config.ts.*
|
21 |
+
|
22 |
+
# Editor directories and files
|
23 |
+
.vscode/*
|
24 |
+
!.vscode/extensions.json
|
25 |
+
.idea
|
26 |
+
*.suo
|
27 |
+
*.ntvs*
|
28 |
+
*.njsproj
|
29 |
+
*.sln
|
30 |
+
*.sw?
|
31 |
+
|
32 |
+
test-results/
|
33 |
+
playwright-report/
|
34 |
+
|
35 |
+
.env*
|
36 |
+
|
37 |
+
# cloudflare workers
|
38 |
+
.wrangler
|
static/.prettierrc.json
ADDED
@@ -0,0 +1,8 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
{
|
2 |
+
"$schema": "https://json.schemastore.org/prettierrc",
|
3 |
+
"semi": false,
|
4 |
+
"tabWidth": 2,
|
5 |
+
"singleQuote": true,
|
6 |
+
"printWidth": 100,
|
7 |
+
"trailingComma": "none"
|
8 |
+
}
|
static/LICENSE
ADDED
@@ -0,0 +1,176 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
Apache License
|
2 |
+
Version 2.0, January 2004
|
3 |
+
http://www.apache.org/licenses/
|
4 |
+
|
5 |
+
TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
|
6 |
+
|
7 |
+
1. Definitions.
|
8 |
+
|
9 |
+
"License" shall mean the terms and conditions for use, reproduction,
|
10 |
+
and distribution as defined by Sections 1 through 9 of this document.
|
11 |
+
|
12 |
+
"Licensor" shall mean the copyright owner or entity authorized by
|
13 |
+
the copyright owner that is granting the License.
|
14 |
+
|
15 |
+
"Legal Entity" shall mean the union of the acting entity and all
|
16 |
+
other entities that control, are controlled by, or are under common
|
17 |
+
control with that entity. For the purposes of this definition,
|
18 |
+
"control" means (i) the power, direct or indirect, to cause the
|
19 |
+
direction or management of such entity, whether by contract or
|
20 |
+
otherwise, or (ii) ownership of fifty percent (50%) or more of the
|
21 |
+
outstanding shares, or (iii) beneficial ownership of such entity.
|
22 |
+
|
23 |
+
"You" (or "Your") shall mean an individual or Legal Entity
|
24 |
+
exercising permissions granted by this License.
|
25 |
+
|
26 |
+
"Source" form shall mean the preferred form for making modifications,
|
27 |
+
including but not limited to software source code, documentation
|
28 |
+
source, and configuration files.
|
29 |
+
|
30 |
+
"Object" form shall mean any form resulting from mechanical
|
31 |
+
transformation or translation of a Source form, including but
|
32 |
+
not limited to compiled object code, generated documentation,
|
33 |
+
and conversions to other media types.
|
34 |
+
|
35 |
+
"Work" shall mean the work of authorship, whether in Source or
|
36 |
+
Object form, made available under the License, as indicated by a
|
37 |
+
copyright notice that is included in or attached to the work
|
38 |
+
(an example is provided in the Appendix below).
|
39 |
+
|
40 |
+
"Derivative Works" shall mean any work, whether in Source or Object
|
41 |
+
form, that is based on (or derived from) the Work and for which the
|
42 |
+
editorial revisions, annotations, elaborations, or other modifications
|
43 |
+
represent, as a whole, an original work of authorship. For the purposes
|
44 |
+
of this License, Derivative Works shall not include works that remain
|
45 |
+
separable from, or merely link (or bind by name) to the interfaces of,
|
46 |
+
the Work and Derivative Works thereof.
|
47 |
+
|
48 |
+
"Contribution" shall mean any work of authorship, including
|
49 |
+
the original version of the Work and any modifications or additions
|
50 |
+
to that Work or Derivative Works thereof, that is intentionally
|
51 |
+
submitted to Licensor for inclusion in the Work by the copyright owner
|
52 |
+
or by an individual or Legal Entity authorized to submit on behalf of
|
53 |
+
the copyright owner. For the purposes of this definition, "submitted"
|
54 |
+
means any form of electronic, verbal, or written communication sent
|
55 |
+
to the Licensor or its representatives, including but not limited to
|
56 |
+
communication on electronic mailing lists, source code control systems,
|
57 |
+
and issue tracking systems that are managed by, or on behalf of, the
|
58 |
+
Licensor for the purpose of discussing and improving the Work, but
|
59 |
+
excluding communication that is conspicuously marked or otherwise
|
60 |
+
designated in writing by the copyright owner as "Not a Contribution."
|
61 |
+
|
62 |
+
"Contributor" shall mean Licensor and any individual or Legal Entity
|
63 |
+
on behalf of whom a Contribution has been received by Licensor and
|
64 |
+
subsequently incorporated within the Work.
|
65 |
+
|
66 |
+
2. Grant of Copyright License. Subject to the terms and conditions of
|
67 |
+
this License, each Contributor hereby grants to You a perpetual,
|
68 |
+
worldwide, non-exclusive, no-charge, royalty-free, irrevocable
|
69 |
+
copyright license to reproduce, prepare Derivative Works of,
|
70 |
+
publicly display, publicly perform, sublicense, and distribute the
|
71 |
+
Work and such Derivative Works in Source or Object form.
|
72 |
+
|
73 |
+
3. Grant of Patent License. Subject to the terms and conditions of
|
74 |
+
this License, each Contributor hereby grants to You a perpetual,
|
75 |
+
worldwide, non-exclusive, no-charge, royalty-free, irrevocable
|
76 |
+
(except as stated in this section) patent license to make, have made,
|
77 |
+
use, offer to sell, sell, import, and otherwise transfer the Work,
|
78 |
+
where such license applies only to those patent claims licensable
|
79 |
+
by such Contributor that are necessarily infringed by their
|
80 |
+
Contribution(s) alone or by combination of their Contribution(s)
|
81 |
+
with the Work to which such Contribution(s) was submitted. If You
|
82 |
+
institute patent litigation against any entity (including a
|
83 |
+
cross-claim or counterclaim in a lawsuit) alleging that the Work
|
84 |
+
or a Contribution incorporated within the Work constitutes direct
|
85 |
+
or contributory patent infringement, then any patent licenses
|
86 |
+
granted to You under this License for that Work shall terminate
|
87 |
+
as of the date such litigation is filed.
|
88 |
+
|
89 |
+
4. Redistribution. You may reproduce and distribute copies of the
|
90 |
+
Work or Derivative Works thereof in any medium, with or without
|
91 |
+
modifications, and in Source or Object form, provided that You
|
92 |
+
meet the following conditions:
|
93 |
+
|
94 |
+
(a) You must give any other recipients of the Work or
|
95 |
+
Derivative Works a copy of this License; and
|
96 |
+
|
97 |
+
(b) You must cause any modified files to carry prominent notices
|
98 |
+
stating that You changed the files; and
|
99 |
+
|
100 |
+
(c) You must retain, in the Source form of any Derivative Works
|
101 |
+
that You distribute, all copyright, patent, trademark, and
|
102 |
+
attribution notices from the Source form of the Work,
|
103 |
+
excluding those notices that do not pertain to any part of
|
104 |
+
the Derivative Works; and
|
105 |
+
|
106 |
+
(d) If the Work includes a "NOTICE" text file as part of its
|
107 |
+
distribution, then any Derivative Works that You distribute must
|
108 |
+
include a readable copy of the attribution notices contained
|
109 |
+
within such NOTICE file, excluding those notices that do not
|
110 |
+
pertain to any part of the Derivative Works, in at least one
|
111 |
+
of the following places: within a NOTICE text file distributed
|
112 |
+
as part of the Derivative Works; within the Source form or
|
113 |
+
documentation, if provided along with the Derivative Works; or,
|
114 |
+
within a display generated by the Derivative Works, if and
|
115 |
+
wherever such third-party notices normally appear. The contents
|
116 |
+
of the NOTICE file are for informational purposes only and
|
117 |
+
do not modify the License. You may add Your own attribution
|
118 |
+
notices within Derivative Works that You distribute, alongside
|
119 |
+
or as an addendum to the NOTICE text from the Work, provided
|
120 |
+
that such additional attribution notices cannot be construed
|
121 |
+
as modifying the License.
|
122 |
+
|
123 |
+
You may add Your own copyright statement to Your modifications and
|
124 |
+
may provide additional or different license terms and conditions
|
125 |
+
for use, reproduction, or distribution of Your modifications, or
|
126 |
+
for any such Derivative Works as a whole, provided Your use,
|
127 |
+
reproduction, and distribution of the Work otherwise complies with
|
128 |
+
the conditions stated in this License.
|
129 |
+
|
130 |
+
5. Submission of Contributions. Unless You explicitly state otherwise,
|
131 |
+
any Contribution intentionally submitted for inclusion in the Work
|
132 |
+
by You to the Licensor shall be under the terms and conditions of
|
133 |
+
this License, without any additional terms or conditions.
|
134 |
+
Notwithstanding the above, nothing herein shall supersede or modify
|
135 |
+
the terms of any separate license agreement you may have executed
|
136 |
+
with Licensor regarding such Contributions.
|
137 |
+
|
138 |
+
6. Trademarks. This License does not grant permission to use the trade
|
139 |
+
names, trademarks, service marks, or product names of the Licensor,
|
140 |
+
except as required for reasonable and customary use in describing the
|
141 |
+
origin of the Work and reproducing the content of the NOTICE file.
|
142 |
+
|
143 |
+
7. Disclaimer of Warranty. Unless required by applicable law or
|
144 |
+
agreed to in writing, Licensor provides the Work (and each
|
145 |
+
Contributor provides its Contributions) on an "AS IS" BASIS,
|
146 |
+
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
|
147 |
+
implied, including, without limitation, any warranties or conditions
|
148 |
+
of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
|
149 |
+
PARTICULAR PURPOSE. You are solely responsible for determining the
|
150 |
+
appropriateness of using or redistributing the Work and assume any
|
151 |
+
risks associated with Your exercise of permissions under this License.
|
152 |
+
|
153 |
+
8. Limitation of Liability. In no event and under no legal theory,
|
154 |
+
whether in tort (including negligence), contract, or otherwise,
|
155 |
+
unless required by applicable law (such as deliberate and grossly
|
156 |
+
negligent acts) or agreed to in writing, shall any Contributor be
|
157 |
+
liable to You for damages, including any direct, indirect, special,
|
158 |
+
incidental, or consequential damages of any character arising as a
|
159 |
+
result of this License or out of the use or inability to use the
|
160 |
+
Work (including but not limited to damages for loss of goodwill,
|
161 |
+
work stoppage, computer failure or malfunction, or any and all
|
162 |
+
other commercial damages or losses), even if such Contributor
|
163 |
+
has been advised of the possibility of such damages.
|
164 |
+
|
165 |
+
9. Accepting Warranty or Additional Liability. While redistributing
|
166 |
+
the Work or Derivative Works thereof, You may choose to offer,
|
167 |
+
and charge a fee for, acceptance of support, warranty, indemnity,
|
168 |
+
or other liability obligations and/or rights consistent with this
|
169 |
+
License. However, in accepting such obligations, You may act only
|
170 |
+
on Your own behalf and on Your sole responsibility, not on behalf
|
171 |
+
of any other Contributor, and only if You agree to indemnify,
|
172 |
+
defend, and hold each Contributor harmless for any liability
|
173 |
+
incurred by, or claims asserted against, such Contributor by reason
|
174 |
+
of your accepting any such warranty or additional liability.
|
175 |
+
|
176 |
+
END OF TERMS AND CONDITIONS
|
static/NOTICE
ADDED
The diff for this file is too large to render.
See raw diff
|
|
static/README.md
ADDED
@@ -0,0 +1,36 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
# ml-tornidor
|
2 |
+
|
3 |
+
## Local development
|
4 |
+
|
5 |
+
Since I use Cloudflare pages as hosting for this project there are some required steps to do before it's possible to start a local development environment. This project needs to wrap the node commands with the `npx wrangler [...]` utility to emulate a Cloudflare Worker function. Because this worker function is under auth which use some env variables I to write these env variables inline. Every time I changed or added needed some variables I also needed to update the `npx wrangler` command. To avoid this I prepared a js script, executed by [Deno](https://deno.land/), that read the env variables from the `.env` file composing the command:
|
6 |
+
|
7 |
+
1. prepare the .env file copying the template.env file
|
8 |
+
2. run the local environment using the command `pnpm dev` or `deno run -A runner.js`
|
9 |
+
|
10 |
+
In case of new or updated packages Deno installs the dependencies at the first execution. Do it with a execution without the `npx wrangler` wrapper:
|
11 |
+
|
12 |
+
```bash
|
13 |
+
deno run -A --node-modules-dir npm:vite
|
14 |
+
```
|
15 |
+
|
16 |
+
In case of problem:
|
17 |
+
|
18 |
+
1. try executing again the command `deno run -A --node-modules-dir npm:vite`
|
19 |
+
|
20 |
+
If this don't solve the problems try to
|
21 |
+
|
22 |
+
1. delete the node_modules folder
|
23 |
+
2. reinstall the npm packages with `pnpm install`
|
24 |
+
3. Run again the local development server, this time with the standard command
|
25 |
+
|
26 |
+
Before to commit try also to build using
|
27 |
+
|
28 |
+
```bash
|
29 |
+
pnpm build
|
30 |
+
```
|
31 |
+
|
32 |
+
Then run the preview (change the example variables):
|
33 |
+
|
34 |
+
```bash
|
35 |
+
npx wrangler pages dev --binding VITE_AUTH0_DOMAIN="example-auth0.eu.auth0.com" API_URL="https://example-aws.execute-api.eu-west-1.amazonaws.com/localhost/lambda-ml-fastsam-api" VITE_AUTH0_AUDIENCE="http://localhost-ml-lambda/" API_DOMAIN=example-aws.execute-api.eu-west-1.amazonaws.com CORS_ALLOWED_DOMAIN=http://localhost:8788 VITE_SATELLITE_NAME="tile-provider.image-type" -- pnpm preview
|
36 |
+
```
|
static/app.js
DELETED
@@ -1,35 +0,0 @@
|
|
1 |
-
const jsonBtn = document.getElementById("getJson");
|
2 |
-
const apiBtn = document.getElementById("getApi");
|
3 |
-
const output = document.getElementById("output");
|
4 |
-
const coordsForm = document.getElementById("coords-form");
|
5 |
-
|
6 |
-
function formData2json(dataId, newObj={}) {
|
7 |
-
const formData = new FormData(dataId);
|
8 |
-
formData.forEach(function(value, key){
|
9 |
-
console.log(`formData2json:: key=${key}, value=${value}.`)
|
10 |
-
newObj[key] = value;
|
11 |
-
});
|
12 |
-
return JSON.stringify(newObj);
|
13 |
-
}
|
14 |
-
|
15 |
-
coordsForm.addEventListener('submit', event => {
|
16 |
-
event.preventDefault();
|
17 |
-
console.log("coordsForm::", coordsForm, "#")
|
18 |
-
const inputJson = formData2json(coordsForm)
|
19 |
-
console.log("inputJson", inputJson, "#");
|
20 |
-
|
21 |
-
fetch('/infer_samgis', {
|
22 |
-
method: 'POST', // or 'PUT'
|
23 |
-
body: inputJson, // a FormData will automatically set the 'Content-Type',
|
24 |
-
headers: {"Content-Type": "application/json"},
|
25 |
-
}).then(function (response) {
|
26 |
-
return response.json();
|
27 |
-
}).then(function (data) {
|
28 |
-
console.log("data:", data, "#")
|
29 |
-
output.innerHTML = JSON.stringify(data)
|
30 |
-
}).catch(function (err) {
|
31 |
-
console.log("err:", err, "#")
|
32 |
-
output.innerHTML = `err:${JSON.stringify(err)}.`;
|
33 |
-
});
|
34 |
-
event.preventDefault();
|
35 |
-
});
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
static/env.d.ts
ADDED
@@ -0,0 +1 @@
|
|
|
|
|
1 |
+
/// <reference types="vite/client" />
|
static/index.html
CHANGED
@@ -1,44 +1,18 @@
|
|
1 |
<!DOCTYPE html>
|
2 |
<html lang="en">
|
3 |
-
<head>
|
4 |
-
<meta charset="
|
5 |
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
6 |
-
<
|
7 |
-
<link rel="stylesheet"
|
8 |
-
<
|
9 |
-
|
10 |
-
<
|
11 |
-
<
|
12 |
-
|
13 |
-
|
14 |
-
|
15 |
-
|
16 |
-
|
17 |
-
|
18 |
-
bbox: x2 <input type="number" id="y-center-form" name="x2" value="37.6311"/>
|
19 |
-
</label>
|
20 |
-
<label>
|
21 |
-
bbox: y1 <input type="number" id="y-center-form" name="y1" value="-122.1203"/>
|
22 |
-
</label>
|
23 |
-
<label>
|
24 |
-
bbox: y2 <input type="number" id="y-center-form" name="y2" value="37.6458"/>
|
25 |
-
</label>
|
26 |
-
<br/><br/>
|
27 |
-
<label>
|
28 |
-
x point: <input type="number" id="x-form" name="x" value="-122.1419"/>
|
29 |
-
</label>
|
30 |
-
<label>
|
31 |
-
y point: <input type="number" id="y-form" name="y" value="37.6383"/>
|
32 |
-
</label>
|
33 |
-
<label>
|
34 |
-
zoom: <input type="number" id="zoom" name="y" value="6"/>
|
35 |
-
</label>
|
36 |
-
<br/><br/>
|
37 |
-
<button type="submit" id="submit-btn">submit form</button>
|
38 |
-
</form>
|
39 |
-
<br><br>
|
40 |
-
<div id="output"></div>
|
41 |
-
</div>
|
42 |
-
<script src="app.js"></script>
|
43 |
-
</body>
|
44 |
</html>
|
|
|
1 |
<!DOCTYPE html>
|
2 |
<html lang="en">
|
3 |
+
<head>
|
4 |
+
<meta charset="utf-8" />
|
5 |
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
6 |
+
<link href="output.css" rel="stylesheet" type="text/css">
|
7 |
+
<link href="dist/output.css" rel="stylesheet" type="text/css">
|
8 |
+
<link rel="icon" href="/favicon.ico" sizes="32x32">
|
9 |
+
<link rel="icon" href="/icon.svg" type="image/svg+xml">
|
10 |
+
<link rel="apple-touch-icon" href="/apple-touch-icon.png"><!-- 180×180 -->
|
11 |
+
<link rel="manifest" href="/manifest.webmanifest">
|
12 |
+
<title>ML on GIS</title>
|
13 |
+
</head>
|
14 |
+
<body>
|
15 |
+
<div id="root"></div>
|
16 |
+
<script type="module" src="/src/main.ts"></script>
|
17 |
+
</body>
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
18 |
</html>
|
static/package.json
ADDED
@@ -0,0 +1,35 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
{
|
2 |
+
"name": "ml-trinca",
|
3 |
+
"version": "1.0.0",
|
4 |
+
"private": true,
|
5 |
+
"scripts": {
|
6 |
+
"dev": "vite",
|
7 |
+
"build": "vite build",
|
8 |
+
"preview": "vite preview --port 5173",
|
9 |
+
"lint": "eslint . --ext .vue,.js,.jsx,.cjs,.mjs --fix --ignore-path .gitignore"
|
10 |
+
},
|
11 |
+
"type": "module",
|
12 |
+
"dependencies": {
|
13 |
+
"@geoman-io/leaflet-geoman-free": "^2.15.0",
|
14 |
+
"leaflet": "^1.9.4",
|
15 |
+
"leaflet-providers": "^2.0.0",
|
16 |
+
"vue": "^3.3.12"
|
17 |
+
},
|
18 |
+
"devDependencies": {
|
19 |
+
"@headlessui/vue": "^1.7.16",
|
20 |
+
"@heroicons/vue": "^2.0.18",
|
21 |
+
"@tsconfig/node20": "^20.1.2",
|
22 |
+
"@types/leaflet": "^1.9.8",
|
23 |
+
"@types/node": "^20.10.5",
|
24 |
+
"@vitejs/plugin-vue": "^4.5.2",
|
25 |
+
"@vue/tsconfig": "^0.5.1",
|
26 |
+
"autoprefixer": "^10.4.16",
|
27 |
+
"eslint": "^8.56.0",
|
28 |
+
"eslint-plugin-vue": "^9.19.2",
|
29 |
+
"postcss": "^8.4.32",
|
30 |
+
"postcss-import": "^15.1.0",
|
31 |
+
"prettier": "^3.1.1",
|
32 |
+
"tailwindcss": "^3.3.6",
|
33 |
+
"vite": "^5.0.10"
|
34 |
+
}
|
35 |
+
}
|
static/pnpm-lock.yaml
ADDED
@@ -0,0 +1,2063 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
lockfileVersion: '6.0'
|
2 |
+
|
3 |
+
settings:
|
4 |
+
autoInstallPeers: true
|
5 |
+
excludeLinksFromLockfile: false
|
6 |
+
|
7 |
+
dependencies:
|
8 |
+
'@geoman-io/leaflet-geoman-free':
|
9 |
+
specifier: ^2.15.0
|
10 |
+
version: 2.15.0(leaflet@1.9.4)
|
11 |
+
leaflet:
|
12 |
+
specifier: ^1.9.4
|
13 |
+
version: 1.9.4
|
14 |
+
leaflet-providers:
|
15 |
+
specifier: ^2.0.0
|
16 |
+
version: 2.0.0
|
17 |
+
vue:
|
18 |
+
specifier: ^3.3.12
|
19 |
+
version: 3.3.13
|
20 |
+
|
21 |
+
devDependencies:
|
22 |
+
'@headlessui/vue':
|
23 |
+
specifier: ^1.7.16
|
24 |
+
version: 1.7.16(vue@3.3.13)
|
25 |
+
'@heroicons/vue':
|
26 |
+
specifier: ^2.0.18
|
27 |
+
version: 2.1.1(vue@3.3.13)
|
28 |
+
'@tsconfig/node20':
|
29 |
+
specifier: ^20.1.2
|
30 |
+
version: 20.1.2
|
31 |
+
'@types/leaflet':
|
32 |
+
specifier: ^1.9.8
|
33 |
+
version: 1.9.8
|
34 |
+
'@types/node':
|
35 |
+
specifier: ^20.10.5
|
36 |
+
version: 20.10.5
|
37 |
+
'@vitejs/plugin-vue':
|
38 |
+
specifier: ^4.5.2
|
39 |
+
version: 4.5.2(vite@5.0.10)(vue@3.3.13)
|
40 |
+
'@vue/tsconfig':
|
41 |
+
specifier: ^0.5.1
|
42 |
+
version: 0.5.1
|
43 |
+
autoprefixer:
|
44 |
+
specifier: ^10.4.16
|
45 |
+
version: 10.4.16(postcss@8.4.32)
|
46 |
+
eslint:
|
47 |
+
specifier: ^8.56.0
|
48 |
+
version: 8.56.0
|
49 |
+
eslint-plugin-vue:
|
50 |
+
specifier: ^9.19.2
|
51 |
+
version: 9.19.2(eslint@8.56.0)
|
52 |
+
postcss:
|
53 |
+
specifier: ^8.4.32
|
54 |
+
version: 8.4.32
|
55 |
+
postcss-import:
|
56 |
+
specifier: ^15.1.0
|
57 |
+
version: 15.1.0(postcss@8.4.32)
|
58 |
+
prettier:
|
59 |
+
specifier: ^3.1.1
|
60 |
+
version: 3.1.1
|
61 |
+
tailwindcss:
|
62 |
+
specifier: ^3.3.6
|
63 |
+
version: 3.4.0
|
64 |
+
vite:
|
65 |
+
specifier: ^5.0.10
|
66 |
+
version: 5.0.10(@types/node@20.10.5)
|
67 |
+
|
68 |
+
packages:
|
69 |
+
|
70 |
+
/@aashutoshrathi/word-wrap@1.2.6:
|
71 |
+
resolution: {integrity: sha512-1Yjs2SvM8TflER/OD3cOjhWWOZb58A2t7wpE2S9XfBYTiIl+XFhQG2bjy4Pu1I+EAlCNUzRDYDdFwFYUKvXcIA==}
|
72 |
+
engines: {node: '>=0.10.0'}
|
73 |
+
dev: true
|
74 |
+
|
75 |
+
/@alloc/quick-lru@5.2.0:
|
76 |
+
resolution: {integrity: sha512-UrcABB+4bUrFABwbluTIBErXwvbsU/V7TZWfmbgJfbkwiBuziS9gxdODUyuiecfdGQ85jglMW6juS3+z5TsKLw==}
|
77 |
+
engines: {node: '>=10'}
|
78 |
+
dev: true
|
79 |
+
|
80 |
+
/@babel/helper-string-parser@7.23.4:
|
81 |
+
resolution: {integrity: sha512-803gmbQdqwdf4olxrX4AJyFBV/RTr3rSmOj0rKwesmzlfhYNDEs+/iOcznzpNWlJlIlTJC2QfPFcHB6DlzdVLQ==}
|
82 |
+
engines: {node: '>=6.9.0'}
|
83 |
+
|
84 |
+
/@babel/helper-validator-identifier@7.22.20:
|
85 |
+
resolution: {integrity: sha512-Y4OZ+ytlatR8AI+8KZfKuL5urKp7qey08ha31L8b3BwewJAoJamTzyvxPR/5D+KkdJCGPq/+8TukHBlY10FX9A==}
|
86 |
+
engines: {node: '>=6.9.0'}
|
87 |
+
|
88 |
+
/@babel/parser@7.23.6:
|
89 |
+
resolution: {integrity: sha512-Z2uID7YJ7oNvAI20O9X0bblw7Qqs8Q2hFy0R9tAfnfLkp5MW0UH9eUvnDSnFwKZ0AvgS1ucqR4KzvVHgnke1VQ==}
|
90 |
+
engines: {node: '>=6.0.0'}
|
91 |
+
hasBin: true
|
92 |
+
dependencies:
|
93 |
+
'@babel/types': 7.23.6
|
94 |
+
|
95 |
+
/@babel/types@7.23.6:
|
96 |
+
resolution: {integrity: sha512-+uarb83brBzPKN38NX1MkB6vb6+mwvR6amUulqAE7ccQw1pEl+bCia9TbdG1lsnFP7lZySvUn37CHyXQdfTwzg==}
|
97 |
+
engines: {node: '>=6.9.0'}
|
98 |
+
dependencies:
|
99 |
+
'@babel/helper-string-parser': 7.23.4
|
100 |
+
'@babel/helper-validator-identifier': 7.22.20
|
101 |
+
to-fast-properties: 2.0.0
|
102 |
+
|
103 |
+
/@esbuild/aix-ppc64@0.19.10:
|
104 |
+
resolution: {integrity: sha512-Q+mk96KJ+FZ30h9fsJl+67IjNJm3x2eX+GBWGmocAKgzp27cowCOOqSdscX80s0SpdFXZnIv/+1xD1EctFx96Q==}
|
105 |
+
engines: {node: '>=12'}
|
106 |
+
cpu: [ppc64]
|
107 |
+
os: [aix]
|
108 |
+
requiresBuild: true
|
109 |
+
dev: true
|
110 |
+
optional: true
|
111 |
+
|
112 |
+
/@esbuild/android-arm64@0.19.10:
|
113 |
+
resolution: {integrity: sha512-1X4CClKhDgC3by7k8aOWZeBXQX8dHT5QAMCAQDArCLaYfkppoARvh0fit3X2Qs+MXDngKcHv6XXyQCpY0hkK1Q==}
|
114 |
+
engines: {node: '>=12'}
|
115 |
+
cpu: [arm64]
|
116 |
+
os: [android]
|
117 |
+
requiresBuild: true
|
118 |
+
dev: true
|
119 |
+
optional: true
|
120 |
+
|
121 |
+
/@esbuild/android-arm@0.19.10:
|
122 |
+
resolution: {integrity: sha512-7W0bK7qfkw1fc2viBfrtAEkDKHatYfHzr/jKAHNr9BvkYDXPcC6bodtm8AyLJNNuqClLNaeTLuwURt4PRT9d7w==}
|
123 |
+
engines: {node: '>=12'}
|
124 |
+
cpu: [arm]
|
125 |
+
os: [android]
|
126 |
+
requiresBuild: true
|
127 |
+
dev: true
|
128 |
+
optional: true
|
129 |
+
|
130 |
+
/@esbuild/android-x64@0.19.10:
|
131 |
+
resolution: {integrity: sha512-O/nO/g+/7NlitUxETkUv/IvADKuZXyH4BHf/g/7laqKC4i/7whLpB0gvpPc2zpF0q9Q6FXS3TS75QHac9MvVWw==}
|
132 |
+
engines: {node: '>=12'}
|
133 |
+
cpu: [x64]
|
134 |
+
os: [android]
|
135 |
+
requiresBuild: true
|
136 |
+
dev: true
|
137 |
+
optional: true
|
138 |
+
|
139 |
+
/@esbuild/darwin-arm64@0.19.10:
|
140 |
+
resolution: {integrity: sha512-YSRRs2zOpwypck+6GL3wGXx2gNP7DXzetmo5pHXLrY/VIMsS59yKfjPizQ4lLt5vEI80M41gjm2BxrGZ5U+VMA==}
|
141 |
+
engines: {node: '>=12'}
|
142 |
+
cpu: [arm64]
|
143 |
+
os: [darwin]
|
144 |
+
requiresBuild: true
|
145 |
+
dev: true
|
146 |
+
optional: true
|
147 |
+
|
148 |
+
/@esbuild/darwin-x64@0.19.10:
|
149 |
+
resolution: {integrity: sha512-alfGtT+IEICKtNE54hbvPg13xGBe4GkVxyGWtzr+yHO7HIiRJppPDhOKq3zstTcVf8msXb/t4eavW3jCDpMSmA==}
|
150 |
+
engines: {node: '>=12'}
|
151 |
+
cpu: [x64]
|
152 |
+
os: [darwin]
|
153 |
+
requiresBuild: true
|
154 |
+
dev: true
|
155 |
+
optional: true
|
156 |
+
|
157 |
+
/@esbuild/freebsd-arm64@0.19.10:
|
158 |
+
resolution: {integrity: sha512-dMtk1wc7FSH8CCkE854GyGuNKCewlh+7heYP/sclpOG6Cectzk14qdUIY5CrKDbkA/OczXq9WesqnPl09mj5dg==}
|
159 |
+
engines: {node: '>=12'}
|
160 |
+
cpu: [arm64]
|
161 |
+
os: [freebsd]
|
162 |
+
requiresBuild: true
|
163 |
+
dev: true
|
164 |
+
optional: true
|
165 |
+
|
166 |
+
/@esbuild/freebsd-x64@0.19.10:
|
167 |
+
resolution: {integrity: sha512-G5UPPspryHu1T3uX8WiOEUa6q6OlQh6gNl4CO4Iw5PS+Kg5bVggVFehzXBJY6X6RSOMS8iXDv2330VzaObm4Ag==}
|
168 |
+
engines: {node: '>=12'}
|
169 |
+
cpu: [x64]
|
170 |
+
os: [freebsd]
|
171 |
+
requiresBuild: true
|
172 |
+
dev: true
|
173 |
+
optional: true
|
174 |
+
|
175 |
+
/@esbuild/linux-arm64@0.19.10:
|
176 |
+
resolution: {integrity: sha512-QxaouHWZ+2KWEj7cGJmvTIHVALfhpGxo3WLmlYfJ+dA5fJB6lDEIg+oe/0//FuyVHuS3l79/wyBxbHr0NgtxJQ==}
|
177 |
+
engines: {node: '>=12'}
|
178 |
+
cpu: [arm64]
|
179 |
+
os: [linux]
|
180 |
+
requiresBuild: true
|
181 |
+
dev: true
|
182 |
+
optional: true
|
183 |
+
|
184 |
+
/@esbuild/linux-arm@0.19.10:
|
185 |
+
resolution: {integrity: sha512-j6gUW5aAaPgD416Hk9FHxn27On28H4eVI9rJ4az7oCGTFW48+LcgNDBN+9f8rKZz7EEowo889CPKyeaD0iw9Kg==}
|
186 |
+
engines: {node: '>=12'}
|
187 |
+
cpu: [arm]
|
188 |
+
os: [linux]
|
189 |
+
requiresBuild: true
|
190 |
+
dev: true
|
191 |
+
optional: true
|
192 |
+
|
193 |
+
/@esbuild/linux-ia32@0.19.10:
|
194 |
+
resolution: {integrity: sha512-4ub1YwXxYjj9h1UIZs2hYbnTZBtenPw5NfXCRgEkGb0b6OJ2gpkMvDqRDYIDRjRdWSe/TBiZltm3Y3Q8SN1xNg==}
|
195 |
+
engines: {node: '>=12'}
|
196 |
+
cpu: [ia32]
|
197 |
+
os: [linux]
|
198 |
+
requiresBuild: true
|
199 |
+
dev: true
|
200 |
+
optional: true
|
201 |
+
|
202 |
+
/@esbuild/linux-loong64@0.19.10:
|
203 |
+
resolution: {integrity: sha512-lo3I9k+mbEKoxtoIbM0yC/MZ1i2wM0cIeOejlVdZ3D86LAcFXFRdeuZmh91QJvUTW51bOK5W2BznGNIl4+mDaA==}
|
204 |
+
engines: {node: '>=12'}
|
205 |
+
cpu: [loong64]
|
206 |
+
os: [linux]
|
207 |
+
requiresBuild: true
|
208 |
+
dev: true
|
209 |
+
optional: true
|
210 |
+
|
211 |
+
/@esbuild/linux-mips64el@0.19.10:
|
212 |
+
resolution: {integrity: sha512-J4gH3zhHNbdZN0Bcr1QUGVNkHTdpijgx5VMxeetSk6ntdt+vR1DqGmHxQYHRmNb77tP6GVvD+K0NyO4xjd7y4A==}
|
213 |
+
engines: {node: '>=12'}
|
214 |
+
cpu: [mips64el]
|
215 |
+
os: [linux]
|
216 |
+
requiresBuild: true
|
217 |
+
dev: true
|
218 |
+
optional: true
|
219 |
+
|
220 |
+
/@esbuild/linux-ppc64@0.19.10:
|
221 |
+
resolution: {integrity: sha512-tgT/7u+QhV6ge8wFMzaklOY7KqiyitgT1AUHMApau32ZlvTB/+efeCtMk4eXS+uEymYK249JsoiklZN64xt6oQ==}
|
222 |
+
engines: {node: '>=12'}
|
223 |
+
cpu: [ppc64]
|
224 |
+
os: [linux]
|
225 |
+
requiresBuild: true
|
226 |
+
dev: true
|
227 |
+
optional: true
|
228 |
+
|
229 |
+
/@esbuild/linux-riscv64@0.19.10:
|
230 |
+
resolution: {integrity: sha512-0f/spw0PfBMZBNqtKe5FLzBDGo0SKZKvMl5PHYQr3+eiSscfJ96XEknCe+JoOayybWUFQbcJTrk946i3j9uYZA==}
|
231 |
+
engines: {node: '>=12'}
|
232 |
+
cpu: [riscv64]
|
233 |
+
os: [linux]
|
234 |
+
requiresBuild: true
|
235 |
+
dev: true
|
236 |
+
optional: true
|
237 |
+
|
238 |
+
/@esbuild/linux-s390x@0.19.10:
|
239 |
+
resolution: {integrity: sha512-pZFe0OeskMHzHa9U38g+z8Yx5FNCLFtUnJtQMpwhS+r4S566aK2ci3t4NCP4tjt6d5j5uo4h7tExZMjeKoehAA==}
|
240 |
+
engines: {node: '>=12'}
|
241 |
+
cpu: [s390x]
|
242 |
+
os: [linux]
|
243 |
+
requiresBuild: true
|
244 |
+
dev: true
|
245 |
+
optional: true
|
246 |
+
|
247 |
+
/@esbuild/linux-x64@0.19.10:
|
248 |
+
resolution: {integrity: sha512-SpYNEqg/6pZYoc+1zLCjVOYvxfZVZj6w0KROZ3Fje/QrM3nfvT2llI+wmKSrWuX6wmZeTapbarvuNNK/qepSgA==}
|
249 |
+
engines: {node: '>=12'}
|
250 |
+
cpu: [x64]
|
251 |
+
os: [linux]
|
252 |
+
requiresBuild: true
|
253 |
+
dev: true
|
254 |
+
optional: true
|
255 |
+
|
256 |
+
/@esbuild/netbsd-x64@0.19.10:
|
257 |
+
resolution: {integrity: sha512-ACbZ0vXy9zksNArWlk2c38NdKg25+L9pr/mVaj9SUq6lHZu/35nx2xnQVRGLrC1KKQqJKRIB0q8GspiHI3J80Q==}
|
258 |
+
engines: {node: '>=12'}
|
259 |
+
cpu: [x64]
|
260 |
+
os: [netbsd]
|
261 |
+
requiresBuild: true
|
262 |
+
dev: true
|
263 |
+
optional: true
|
264 |
+
|
265 |
+
/@esbuild/openbsd-x64@0.19.10:
|
266 |
+
resolution: {integrity: sha512-PxcgvjdSjtgPMiPQrM3pwSaG4kGphP+bLSb+cihuP0LYdZv1epbAIecHVl5sD3npkfYBZ0ZnOjR878I7MdJDFg==}
|
267 |
+
engines: {node: '>=12'}
|
268 |
+
cpu: [x64]
|
269 |
+
os: [openbsd]
|
270 |
+
requiresBuild: true
|
271 |
+
dev: true
|
272 |
+
optional: true
|
273 |
+
|
274 |
+
/@esbuild/sunos-x64@0.19.10:
|
275 |
+
resolution: {integrity: sha512-ZkIOtrRL8SEJjr+VHjmW0znkPs+oJXhlJbNwfI37rvgeMtk3sxOQevXPXjmAPZPigVTncvFqLMd+uV0IBSEzqA==}
|
276 |
+
engines: {node: '>=12'}
|
277 |
+
cpu: [x64]
|
278 |
+
os: [sunos]
|
279 |
+
requiresBuild: true
|
280 |
+
dev: true
|
281 |
+
optional: true
|
282 |
+
|
283 |
+
/@esbuild/win32-arm64@0.19.10:
|
284 |
+
resolution: {integrity: sha512-+Sa4oTDbpBfGpl3Hn3XiUe4f8TU2JF7aX8cOfqFYMMjXp6ma6NJDztl5FDG8Ezx0OjwGikIHw+iA54YLDNNVfw==}
|
285 |
+
engines: {node: '>=12'}
|
286 |
+
cpu: [arm64]
|
287 |
+
os: [win32]
|
288 |
+
requiresBuild: true
|
289 |
+
dev: true
|
290 |
+
optional: true
|
291 |
+
|
292 |
+
/@esbuild/win32-ia32@0.19.10:
|
293 |
+
resolution: {integrity: sha512-EOGVLK1oWMBXgfttJdPHDTiivYSjX6jDNaATeNOaCOFEVcfMjtbx7WVQwPSE1eIfCp/CaSF2nSrDtzc4I9f8TQ==}
|
294 |
+
engines: {node: '>=12'}
|
295 |
+
cpu: [ia32]
|
296 |
+
os: [win32]
|
297 |
+
requiresBuild: true
|
298 |
+
dev: true
|
299 |
+
optional: true
|
300 |
+
|
301 |
+
/@esbuild/win32-x64@0.19.10:
|
302 |
+
resolution: {integrity: sha512-whqLG6Sc70AbU73fFYvuYzaE4MNMBIlR1Y/IrUeOXFrWHxBEjjbZaQ3IXIQS8wJdAzue2GwYZCjOrgrU1oUHoA==}
|
303 |
+
engines: {node: '>=12'}
|
304 |
+
cpu: [x64]
|
305 |
+
os: [win32]
|
306 |
+
requiresBuild: true
|
307 |
+
dev: true
|
308 |
+
optional: true
|
309 |
+
|
310 |
+
/@eslint-community/eslint-utils@4.4.0(eslint@8.56.0):
|
311 |
+
resolution: {integrity: sha512-1/sA4dwrzBAyeUoQ6oxahHKmrZvsnLCg4RfxW3ZFGGmQkSNQPFNLV9CUEFQP1x9EYXHTo5p6xdhZM1Ne9p/AfA==}
|
312 |
+
engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0}
|
313 |
+
peerDependencies:
|
314 |
+
eslint: ^6.0.0 || ^7.0.0 || >=8.0.0
|
315 |
+
dependencies:
|
316 |
+
eslint: 8.56.0
|
317 |
+
eslint-visitor-keys: 3.4.3
|
318 |
+
dev: true
|
319 |
+
|
320 |
+
/@eslint-community/regexpp@4.10.0:
|
321 |
+
resolution: {integrity: sha512-Cu96Sd2By9mCNTx2iyKOmq10v22jUVQv0lQnlGNy16oE9589yE+QADPbrMGCkA51cKZSg3Pu/aTJVTGfL/qjUA==}
|
322 |
+
engines: {node: ^12.0.0 || ^14.0.0 || >=16.0.0}
|
323 |
+
dev: true
|
324 |
+
|
325 |
+
/@eslint/eslintrc@2.1.4:
|
326 |
+
resolution: {integrity: sha512-269Z39MS6wVJtsoUl10L60WdkhJVdPG24Q4eZTH3nnF6lpvSShEK3wQjDX9JRWAUPvPh7COouPpU9IrqaZFvtQ==}
|
327 |
+
engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0}
|
328 |
+
dependencies:
|
329 |
+
ajv: 6.12.6
|
330 |
+
debug: 4.3.4
|
331 |
+
espree: 9.6.1
|
332 |
+
globals: 13.24.0
|
333 |
+
ignore: 5.3.0
|
334 |
+
import-fresh: 3.3.0
|
335 |
+
js-yaml: 4.1.0
|
336 |
+
minimatch: 3.1.2
|
337 |
+
strip-json-comments: 3.1.1
|
338 |
+
transitivePeerDependencies:
|
339 |
+
- supports-color
|
340 |
+
dev: true
|
341 |
+
|
342 |
+
/@eslint/js@8.56.0:
|
343 |
+
resolution: {integrity: sha512-gMsVel9D7f2HLkBma9VbtzZRehRogVRfbr++f06nL2vnCGCNlzOD+/MUov/F4p8myyAHspEhVobgjpX64q5m6A==}
|
344 |
+
engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0}
|
345 |
+
dev: true
|
346 |
+
|
347 |
+
/@geoman-io/leaflet-geoman-free@2.15.0(leaflet@1.9.4):
|
348 |
+
resolution: {integrity: sha512-esann1pQ8cCX3pMR7XkXuf1vwwJLz1mAbkeyRWOfoLMKA8LBnbRxChIBZzzwzyGIxybNO93Bl6LaK8wEj8uzlA==}
|
349 |
+
peerDependencies:
|
350 |
+
leaflet: ^1.2.0
|
351 |
+
dependencies:
|
352 |
+
'@turf/boolean-contains': 6.5.0
|
353 |
+
'@turf/kinks': 6.5.0
|
354 |
+
'@turf/line-intersect': 6.5.0
|
355 |
+
'@turf/line-split': 6.5.0
|
356 |
+
leaflet: 1.9.4
|
357 |
+
lodash: 4.17.21
|
358 |
+
polygon-clipping: 0.15.3
|
359 |
+
dev: false
|
360 |
+
|
361 |
+
/@headlessui/vue@1.7.16(vue@3.3.13):
|
362 |
+
resolution: {integrity: sha512-nKT+nf/q6x198SsyK54mSszaQl/z+QxtASmgMEJtpxSX2Q0OPJX0upS/9daDyiECpeAsvjkoOrm2O/6PyBQ+Qg==}
|
363 |
+
engines: {node: '>=10'}
|
364 |
+
peerDependencies:
|
365 |
+
vue: ^3.2.0
|
366 |
+
dependencies:
|
367 |
+
vue: 3.3.13
|
368 |
+
dev: true
|
369 |
+
|
370 |
+
/@heroicons/vue@2.1.1(vue@3.3.13):
|
371 |
+
resolution: {integrity: sha512-Yi5nh/89L193ALgHyJUQUdNLsKXPrrE3yj5yiR8WAlo7nZyXGxGauQcEAmBsa2XJGMhBMuEdoOiuZ8wEwTBxVQ==}
|
372 |
+
peerDependencies:
|
373 |
+
vue: '>= 3'
|
374 |
+
dependencies:
|
375 |
+
vue: 3.3.13
|
376 |
+
dev: true
|
377 |
+
|
378 |
+
/@humanwhocodes/config-array@0.11.13:
|
379 |
+
resolution: {integrity: sha512-JSBDMiDKSzQVngfRjOdFXgFfklaXI4K9nLF49Auh21lmBWRLIK3+xTErTWD4KU54pb6coM6ESE7Awz/FNU3zgQ==}
|
380 |
+
engines: {node: '>=10.10.0'}
|
381 |
+
dependencies:
|
382 |
+
'@humanwhocodes/object-schema': 2.0.1
|
383 |
+
debug: 4.3.4
|
384 |
+
minimatch: 3.1.2
|
385 |
+
transitivePeerDependencies:
|
386 |
+
- supports-color
|
387 |
+
dev: true
|
388 |
+
|
389 |
+
/@humanwhocodes/module-importer@1.0.1:
|
390 |
+
resolution: {integrity: sha512-bxveV4V8v5Yb4ncFTT3rPSgZBOpCkjfK0y4oVVVJwIuDVBRMDXrPyXRL988i5ap9m9bnyEEjWfm5WkBmtffLfA==}
|
391 |
+
engines: {node: '>=12.22'}
|
392 |
+
dev: true
|
393 |
+
|
394 |
+
/@humanwhocodes/object-schema@2.0.1:
|
395 |
+
resolution: {integrity: sha512-dvuCeX5fC9dXgJn9t+X5atfmgQAzUOWqS1254Gh0m6i8wKd10ebXkfNKiRK+1GWi/yTvvLDHpoxLr0xxxeslWw==}
|
396 |
+
dev: true
|
397 |
+
|
398 |
+
/@jridgewell/gen-mapping@0.3.3:
|
399 |
+
resolution: {integrity: sha512-HLhSWOLRi875zjjMG/r+Nv0oCW8umGb0BgEhyX3dDX3egwZtB8PqLnjz3yedt8R5StBrzcg4aBpnh8UA9D1BoQ==}
|
400 |
+
engines: {node: '>=6.0.0'}
|
401 |
+
dependencies:
|
402 |
+
'@jridgewell/set-array': 1.1.2
|
403 |
+
'@jridgewell/sourcemap-codec': 1.4.15
|
404 |
+
'@jridgewell/trace-mapping': 0.3.20
|
405 |
+
dev: true
|
406 |
+
|
407 |
+
/@jridgewell/resolve-uri@3.1.1:
|
408 |
+
resolution: {integrity: sha512-dSYZh7HhCDtCKm4QakX0xFpsRDqjjtZf/kjI/v3T3Nwt5r8/qz/M19F9ySyOqU94SXBmeG9ttTul+YnR4LOxFA==}
|
409 |
+
engines: {node: '>=6.0.0'}
|
410 |
+
dev: true
|
411 |
+
|
412 |
+
/@jridgewell/set-array@1.1.2:
|
413 |
+
resolution: {integrity: sha512-xnkseuNADM0gt2bs+BvhO0p78Mk762YnZdsuzFV018NoG1Sj1SCQvpSqa7XUaTam5vAGasABV9qXASMKnFMwMw==}
|
414 |
+
engines: {node: '>=6.0.0'}
|
415 |
+
dev: true
|
416 |
+
|
417 |
+
/@jridgewell/sourcemap-codec@1.4.15:
|
418 |
+
resolution: {integrity: sha512-eF2rxCRulEKXHTRiDrDy6erMYWqNw4LPdQ8UQA4huuxaQsVeRPFl2oM8oDGxMFhJUWZf9McpLtJasDDZb/Bpeg==}
|
419 |
+
|
420 |
+
/@jridgewell/trace-mapping@0.3.20:
|
421 |
+
resolution: {integrity: sha512-R8LcPeWZol2zR8mmH3JeKQ6QRCFb7XgUhV9ZlGhHLGyg4wpPiPZNQOOWhFZhxKw8u//yTbNGI42Bx/3paXEQ+Q==}
|
422 |
+
dependencies:
|
423 |
+
'@jridgewell/resolve-uri': 3.1.1
|
424 |
+
'@jridgewell/sourcemap-codec': 1.4.15
|
425 |
+
dev: true
|
426 |
+
|
427 |
+
/@nodelib/fs.scandir@2.1.5:
|
428 |
+
resolution: {integrity: sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==}
|
429 |
+
engines: {node: '>= 8'}
|
430 |
+
dependencies:
|
431 |
+
'@nodelib/fs.stat': 2.0.5
|
432 |
+
run-parallel: 1.2.0
|
433 |
+
dev: true
|
434 |
+
|
435 |
+
/@nodelib/fs.stat@2.0.5:
|
436 |
+
resolution: {integrity: sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==}
|
437 |
+
engines: {node: '>= 8'}
|
438 |
+
dev: true
|
439 |
+
|
440 |
+
/@nodelib/fs.walk@1.2.8:
|
441 |
+
resolution: {integrity: sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==}
|
442 |
+
engines: {node: '>= 8'}
|
443 |
+
dependencies:
|
444 |
+
'@nodelib/fs.scandir': 2.1.5
|
445 |
+
fastq: 1.16.0
|
446 |
+
dev: true
|
447 |
+
|
448 |
+
/@rollup/rollup-android-arm-eabi@4.9.1:
|
449 |
+
resolution: {integrity: sha512-6vMdBZqtq1dVQ4CWdhFwhKZL6E4L1dV6jUjuBvsavvNJSppzi6dLBbuV+3+IyUREaj9ZFvQefnQm28v4OCXlig==}
|
450 |
+
cpu: [arm]
|
451 |
+
os: [android]
|
452 |
+
requiresBuild: true
|
453 |
+
dev: true
|
454 |
+
optional: true
|
455 |
+
|
456 |
+
/@rollup/rollup-android-arm64@4.9.1:
|
457 |
+
resolution: {integrity: sha512-Jto9Fl3YQ9OLsTDWtLFPtaIMSL2kwGyGoVCmPC8Gxvym9TCZm4Sie+cVeblPO66YZsYH8MhBKDMGZ2NDxuk/XQ==}
|
458 |
+
cpu: [arm64]
|
459 |
+
os: [android]
|
460 |
+
requiresBuild: true
|
461 |
+
dev: true
|
462 |
+
optional: true
|
463 |
+
|
464 |
+
/@rollup/rollup-darwin-arm64@4.9.1:
|
465 |
+
resolution: {integrity: sha512-LtYcLNM+bhsaKAIGwVkh5IOWhaZhjTfNOkGzGqdHvhiCUVuJDalvDxEdSnhFzAn+g23wgsycmZk1vbnaibZwwA==}
|
466 |
+
cpu: [arm64]
|
467 |
+
os: [darwin]
|
468 |
+
requiresBuild: true
|
469 |
+
dev: true
|
470 |
+
optional: true
|
471 |
+
|
472 |
+
/@rollup/rollup-darwin-x64@4.9.1:
|
473 |
+
resolution: {integrity: sha512-KyP/byeXu9V+etKO6Lw3E4tW4QdcnzDG/ake031mg42lob5tN+5qfr+lkcT/SGZaH2PdW4Z1NX9GHEkZ8xV7og==}
|
474 |
+
cpu: [x64]
|
475 |
+
os: [darwin]
|
476 |
+
requiresBuild: true
|
477 |
+
dev: true
|
478 |
+
optional: true
|
479 |
+
|
480 |
+
/@rollup/rollup-linux-arm-gnueabihf@4.9.1:
|
481 |
+
resolution: {integrity: sha512-Yqz/Doumf3QTKplwGNrCHe/B2p9xqDghBZSlAY0/hU6ikuDVQuOUIpDP/YcmoT+447tsZTmirmjgG3znvSCR0Q==}
|
482 |
+
cpu: [arm]
|
483 |
+
os: [linux]
|
484 |
+
requiresBuild: true
|
485 |
+
dev: true
|
486 |
+
optional: true
|
487 |
+
|
488 |
+
/@rollup/rollup-linux-arm64-gnu@4.9.1:
|
489 |
+
resolution: {integrity: sha512-u3XkZVvxcvlAOlQJ3UsD1rFvLWqu4Ef/Ggl40WAVCuogf4S1nJPHh5RTgqYFpCOvuGJ7H5yGHabjFKEZGExk5Q==}
|
490 |
+
cpu: [arm64]
|
491 |
+
os: [linux]
|
492 |
+
requiresBuild: true
|
493 |
+
dev: true
|
494 |
+
optional: true
|
495 |
+
|
496 |
+
/@rollup/rollup-linux-arm64-musl@4.9.1:
|
497 |
+
resolution: {integrity: sha512-0XSYN/rfWShW+i+qjZ0phc6vZ7UWI8XWNz4E/l+6edFt+FxoEghrJHjX1EY/kcUGCnZzYYRCl31SNdfOi450Aw==}
|
498 |
+
cpu: [arm64]
|
499 |
+
os: [linux]
|
500 |
+
requiresBuild: true
|
501 |
+
dev: true
|
502 |
+
optional: true
|
503 |
+
|
504 |
+
/@rollup/rollup-linux-riscv64-gnu@4.9.1:
|
505 |
+
resolution: {integrity: sha512-LmYIO65oZVfFt9t6cpYkbC4d5lKHLYv5B4CSHRpnANq0VZUQXGcCPXHzbCXCz4RQnx7jvlYB1ISVNCE/omz5cw==}
|
506 |
+
cpu: [riscv64]
|
507 |
+
os: [linux]
|
508 |
+
requiresBuild: true
|
509 |
+
dev: true
|
510 |
+
optional: true
|
511 |
+
|
512 |
+
/@rollup/rollup-linux-x64-gnu@4.9.1:
|
513 |
+
resolution: {integrity: sha512-kr8rEPQ6ns/Lmr/hiw8sEVj9aa07gh1/tQF2Y5HrNCCEPiCBGnBUt9tVusrcBBiJfIt1yNaXN6r1CCmpbFEDpg==}
|
514 |
+
cpu: [x64]
|
515 |
+
os: [linux]
|
516 |
+
requiresBuild: true
|
517 |
+
dev: true
|
518 |
+
optional: true
|
519 |
+
|
520 |
+
/@rollup/rollup-linux-x64-musl@4.9.1:
|
521 |
+
resolution: {integrity: sha512-t4QSR7gN+OEZLG0MiCgPqMWZGwmeHhsM4AkegJ0Kiy6TnJ9vZ8dEIwHw1LcZKhbHxTY32hp9eVCMdR3/I8MGRw==}
|
522 |
+
cpu: [x64]
|
523 |
+
os: [linux]
|
524 |
+
requiresBuild: true
|
525 |
+
dev: true
|
526 |
+
optional: true
|
527 |
+
|
528 |
+
/@rollup/rollup-win32-arm64-msvc@4.9.1:
|
529 |
+
resolution: {integrity: sha512-7XI4ZCBN34cb+BH557FJPmh0kmNz2c25SCQeT9OiFWEgf8+dL6ZwJ8f9RnUIit+j01u07Yvrsuu1rZGxJCc51g==}
|
530 |
+
cpu: [arm64]
|
531 |
+
os: [win32]
|
532 |
+
requiresBuild: true
|
533 |
+
dev: true
|
534 |
+
optional: true
|
535 |
+
|
536 |
+
/@rollup/rollup-win32-ia32-msvc@4.9.1:
|
537 |
+
resolution: {integrity: sha512-yE5c2j1lSWOH5jp+Q0qNL3Mdhr8WuqCNVjc6BxbVfS5cAS6zRmdiw7ktb8GNpDCEUJphILY6KACoFoRtKoqNQg==}
|
538 |
+
cpu: [ia32]
|
539 |
+
os: [win32]
|
540 |
+
requiresBuild: true
|
541 |
+
dev: true
|
542 |
+
optional: true
|
543 |
+
|
544 |
+
/@rollup/rollup-win32-x64-msvc@4.9.1:
|
545 |
+
resolution: {integrity: sha512-PyJsSsafjmIhVgaI1Zdj7m8BB8mMckFah/xbpplObyHfiXzKcI5UOUXRyOdHW7nz4DpMCuzLnF7v5IWHenCwYA==}
|
546 |
+
cpu: [x64]
|
547 |
+
os: [win32]
|
548 |
+
requiresBuild: true
|
549 |
+
dev: true
|
550 |
+
optional: true
|
551 |
+
|
552 |
+
/@tsconfig/node20@20.1.2:
|
553 |
+
resolution: {integrity: sha512-madaWq2k+LYMEhmcp0fs+OGaLFk0OenpHa4gmI4VEmCKX4PJntQ6fnnGADVFrVkBj0wIdAlQnK/MrlYTHsa1gQ==}
|
554 |
+
dev: true
|
555 |
+
|
556 |
+
/@turf/bbox@6.5.0:
|
557 |
+
resolution: {integrity: sha512-RBbLaao5hXTYyyg577iuMtDB8ehxMlUqHEJiMs8jT1GHkFhr6sYre3lmLsPeYEi/ZKj5TP5tt7fkzNdJ4GIVyw==}
|
558 |
+
dependencies:
|
559 |
+
'@turf/helpers': 6.5.0
|
560 |
+
'@turf/meta': 6.5.0
|
561 |
+
dev: false
|
562 |
+
|
563 |
+
/@turf/bearing@6.5.0:
|
564 |
+
resolution: {integrity: sha512-dxINYhIEMzgDOztyMZc20I7ssYVNEpSv04VbMo5YPQsqa80KO3TFvbuCahMsCAW5z8Tncc8dwBlEFrmRjJG33A==}
|
565 |
+
dependencies:
|
566 |
+
'@turf/helpers': 6.5.0
|
567 |
+
'@turf/invariant': 6.5.0
|
568 |
+
dev: false
|
569 |
+
|
570 |
+
/@turf/boolean-contains@6.5.0:
|
571 |
+
resolution: {integrity: sha512-4m8cJpbw+YQcKVGi8y0cHhBUnYT+QRfx6wzM4GI1IdtYH3p4oh/DOBJKrepQyiDzFDaNIjxuWXBh0ai1zVwOQQ==}
|
572 |
+
dependencies:
|
573 |
+
'@turf/bbox': 6.5.0
|
574 |
+
'@turf/boolean-point-in-polygon': 6.5.0
|
575 |
+
'@turf/boolean-point-on-line': 6.5.0
|
576 |
+
'@turf/helpers': 6.5.0
|
577 |
+
'@turf/invariant': 6.5.0
|
578 |
+
dev: false
|
579 |
+
|
580 |
+
/@turf/boolean-point-in-polygon@6.5.0:
|
581 |
+
resolution: {integrity: sha512-DtSuVFB26SI+hj0SjrvXowGTUCHlgevPAIsukssW6BG5MlNSBQAo70wpICBNJL6RjukXg8d2eXaAWuD/CqL00A==}
|
582 |
+
dependencies:
|
583 |
+
'@turf/helpers': 6.5.0
|
584 |
+
'@turf/invariant': 6.5.0
|
585 |
+
dev: false
|
586 |
+
|
587 |
+
/@turf/boolean-point-on-line@6.5.0:
|
588 |
+
resolution: {integrity: sha512-A1BbuQ0LceLHvq7F/P7w3QvfpmZqbmViIUPHdNLvZimFNLo4e6IQunmzbe+8aSStH9QRZm3VOflyvNeXvvpZEQ==}
|
589 |
+
dependencies:
|
590 |
+
'@turf/helpers': 6.5.0
|
591 |
+
'@turf/invariant': 6.5.0
|
592 |
+
dev: false
|
593 |
+
|
594 |
+
/@turf/destination@6.5.0:
|
595 |
+
resolution: {integrity: sha512-4cnWQlNC8d1tItOz9B4pmJdWpXqS0vEvv65bI/Pj/genJnsL7evI0/Xw42RvEGROS481MPiU80xzvwxEvhQiMQ==}
|
596 |
+
dependencies:
|
597 |
+
'@turf/helpers': 6.5.0
|
598 |
+
'@turf/invariant': 6.5.0
|
599 |
+
dev: false
|
600 |
+
|
601 |
+
/@turf/distance@6.5.0:
|
602 |
+
resolution: {integrity: sha512-xzykSLfoURec5qvQJcfifw/1mJa+5UwByZZ5TZ8iaqjGYN0vomhV9aiSLeYdUGtYRESZ+DYC/OzY+4RclZYgMg==}
|
603 |
+
dependencies:
|
604 |
+
'@turf/helpers': 6.5.0
|
605 |
+
'@turf/invariant': 6.5.0
|
606 |
+
dev: false
|
607 |
+
|
608 |
+
/@turf/helpers@6.5.0:
|
609 |
+
resolution: {integrity: sha512-VbI1dV5bLFzohYYdgqwikdMVpe7pJ9X3E+dlr425wa2/sMJqYDhTO++ec38/pcPvPE6oD9WEEeU3Xu3gza+VPw==}
|
610 |
+
dev: false
|
611 |
+
|
612 |
+
/@turf/invariant@6.5.0:
|
613 |
+
resolution: {integrity: sha512-Wv8PRNCtPD31UVbdJE/KVAWKe7l6US+lJItRR/HOEW3eh+U/JwRCSUl/KZ7bmjM/C+zLNoreM2TU6OoLACs4eg==}
|
614 |
+
dependencies:
|
615 |
+
'@turf/helpers': 6.5.0
|
616 |
+
dev: false
|
617 |
+
|
618 |
+
/@turf/kinks@6.5.0:
|
619 |
+
resolution: {integrity: sha512-ViCngdPt1eEL7hYUHR2eHR662GvCgTc35ZJFaNR6kRtr6D8plLaDju0FILeFFWSc+o8e3fwxZEJKmFj9IzPiIQ==}
|
620 |
+
dependencies:
|
621 |
+
'@turf/helpers': 6.5.0
|
622 |
+
dev: false
|
623 |
+
|
624 |
+
/@turf/line-intersect@6.5.0:
|
625 |
+
resolution: {integrity: sha512-CS6R1tZvVQD390G9Ea4pmpM6mJGPWoL82jD46y0q1KSor9s6HupMIo1kY4Ny+AEYQl9jd21V3Scz20eldpbTVA==}
|
626 |
+
dependencies:
|
627 |
+
'@turf/helpers': 6.5.0
|
628 |
+
'@turf/invariant': 6.5.0
|
629 |
+
'@turf/line-segment': 6.5.0
|
630 |
+
'@turf/meta': 6.5.0
|
631 |
+
geojson-rbush: 3.2.0
|
632 |
+
dev: false
|
633 |
+
|
634 |
+
/@turf/line-segment@6.5.0:
|
635 |
+
resolution: {integrity: sha512-jI625Ho4jSuJESNq66Mmi290ZJ5pPZiQZruPVpmHkUw257Pew0alMmb6YrqYNnLUuiVVONxAAKXUVeeUGtycfw==}
|
636 |
+
dependencies:
|
637 |
+
'@turf/helpers': 6.5.0
|
638 |
+
'@turf/invariant': 6.5.0
|
639 |
+
'@turf/meta': 6.5.0
|
640 |
+
dev: false
|
641 |
+
|
642 |
+
/@turf/line-split@6.5.0:
|
643 |
+
resolution: {integrity: sha512-/rwUMVr9OI2ccJjw7/6eTN53URtGThNSD5I0GgxyFXMtxWiloRJ9MTff8jBbtPWrRka/Sh2GkwucVRAEakx9Sw==}
|
644 |
+
dependencies:
|
645 |
+
'@turf/bbox': 6.5.0
|
646 |
+
'@turf/helpers': 6.5.0
|
647 |
+
'@turf/invariant': 6.5.0
|
648 |
+
'@turf/line-intersect': 6.5.0
|
649 |
+
'@turf/line-segment': 6.5.0
|
650 |
+
'@turf/meta': 6.5.0
|
651 |
+
'@turf/nearest-point-on-line': 6.5.0
|
652 |
+
'@turf/square': 6.5.0
|
653 |
+
'@turf/truncate': 6.5.0
|
654 |
+
geojson-rbush: 3.2.0
|
655 |
+
dev: false
|
656 |
+
|
657 |
+
/@turf/meta@6.5.0:
|
658 |
+
resolution: {integrity: sha512-RrArvtsV0vdsCBegoBtOalgdSOfkBrTJ07VkpiCnq/491W67hnMWmDu7e6Ztw0C3WldRYTXkg3SumfdzZxLBHA==}
|
659 |
+
dependencies:
|
660 |
+
'@turf/helpers': 6.5.0
|
661 |
+
dev: false
|
662 |
+
|
663 |
+
/@turf/nearest-point-on-line@6.5.0:
|
664 |
+
resolution: {integrity: sha512-WthrvddddvmymnC+Vf7BrkHGbDOUu6Z3/6bFYUGv1kxw8tiZ6n83/VG6kHz4poHOfS0RaNflzXSkmCi64fLBlg==}
|
665 |
+
dependencies:
|
666 |
+
'@turf/bearing': 6.5.0
|
667 |
+
'@turf/destination': 6.5.0
|
668 |
+
'@turf/distance': 6.5.0
|
669 |
+
'@turf/helpers': 6.5.0
|
670 |
+
'@turf/invariant': 6.5.0
|
671 |
+
'@turf/line-intersect': 6.5.0
|
672 |
+
'@turf/meta': 6.5.0
|
673 |
+
dev: false
|
674 |
+
|
675 |
+
/@turf/square@6.5.0:
|
676 |
+
resolution: {integrity: sha512-BM2UyWDmiuHCadVhHXKIx5CQQbNCpOxB6S/aCNOCLbhCeypKX5Q0Aosc5YcmCJgkwO5BERCC6Ee7NMbNB2vHmQ==}
|
677 |
+
dependencies:
|
678 |
+
'@turf/distance': 6.5.0
|
679 |
+
'@turf/helpers': 6.5.0
|
680 |
+
dev: false
|
681 |
+
|
682 |
+
/@turf/truncate@6.5.0:
|
683 |
+
resolution: {integrity: sha512-pFxg71pLk+eJj134Z9yUoRhIi8vqnnKvCYwdT4x/DQl/19RVdq1tV3yqOT3gcTQNfniteylL5qV1uTBDV5sgrg==}
|
684 |
+
dependencies:
|
685 |
+
'@turf/helpers': 6.5.0
|
686 |
+
'@turf/meta': 6.5.0
|
687 |
+
dev: false
|
688 |
+
|
689 |
+
/@types/geojson@7946.0.13:
|
690 |
+
resolution: {integrity: sha512-bmrNrgKMOhM3WsafmbGmC+6dsF2Z308vLFsQ3a/bT8X8Sv5clVYpPars/UPq+sAaJP+5OoLAYgwbkS5QEJdLUQ==}
|
691 |
+
dev: true
|
692 |
+
|
693 |
+
/@types/geojson@7946.0.8:
|
694 |
+
resolution: {integrity: sha512-1rkryxURpr6aWP7R786/UQOkJ3PcpQiWkAXBmdWc7ryFWqN6a4xfK7BtjXvFBKO9LjQ+MWQSWxYeZX1OApnArA==}
|
695 |
+
dev: false
|
696 |
+
|
697 |
+
/@types/leaflet@1.9.8:
|
698 |
+
resolution: {integrity: sha512-EXdsL4EhoUtGm2GC2ZYtXn+Fzc6pluVgagvo2VC1RHWToLGlTRwVYoDpqS/7QXa01rmDyBjJk3Catpf60VMkwg==}
|
699 |
+
dependencies:
|
700 |
+
'@types/geojson': 7946.0.13
|
701 |
+
dev: true
|
702 |
+
|
703 |
+
/@types/node@20.10.5:
|
704 |
+
resolution: {integrity: sha512-nNPsNE65wjMxEKI93yOP+NPGGBJz/PoN3kZsVLee0XMiJolxSekEVD8wRwBUBqkwc7UWop0edW50yrCQW4CyRw==}
|
705 |
+
dependencies:
|
706 |
+
undici-types: 5.26.5
|
707 |
+
dev: true
|
708 |
+
|
709 |
+
/@ungap/structured-clone@1.2.0:
|
710 |
+
resolution: {integrity: sha512-zuVdFrMJiuCDQUMCzQaD6KL28MjnqqN8XnAqiEq9PNm/hCPTSGfrXCOfwj1ow4LFb/tNymJPwsNbVePc1xFqrQ==}
|
711 |
+
dev: true
|
712 |
+
|
713 |
+
/@vitejs/plugin-vue@4.5.2(vite@5.0.10)(vue@3.3.13):
|
714 |
+
resolution: {integrity: sha512-UGR3DlzLi/SaVBPX0cnSyE37vqxU3O6chn8l0HJNzQzDia6/Au2A4xKv+iIJW8w2daf80G7TYHhi1pAUjdZ0bQ==}
|
715 |
+
engines: {node: ^14.18.0 || >=16.0.0}
|
716 |
+
peerDependencies:
|
717 |
+
vite: ^4.0.0 || ^5.0.0
|
718 |
+
vue: ^3.2.25
|
719 |
+
dependencies:
|
720 |
+
vite: 5.0.10(@types/node@20.10.5)
|
721 |
+
vue: 3.3.13
|
722 |
+
dev: true
|
723 |
+
|
724 |
+
/@vue/compiler-core@3.3.13:
|
725 |
+
resolution: {integrity: sha512-bwi9HShGu7uaZLOErZgsH2+ojsEdsjerbf2cMXPwmvcgZfVPZ2BVZzCVnwZBxTAYd6Mzbmf6izcUNDkWnBBQ6A==}
|
726 |
+
dependencies:
|
727 |
+
'@babel/parser': 7.23.6
|
728 |
+
'@vue/shared': 3.3.13
|
729 |
+
estree-walker: 2.0.2
|
730 |
+
source-map-js: 1.0.2
|
731 |
+
|
732 |
+
/@vue/compiler-dom@3.3.13:
|
733 |
+
resolution: {integrity: sha512-EYRDpbLadGtNL0Gph+HoKiYqXLqZ0xSSpR5Dvnu/Ep7ggaCbjRDIus1MMxTS2Qm0koXED4xSlvTZaTnI8cYAsw==}
|
734 |
+
dependencies:
|
735 |
+
'@vue/compiler-core': 3.3.13
|
736 |
+
'@vue/shared': 3.3.13
|
737 |
+
|
738 |
+
/@vue/compiler-sfc@3.3.13:
|
739 |
+
resolution: {integrity: sha512-DQVmHEy/EKIgggvnGRLx21hSqnr1smUS9Aq8tfxiiot8UR0/pXKHN9k78/qQ7etyQTFj5em5nruODON7dBeumw==}
|
740 |
+
dependencies:
|
741 |
+
'@babel/parser': 7.23.6
|
742 |
+
'@vue/compiler-core': 3.3.13
|
743 |
+
'@vue/compiler-dom': 3.3.13
|
744 |
+
'@vue/compiler-ssr': 3.3.13
|
745 |
+
'@vue/reactivity-transform': 3.3.13
|
746 |
+
'@vue/shared': 3.3.13
|
747 |
+
estree-walker: 2.0.2
|
748 |
+
magic-string: 0.30.5
|
749 |
+
postcss: 8.4.32
|
750 |
+
source-map-js: 1.0.2
|
751 |
+
|
752 |
+
/@vue/compiler-ssr@3.3.13:
|
753 |
+
resolution: {integrity: sha512-d/P3bCeUGmkJNS1QUZSAvoCIW4fkOKK3l2deE7zrp0ypJEy+En2AcypIkqvcFQOcw3F0zt2VfMvNsA9JmExTaw==}
|
754 |
+
dependencies:
|
755 |
+
'@vue/compiler-dom': 3.3.13
|
756 |
+
'@vue/shared': 3.3.13
|
757 |
+
|
758 |
+
/@vue/reactivity-transform@3.3.13:
|
759 |
+
resolution: {integrity: sha512-oWnydGH0bBauhXvh5KXUy61xr9gKaMbtsMHk40IK9M4gMuKPJ342tKFarY0eQ6jef8906m35q37wwA8DMZOm5Q==}
|
760 |
+
dependencies:
|
761 |
+
'@babel/parser': 7.23.6
|
762 |
+
'@vue/compiler-core': 3.3.13
|
763 |
+
'@vue/shared': 3.3.13
|
764 |
+
estree-walker: 2.0.2
|
765 |
+
magic-string: 0.30.5
|
766 |
+
|
767 |
+
/@vue/reactivity@3.3.13:
|
768 |
+
resolution: {integrity: sha512-fjzCxceMahHhi4AxUBzQqqVhuA21RJ0COaWTbIBl1PruGW1CeY97louZzLi4smpYx+CHfFPPU/CS8NybbGvPKQ==}
|
769 |
+
dependencies:
|
770 |
+
'@vue/shared': 3.3.13
|
771 |
+
|
772 |
+
/@vue/runtime-core@3.3.13:
|
773 |
+
resolution: {integrity: sha512-1TzA5TvGuh2zUwMJgdfvrBABWZ7y8kBwBhm7BXk8rvdx2SsgcGfz2ruv2GzuGZNvL1aKnK8CQMV/jFOrxNQUMA==}
|
774 |
+
dependencies:
|
775 |
+
'@vue/reactivity': 3.3.13
|
776 |
+
'@vue/shared': 3.3.13
|
777 |
+
|
778 |
+
/@vue/runtime-dom@3.3.13:
|
779 |
+
resolution: {integrity: sha512-JJkpE8R/hJKXqVTgUoODwS5wqKtOsmJPEqmp90PDVGygtJ4C0PtOkcEYXwhiVEmef6xeXcIlrT3Yo5aQ4qkHhQ==}
|
780 |
+
dependencies:
|
781 |
+
'@vue/runtime-core': 3.3.13
|
782 |
+
'@vue/shared': 3.3.13
|
783 |
+
csstype: 3.1.3
|
784 |
+
|
785 |
+
/@vue/server-renderer@3.3.13(vue@3.3.13):
|
786 |
+
resolution: {integrity: sha512-vSnN+nuf6iSqTL3Qgx/9A+BT+0Zf/VJOgF5uMZrKjYPs38GMYyAU1coDyBNHauehXDaP+zl73VhwWv0vBRBHcg==}
|
787 |
+
peerDependencies:
|
788 |
+
vue: 3.3.13
|
789 |
+
dependencies:
|
790 |
+
'@vue/compiler-ssr': 3.3.13
|
791 |
+
'@vue/shared': 3.3.13
|
792 |
+
vue: 3.3.13
|
793 |
+
|
794 |
+
/@vue/shared@3.3.13:
|
795 |
+
resolution: {integrity: sha512-/zYUwiHD8j7gKx2argXEMCUXVST6q/21DFU0sTfNX0URJroCe3b1UF6vLJ3lQDfLNIiiRl2ONp7Nh5UVWS6QnA==}
|
796 |
+
|
797 |
+
/@vue/tsconfig@0.5.1:
|
798 |
+
resolution: {integrity: sha512-VcZK7MvpjuTPx2w6blwnwZAu5/LgBUtejFOi3pPGQFXQN5Ela03FUtd2Qtg4yWGGissVL0dr6Ro1LfOFh+PCuQ==}
|
799 |
+
dev: true
|
800 |
+
|
801 |
+
/acorn-jsx@5.3.2(acorn@8.11.2):
|
802 |
+
resolution: {integrity: sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==}
|
803 |
+
peerDependencies:
|
804 |
+
acorn: ^6.0.0 || ^7.0.0 || ^8.0.0
|
805 |
+
dependencies:
|
806 |
+
acorn: 8.11.2
|
807 |
+
dev: true
|
808 |
+
|
809 |
+
/acorn@8.11.2:
|
810 |
+
resolution: {integrity: sha512-nc0Axzp/0FILLEVsm4fNwLCwMttvhEI263QtVPQcbpfZZ3ts0hLsZGOpE6czNlid7CJ9MlyH8reXkpsf3YUY4w==}
|
811 |
+
engines: {node: '>=0.4.0'}
|
812 |
+
hasBin: true
|
813 |
+
dev: true
|
814 |
+
|
815 |
+
/ajv@6.12.6:
|
816 |
+
resolution: {integrity: sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==}
|
817 |
+
dependencies:
|
818 |
+
fast-deep-equal: 3.1.3
|
819 |
+
fast-json-stable-stringify: 2.1.0
|
820 |
+
json-schema-traverse: 0.4.1
|
821 |
+
uri-js: 4.4.1
|
822 |
+
dev: true
|
823 |
+
|
824 |
+
/ansi-regex@5.0.1:
|
825 |
+
resolution: {integrity: sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==}
|
826 |
+
engines: {node: '>=8'}
|
827 |
+
dev: true
|
828 |
+
|
829 |
+
/ansi-styles@4.3.0:
|
830 |
+
resolution: {integrity: sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==}
|
831 |
+
engines: {node: '>=8'}
|
832 |
+
dependencies:
|
833 |
+
color-convert: 2.0.1
|
834 |
+
dev: true
|
835 |
+
|
836 |
+
/any-promise@1.3.0:
|
837 |
+
resolution: {integrity: sha512-7UvmKalWRt1wgjL1RrGxoSJW/0QZFIegpeGvZG9kjp8vrRu55XTHbwnqq2GpXm9uLbcuhxm3IqX9OB4MZR1b2A==}
|
838 |
+
dev: true
|
839 |
+
|
840 |
+
/anymatch@3.1.3:
|
841 |
+
resolution: {integrity: sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==}
|
842 |
+
engines: {node: '>= 8'}
|
843 |
+
dependencies:
|
844 |
+
normalize-path: 3.0.0
|
845 |
+
picomatch: 2.3.1
|
846 |
+
dev: true
|
847 |
+
|
848 |
+
/arg@5.0.2:
|
849 |
+
resolution: {integrity: sha512-PYjyFOLKQ9y57JvQ6QLo8dAgNqswh8M1RMJYdQduT6xbWSgK36P/Z/v+p888pM69jMMfS8Xd8F6I1kQ/I9HUGg==}
|
850 |
+
dev: true
|
851 |
+
|
852 |
+
/argparse@2.0.1:
|
853 |
+
resolution: {integrity: sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==}
|
854 |
+
dev: true
|
855 |
+
|
856 |
+
/autoprefixer@10.4.16(postcss@8.4.32):
|
857 |
+
resolution: {integrity: sha512-7vd3UC6xKp0HLfua5IjZlcXvGAGy7cBAXTg2lyQ/8WpNhd6SiZ8Be+xm3FyBSYJx5GKcpRCzBh7RH4/0dnY+uQ==}
|
858 |
+
engines: {node: ^10 || ^12 || >=14}
|
859 |
+
hasBin: true
|
860 |
+
peerDependencies:
|
861 |
+
postcss: ^8.1.0
|
862 |
+
dependencies:
|
863 |
+
browserslist: 4.22.2
|
864 |
+
caniuse-lite: 1.0.30001570
|
865 |
+
fraction.js: 4.3.7
|
866 |
+
normalize-range: 0.1.2
|
867 |
+
picocolors: 1.0.0
|
868 |
+
postcss: 8.4.32
|
869 |
+
postcss-value-parser: 4.2.0
|
870 |
+
dev: true
|
871 |
+
|
872 |
+
/balanced-match@1.0.2:
|
873 |
+
resolution: {integrity: sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==}
|
874 |
+
dev: true
|
875 |
+
|
876 |
+
/binary-extensions@2.2.0:
|
877 |
+
resolution: {integrity: sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA==}
|
878 |
+
engines: {node: '>=8'}
|
879 |
+
dev: true
|
880 |
+
|
881 |
+
/boolbase@1.0.0:
|
882 |
+
resolution: {integrity: sha512-JZOSA7Mo9sNGB8+UjSgzdLtokWAky1zbztM3WRLCbZ70/3cTANmQmOdR7y2g+J0e2WXywy1yS468tY+IruqEww==}
|
883 |
+
dev: true
|
884 |
+
|
885 |
+
/brace-expansion@1.1.11:
|
886 |
+
resolution: {integrity: sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==}
|
887 |
+
dependencies:
|
888 |
+
balanced-match: 1.0.2
|
889 |
+
concat-map: 0.0.1
|
890 |
+
dev: true
|
891 |
+
|
892 |
+
/braces@3.0.2:
|
893 |
+
resolution: {integrity: sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==}
|
894 |
+
engines: {node: '>=8'}
|
895 |
+
dependencies:
|
896 |
+
fill-range: 7.0.1
|
897 |
+
dev: true
|
898 |
+
|
899 |
+
/browserslist@4.22.2:
|
900 |
+
resolution: {integrity: sha512-0UgcrvQmBDvZHFGdYUehrCNIazki7/lUP3kkoi/r3YB2amZbFM9J43ZRkJTXBUZK4gmx56+Sqk9+Vs9mwZx9+A==}
|
901 |
+
engines: {node: ^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7}
|
902 |
+
hasBin: true
|
903 |
+
dependencies:
|
904 |
+
caniuse-lite: 1.0.30001570
|
905 |
+
electron-to-chromium: 1.4.615
|
906 |
+
node-releases: 2.0.14
|
907 |
+
update-browserslist-db: 1.0.13(browserslist@4.22.2)
|
908 |
+
dev: true
|
909 |
+
|
910 |
+
/callsites@3.1.0:
|
911 |
+
resolution: {integrity: sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==}
|
912 |
+
engines: {node: '>=6'}
|
913 |
+
dev: true
|
914 |
+
|
915 |
+
/camelcase-css@2.0.1:
|
916 |
+
resolution: {integrity: sha512-QOSvevhslijgYwRx6Rv7zKdMF8lbRmx+uQGx2+vDc+KI/eBnsy9kit5aj23AgGu3pa4t9AgwbnXWqS+iOY+2aA==}
|
917 |
+
engines: {node: '>= 6'}
|
918 |
+
dev: true
|
919 |
+
|
920 |
+
/caniuse-lite@1.0.30001570:
|
921 |
+
resolution: {integrity: sha512-+3e0ASu4sw1SWaoCtvPeyXp+5PsjigkSt8OXZbF9StH5pQWbxEjLAZE3n8Aup5udop1uRiKA7a4utUk/uoSpUw==}
|
922 |
+
dev: true
|
923 |
+
|
924 |
+
/chalk@4.1.2:
|
925 |
+
resolution: {integrity: sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==}
|
926 |
+
engines: {node: '>=10'}
|
927 |
+
dependencies:
|
928 |
+
ansi-styles: 4.3.0
|
929 |
+
supports-color: 7.2.0
|
930 |
+
dev: true
|
931 |
+
|
932 |
+
/chokidar@3.5.3:
|
933 |
+
resolution: {integrity: sha512-Dr3sfKRP6oTcjf2JmUmFJfeVMvXBdegxB0iVQ5eb2V10uFJUCAS8OByZdVAyVb8xXNz3GjjTgj9kLWsZTqE6kw==}
|
934 |
+
engines: {node: '>= 8.10.0'}
|
935 |
+
dependencies:
|
936 |
+
anymatch: 3.1.3
|
937 |
+
braces: 3.0.2
|
938 |
+
glob-parent: 5.1.2
|
939 |
+
is-binary-path: 2.1.0
|
940 |
+
is-glob: 4.0.3
|
941 |
+
normalize-path: 3.0.0
|
942 |
+
readdirp: 3.6.0
|
943 |
+
optionalDependencies:
|
944 |
+
fsevents: 2.3.3
|
945 |
+
dev: true
|
946 |
+
|
947 |
+
/color-convert@2.0.1:
|
948 |
+
resolution: {integrity: sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==}
|
949 |
+
engines: {node: '>=7.0.0'}
|
950 |
+
dependencies:
|
951 |
+
color-name: 1.1.4
|
952 |
+
dev: true
|
953 |
+
|
954 |
+
/color-name@1.1.4:
|
955 |
+
resolution: {integrity: sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==}
|
956 |
+
dev: true
|
957 |
+
|
958 |
+
/commander@4.1.1:
|
959 |
+
resolution: {integrity: sha512-NOKm8xhkzAjzFx8B2v5OAHT+u5pRQc2UCa2Vq9jYL/31o2wi9mxBA7LIFs3sV5VSC49z6pEhfbMULvShKj26WA==}
|
960 |
+
engines: {node: '>= 6'}
|
961 |
+
dev: true
|
962 |
+
|
963 |
+
/concat-map@0.0.1:
|
964 |
+
resolution: {integrity: sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==}
|
965 |
+
dev: true
|
966 |
+
|
967 |
+
/cross-spawn@7.0.3:
|
968 |
+
resolution: {integrity: sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==}
|
969 |
+
engines: {node: '>= 8'}
|
970 |
+
dependencies:
|
971 |
+
path-key: 3.1.1
|
972 |
+
shebang-command: 2.0.0
|
973 |
+
which: 2.0.2
|
974 |
+
dev: true
|
975 |
+
|
976 |
+
/cssesc@3.0.0:
|
977 |
+
resolution: {integrity: sha512-/Tb/JcjK111nNScGob5MNtsntNM1aCNUDipB/TkwZFhyDrrE47SOx/18wF2bbjgc3ZzCSKW1T5nt5EbFoAz/Vg==}
|
978 |
+
engines: {node: '>=4'}
|
979 |
+
hasBin: true
|
980 |
+
dev: true
|
981 |
+
|
982 |
+
/csstype@3.1.3:
|
983 |
+
resolution: {integrity: sha512-M1uQkMl8rQK/szD0LNhtqxIPLpimGm8sOBwU7lLnCpSbTyY3yeU1Vc7l4KT5zT4s/yOxHH5O7tIuuLOCnLADRw==}
|
984 |
+
|
985 |
+
/debug@4.3.4:
|
986 |
+
resolution: {integrity: sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==}
|
987 |
+
engines: {node: '>=6.0'}
|
988 |
+
peerDependencies:
|
989 |
+
supports-color: '*'
|
990 |
+
peerDependenciesMeta:
|
991 |
+
supports-color:
|
992 |
+
optional: true
|
993 |
+
dependencies:
|
994 |
+
ms: 2.1.2
|
995 |
+
dev: true
|
996 |
+
|
997 |
+
/deep-is@0.1.4:
|
998 |
+
resolution: {integrity: sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==}
|
999 |
+
dev: true
|
1000 |
+
|
1001 |
+
/didyoumean@1.2.2:
|
1002 |
+
resolution: {integrity: sha512-gxtyfqMg7GKyhQmb056K7M3xszy/myH8w+B4RT+QXBQsvAOdc3XymqDDPHx1BgPgsdAA5SIifona89YtRATDzw==}
|
1003 |
+
dev: true
|
1004 |
+
|
1005 |
+
/dlv@1.1.3:
|
1006 |
+
resolution: {integrity: sha512-+HlytyjlPKnIG8XuRG8WvmBP8xs8P71y+SKKS6ZXWoEgLuePxtDoUEiH7WkdePWrQ5JBpE6aoVqfZfJUQkjXwA==}
|
1007 |
+
dev: true
|
1008 |
+
|
1009 |
+
/doctrine@3.0.0:
|
1010 |
+
resolution: {integrity: sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w==}
|
1011 |
+
engines: {node: '>=6.0.0'}
|
1012 |
+
dependencies:
|
1013 |
+
esutils: 2.0.3
|
1014 |
+
dev: true
|
1015 |
+
|
1016 |
+
/electron-to-chromium@1.4.615:
|
1017 |
+
resolution: {integrity: sha512-/bKPPcgZVUziECqDc+0HkT87+0zhaWSZHNXqF8FLd2lQcptpmUFwoCSWjCdOng9Gdq+afKArPdEg/0ZW461Eng==}
|
1018 |
+
dev: true
|
1019 |
+
|
1020 |
+
/esbuild@0.19.10:
|
1021 |
+
resolution: {integrity: sha512-S1Y27QGt/snkNYrRcswgRFqZjaTG5a5xM3EQo97uNBnH505pdzSNe/HLBq1v0RO7iK/ngdbhJB6mDAp0OK+iUA==}
|
1022 |
+
engines: {node: '>=12'}
|
1023 |
+
hasBin: true
|
1024 |
+
requiresBuild: true
|
1025 |
+
optionalDependencies:
|
1026 |
+
'@esbuild/aix-ppc64': 0.19.10
|
1027 |
+
'@esbuild/android-arm': 0.19.10
|
1028 |
+
'@esbuild/android-arm64': 0.19.10
|
1029 |
+
'@esbuild/android-x64': 0.19.10
|
1030 |
+
'@esbuild/darwin-arm64': 0.19.10
|
1031 |
+
'@esbuild/darwin-x64': 0.19.10
|
1032 |
+
'@esbuild/freebsd-arm64': 0.19.10
|
1033 |
+
'@esbuild/freebsd-x64': 0.19.10
|
1034 |
+
'@esbuild/linux-arm': 0.19.10
|
1035 |
+
'@esbuild/linux-arm64': 0.19.10
|
1036 |
+
'@esbuild/linux-ia32': 0.19.10
|
1037 |
+
'@esbuild/linux-loong64': 0.19.10
|
1038 |
+
'@esbuild/linux-mips64el': 0.19.10
|
1039 |
+
'@esbuild/linux-ppc64': 0.19.10
|
1040 |
+
'@esbuild/linux-riscv64': 0.19.10
|
1041 |
+
'@esbuild/linux-s390x': 0.19.10
|
1042 |
+
'@esbuild/linux-x64': 0.19.10
|
1043 |
+
'@esbuild/netbsd-x64': 0.19.10
|
1044 |
+
'@esbuild/openbsd-x64': 0.19.10
|
1045 |
+
'@esbuild/sunos-x64': 0.19.10
|
1046 |
+
'@esbuild/win32-arm64': 0.19.10
|
1047 |
+
'@esbuild/win32-ia32': 0.19.10
|
1048 |
+
'@esbuild/win32-x64': 0.19.10
|
1049 |
+
dev: true
|
1050 |
+
|
1051 |
+
/escalade@3.1.1:
|
1052 |
+
resolution: {integrity: sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==}
|
1053 |
+
engines: {node: '>=6'}
|
1054 |
+
dev: true
|
1055 |
+
|
1056 |
+
/escape-string-regexp@4.0.0:
|
1057 |
+
resolution: {integrity: sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==}
|
1058 |
+
engines: {node: '>=10'}
|
1059 |
+
dev: true
|
1060 |
+
|
1061 |
+
/eslint-plugin-vue@9.19.2(eslint@8.56.0):
|
1062 |
+
resolution: {integrity: sha512-CPDqTOG2K4Ni2o4J5wixkLVNwgctKXFu6oBpVJlpNq7f38lh9I80pRTouZSJ2MAebPJlINU/KTFSXyQfBUlymA==}
|
1063 |
+
engines: {node: ^14.17.0 || >=16.0.0}
|
1064 |
+
peerDependencies:
|
1065 |
+
eslint: ^6.2.0 || ^7.0.0 || ^8.0.0
|
1066 |
+
dependencies:
|
1067 |
+
'@eslint-community/eslint-utils': 4.4.0(eslint@8.56.0)
|
1068 |
+
eslint: 8.56.0
|
1069 |
+
natural-compare: 1.4.0
|
1070 |
+
nth-check: 2.1.1
|
1071 |
+
postcss-selector-parser: 6.0.13
|
1072 |
+
semver: 7.5.4
|
1073 |
+
vue-eslint-parser: 9.3.2(eslint@8.56.0)
|
1074 |
+
xml-name-validator: 4.0.0
|
1075 |
+
transitivePeerDependencies:
|
1076 |
+
- supports-color
|
1077 |
+
dev: true
|
1078 |
+
|
1079 |
+
/eslint-scope@7.2.2:
|
1080 |
+
resolution: {integrity: sha512-dOt21O7lTMhDM+X9mB4GX+DZrZtCUJPL/wlcTqxyrx5IvO0IYtILdtrQGQp+8n5S0gwSVmOf9NQrjMOgfQZlIg==}
|
1081 |
+
engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0}
|
1082 |
+
dependencies:
|
1083 |
+
esrecurse: 4.3.0
|
1084 |
+
estraverse: 5.3.0
|
1085 |
+
dev: true
|
1086 |
+
|
1087 |
+
/eslint-visitor-keys@3.4.3:
|
1088 |
+
resolution: {integrity: sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag==}
|
1089 |
+
engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0}
|
1090 |
+
dev: true
|
1091 |
+
|
1092 |
+
/eslint@8.56.0:
|
1093 |
+
resolution: {integrity: sha512-Go19xM6T9puCOWntie1/P997aXxFsOi37JIHRWI514Hc6ZnaHGKY9xFhrU65RT6CcBEzZoGG1e6Nq+DT04ZtZQ==}
|
1094 |
+
engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0}
|
1095 |
+
hasBin: true
|
1096 |
+
dependencies:
|
1097 |
+
'@eslint-community/eslint-utils': 4.4.0(eslint@8.56.0)
|
1098 |
+
'@eslint-community/regexpp': 4.10.0
|
1099 |
+
'@eslint/eslintrc': 2.1.4
|
1100 |
+
'@eslint/js': 8.56.0
|
1101 |
+
'@humanwhocodes/config-array': 0.11.13
|
1102 |
+
'@humanwhocodes/module-importer': 1.0.1
|
1103 |
+
'@nodelib/fs.walk': 1.2.8
|
1104 |
+
'@ungap/structured-clone': 1.2.0
|
1105 |
+
ajv: 6.12.6
|
1106 |
+
chalk: 4.1.2
|
1107 |
+
cross-spawn: 7.0.3
|
1108 |
+
debug: 4.3.4
|
1109 |
+
doctrine: 3.0.0
|
1110 |
+
escape-string-regexp: 4.0.0
|
1111 |
+
eslint-scope: 7.2.2
|
1112 |
+
eslint-visitor-keys: 3.4.3
|
1113 |
+
espree: 9.6.1
|
1114 |
+
esquery: 1.5.0
|
1115 |
+
esutils: 2.0.3
|
1116 |
+
fast-deep-equal: 3.1.3
|
1117 |
+
file-entry-cache: 6.0.1
|
1118 |
+
find-up: 5.0.0
|
1119 |
+
glob-parent: 6.0.2
|
1120 |
+
globals: 13.24.0
|
1121 |
+
graphemer: 1.4.0
|
1122 |
+
ignore: 5.3.0
|
1123 |
+
imurmurhash: 0.1.4
|
1124 |
+
is-glob: 4.0.3
|
1125 |
+
is-path-inside: 3.0.3
|
1126 |
+
js-yaml: 4.1.0
|
1127 |
+
json-stable-stringify-without-jsonify: 1.0.1
|
1128 |
+
levn: 0.4.1
|
1129 |
+
lodash.merge: 4.6.2
|
1130 |
+
minimatch: 3.1.2
|
1131 |
+
natural-compare: 1.4.0
|
1132 |
+
optionator: 0.9.3
|
1133 |
+
strip-ansi: 6.0.1
|
1134 |
+
text-table: 0.2.0
|
1135 |
+
transitivePeerDependencies:
|
1136 |
+
- supports-color
|
1137 |
+
dev: true
|
1138 |
+
|
1139 |
+
/espree@9.6.1:
|
1140 |
+
resolution: {integrity: sha512-oruZaFkjorTpF32kDSI5/75ViwGeZginGGy2NoOSg3Q9bnwlnmDm4HLnkl0RE3n+njDXR037aY1+x58Z/zFdwQ==}
|
1141 |
+
engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0}
|
1142 |
+
dependencies:
|
1143 |
+
acorn: 8.11.2
|
1144 |
+
acorn-jsx: 5.3.2(acorn@8.11.2)
|
1145 |
+
eslint-visitor-keys: 3.4.3
|
1146 |
+
dev: true
|
1147 |
+
|
1148 |
+
/esquery@1.5.0:
|
1149 |
+
resolution: {integrity: sha512-YQLXUplAwJgCydQ78IMJywZCceoqk1oH01OERdSAJc/7U2AylwjhSCLDEtqwg811idIS/9fIU5GjG73IgjKMVg==}
|
1150 |
+
engines: {node: '>=0.10'}
|
1151 |
+
dependencies:
|
1152 |
+
estraverse: 5.3.0
|
1153 |
+
dev: true
|
1154 |
+
|
1155 |
+
/esrecurse@4.3.0:
|
1156 |
+
resolution: {integrity: sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==}
|
1157 |
+
engines: {node: '>=4.0'}
|
1158 |
+
dependencies:
|
1159 |
+
estraverse: 5.3.0
|
1160 |
+
dev: true
|
1161 |
+
|
1162 |
+
/estraverse@5.3.0:
|
1163 |
+
resolution: {integrity: sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==}
|
1164 |
+
engines: {node: '>=4.0'}
|
1165 |
+
dev: true
|
1166 |
+
|
1167 |
+
/estree-walker@2.0.2:
|
1168 |
+
resolution: {integrity: sha512-Rfkk/Mp/DL7JVje3u18FxFujQlTNR2q6QfMSMB7AvCBx91NGj/ba3kCfza0f6dVDbw7YlRf/nDrn7pQrCCyQ/w==}
|
1169 |
+
|
1170 |
+
/esutils@2.0.3:
|
1171 |
+
resolution: {integrity: sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==}
|
1172 |
+
engines: {node: '>=0.10.0'}
|
1173 |
+
dev: true
|
1174 |
+
|
1175 |
+
/fast-deep-equal@3.1.3:
|
1176 |
+
resolution: {integrity: sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==}
|
1177 |
+
dev: true
|
1178 |
+
|
1179 |
+
/fast-glob@3.3.2:
|
1180 |
+
resolution: {integrity: sha512-oX2ruAFQwf/Orj8m737Y5adxDQO0LAB7/S5MnxCdTNDd4p6BsyIVsv9JQsATbTSq8KHRpLwIHbVlUNatxd+1Ow==}
|
1181 |
+
engines: {node: '>=8.6.0'}
|
1182 |
+
dependencies:
|
1183 |
+
'@nodelib/fs.stat': 2.0.5
|
1184 |
+
'@nodelib/fs.walk': 1.2.8
|
1185 |
+
glob-parent: 5.1.2
|
1186 |
+
merge2: 1.4.1
|
1187 |
+
micromatch: 4.0.5
|
1188 |
+
dev: true
|
1189 |
+
|
1190 |
+
/fast-json-stable-stringify@2.1.0:
|
1191 |
+
resolution: {integrity: sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==}
|
1192 |
+
dev: true
|
1193 |
+
|
1194 |
+
/fast-levenshtein@2.0.6:
|
1195 |
+
resolution: {integrity: sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==}
|
1196 |
+
dev: true
|
1197 |
+
|
1198 |
+
/fastq@1.16.0:
|
1199 |
+
resolution: {integrity: sha512-ifCoaXsDrsdkWTtiNJX5uzHDsrck5TzfKKDcuFFTIrrc/BS076qgEIfoIy1VeZqViznfKiysPYTh/QeHtnIsYA==}
|
1200 |
+
dependencies:
|
1201 |
+
reusify: 1.0.4
|
1202 |
+
dev: true
|
1203 |
+
|
1204 |
+
/file-entry-cache@6.0.1:
|
1205 |
+
resolution: {integrity: sha512-7Gps/XWymbLk2QLYK4NzpMOrYjMhdIxXuIvy2QBsLE6ljuodKvdkWs/cpyJJ3CVIVpH0Oi1Hvg1ovbMzLdFBBg==}
|
1206 |
+
engines: {node: ^10.12.0 || >=12.0.0}
|
1207 |
+
dependencies:
|
1208 |
+
flat-cache: 3.2.0
|
1209 |
+
dev: true
|
1210 |
+
|
1211 |
+
/fill-range@7.0.1:
|
1212 |
+
resolution: {integrity: sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==}
|
1213 |
+
engines: {node: '>=8'}
|
1214 |
+
dependencies:
|
1215 |
+
to-regex-range: 5.0.1
|
1216 |
+
dev: true
|
1217 |
+
|
1218 |
+
/find-up@5.0.0:
|
1219 |
+
resolution: {integrity: sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==}
|
1220 |
+
engines: {node: '>=10'}
|
1221 |
+
dependencies:
|
1222 |
+
locate-path: 6.0.0
|
1223 |
+
path-exists: 4.0.0
|
1224 |
+
dev: true
|
1225 |
+
|
1226 |
+
/flat-cache@3.2.0:
|
1227 |
+
resolution: {integrity: sha512-CYcENa+FtcUKLmhhqyctpclsq7QF38pKjZHsGNiSQF5r4FtoKDWabFDl3hzaEQMvT1LHEysw5twgLvpYYb4vbw==}
|
1228 |
+
engines: {node: ^10.12.0 || >=12.0.0}
|
1229 |
+
dependencies:
|
1230 |
+
flatted: 3.2.9
|
1231 |
+
keyv: 4.5.4
|
1232 |
+
rimraf: 3.0.2
|
1233 |
+
dev: true
|
1234 |
+
|
1235 |
+
/flatted@3.2.9:
|
1236 |
+
resolution: {integrity: sha512-36yxDn5H7OFZQla0/jFJmbIKTdZAQHngCedGxiMmpNfEZM0sdEeT+WczLQrjK6D7o2aiyLYDnkw0R3JK0Qv1RQ==}
|
1237 |
+
dev: true
|
1238 |
+
|
1239 |
+
/fraction.js@4.3.7:
|
1240 |
+
resolution: {integrity: sha512-ZsDfxO51wGAXREY55a7la9LScWpwv9RxIrYABrlvOFBlH/ShPnrtsXeuUIfXKKOVicNxQ+o8JTbJvjS4M89yew==}
|
1241 |
+
dev: true
|
1242 |
+
|
1243 |
+
/fs.realpath@1.0.0:
|
1244 |
+
resolution: {integrity: sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==}
|
1245 |
+
dev: true
|
1246 |
+
|
1247 |
+
/fsevents@2.3.3:
|
1248 |
+
resolution: {integrity: sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==}
|
1249 |
+
engines: {node: ^8.16.0 || ^10.6.0 || >=11.0.0}
|
1250 |
+
os: [darwin]
|
1251 |
+
requiresBuild: true
|
1252 |
+
dev: true
|
1253 |
+
optional: true
|
1254 |
+
|
1255 |
+
/function-bind@1.1.2:
|
1256 |
+
resolution: {integrity: sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==}
|
1257 |
+
dev: true
|
1258 |
+
|
1259 |
+
/geojson-rbush@3.2.0:
|
1260 |
+
resolution: {integrity: sha512-oVltQTXolxvsz1sZnutlSuLDEcQAKYC/uXt9zDzJJ6bu0W+baTI8LZBaTup5afzibEH4N3jlq2p+a152wlBJ7w==}
|
1261 |
+
dependencies:
|
1262 |
+
'@turf/bbox': 6.5.0
|
1263 |
+
'@turf/helpers': 6.5.0
|
1264 |
+
'@turf/meta': 6.5.0
|
1265 |
+
'@types/geojson': 7946.0.8
|
1266 |
+
rbush: 3.0.1
|
1267 |
+
dev: false
|
1268 |
+
|
1269 |
+
/glob-parent@5.1.2:
|
1270 |
+
resolution: {integrity: sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==}
|
1271 |
+
engines: {node: '>= 6'}
|
1272 |
+
dependencies:
|
1273 |
+
is-glob: 4.0.3
|
1274 |
+
dev: true
|
1275 |
+
|
1276 |
+
/glob-parent@6.0.2:
|
1277 |
+
resolution: {integrity: sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==}
|
1278 |
+
engines: {node: '>=10.13.0'}
|
1279 |
+
dependencies:
|
1280 |
+
is-glob: 4.0.3
|
1281 |
+
dev: true
|
1282 |
+
|
1283 |
+
/glob@7.1.6:
|
1284 |
+
resolution: {integrity: sha512-LwaxwyZ72Lk7vZINtNNrywX0ZuLyStrdDtabefZKAY5ZGJhVtgdznluResxNmPitE0SAO+O26sWTHeKSI2wMBA==}
|
1285 |
+
dependencies:
|
1286 |
+
fs.realpath: 1.0.0
|
1287 |
+
inflight: 1.0.6
|
1288 |
+
inherits: 2.0.4
|
1289 |
+
minimatch: 3.1.2
|
1290 |
+
once: 1.4.0
|
1291 |
+
path-is-absolute: 1.0.1
|
1292 |
+
dev: true
|
1293 |
+
|
1294 |
+
/glob@7.2.3:
|
1295 |
+
resolution: {integrity: sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==}
|
1296 |
+
dependencies:
|
1297 |
+
fs.realpath: 1.0.0
|
1298 |
+
inflight: 1.0.6
|
1299 |
+
inherits: 2.0.4
|
1300 |
+
minimatch: 3.1.2
|
1301 |
+
once: 1.4.0
|
1302 |
+
path-is-absolute: 1.0.1
|
1303 |
+
dev: true
|
1304 |
+
|
1305 |
+
/globals@13.24.0:
|
1306 |
+
resolution: {integrity: sha512-AhO5QUcj8llrbG09iWhPU2B204J1xnPeL8kQmVorSsy+Sjj1sk8gIyh6cUocGmH4L0UuhAJy+hJMRA4mgA4mFQ==}
|
1307 |
+
engines: {node: '>=8'}
|
1308 |
+
dependencies:
|
1309 |
+
type-fest: 0.20.2
|
1310 |
+
dev: true
|
1311 |
+
|
1312 |
+
/graphemer@1.4.0:
|
1313 |
+
resolution: {integrity: sha512-EtKwoO6kxCL9WO5xipiHTZlSzBm7WLT627TqC/uVRd0HKmq8NXyebnNYxDoBi7wt8eTWrUrKXCOVaFq9x1kgag==}
|
1314 |
+
dev: true
|
1315 |
+
|
1316 |
+
/has-flag@4.0.0:
|
1317 |
+
resolution: {integrity: sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==}
|
1318 |
+
engines: {node: '>=8'}
|
1319 |
+
dev: true
|
1320 |
+
|
1321 |
+
/hasown@2.0.0:
|
1322 |
+
resolution: {integrity: sha512-vUptKVTpIJhcczKBbgnS+RtcuYMB8+oNzPK2/Hp3hanz8JmpATdmmgLgSaadVREkDm+e2giHwY3ZRkyjSIDDFA==}
|
1323 |
+
engines: {node: '>= 0.4'}
|
1324 |
+
dependencies:
|
1325 |
+
function-bind: 1.1.2
|
1326 |
+
dev: true
|
1327 |
+
|
1328 |
+
/ignore@5.3.0:
|
1329 |
+
resolution: {integrity: sha512-g7dmpshy+gD7mh88OC9NwSGTKoc3kyLAZQRU1mt53Aw/vnvfXnbC+F/7F7QoYVKbV+KNvJx8wArewKy1vXMtlg==}
|
1330 |
+
engines: {node: '>= 4'}
|
1331 |
+
dev: true
|
1332 |
+
|
1333 |
+
/import-fresh@3.3.0:
|
1334 |
+
resolution: {integrity: sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw==}
|
1335 |
+
engines: {node: '>=6'}
|
1336 |
+
dependencies:
|
1337 |
+
parent-module: 1.0.1
|
1338 |
+
resolve-from: 4.0.0
|
1339 |
+
dev: true
|
1340 |
+
|
1341 |
+
/imurmurhash@0.1.4:
|
1342 |
+
resolution: {integrity: sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==}
|
1343 |
+
engines: {node: '>=0.8.19'}
|
1344 |
+
dev: true
|
1345 |
+
|
1346 |
+
/inflight@1.0.6:
|
1347 |
+
resolution: {integrity: sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==}
|
1348 |
+
dependencies:
|
1349 |
+
once: 1.4.0
|
1350 |
+
wrappy: 1.0.2
|
1351 |
+
dev: true
|
1352 |
+
|
1353 |
+
/inherits@2.0.4:
|
1354 |
+
resolution: {integrity: sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==}
|
1355 |
+
dev: true
|
1356 |
+
|
1357 |
+
/is-binary-path@2.1.0:
|
1358 |
+
resolution: {integrity: sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==}
|
1359 |
+
engines: {node: '>=8'}
|
1360 |
+
dependencies:
|
1361 |
+
binary-extensions: 2.2.0
|
1362 |
+
dev: true
|
1363 |
+
|
1364 |
+
/is-core-module@2.13.1:
|
1365 |
+
resolution: {integrity: sha512-hHrIjvZsftOsvKSn2TRYl63zvxsgE0K+0mYMoH6gD4omR5IWB2KynivBQczo3+wF1cCkjzvptnI9Q0sPU66ilw==}
|
1366 |
+
dependencies:
|
1367 |
+
hasown: 2.0.0
|
1368 |
+
dev: true
|
1369 |
+
|
1370 |
+
/is-extglob@2.1.1:
|
1371 |
+
resolution: {integrity: sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==}
|
1372 |
+
engines: {node: '>=0.10.0'}
|
1373 |
+
dev: true
|
1374 |
+
|
1375 |
+
/is-glob@4.0.3:
|
1376 |
+
resolution: {integrity: sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==}
|
1377 |
+
engines: {node: '>=0.10.0'}
|
1378 |
+
dependencies:
|
1379 |
+
is-extglob: 2.1.1
|
1380 |
+
dev: true
|
1381 |
+
|
1382 |
+
/is-number@7.0.0:
|
1383 |
+
resolution: {integrity: sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==}
|
1384 |
+
engines: {node: '>=0.12.0'}
|
1385 |
+
dev: true
|
1386 |
+
|
1387 |
+
/is-path-inside@3.0.3:
|
1388 |
+
resolution: {integrity: sha512-Fd4gABb+ycGAmKou8eMftCupSir5lRxqf4aD/vd0cD2qc4HL07OjCeuHMr8Ro4CoMaeCKDB0/ECBOVWjTwUvPQ==}
|
1389 |
+
engines: {node: '>=8'}
|
1390 |
+
dev: true
|
1391 |
+
|
1392 |
+
/isexe@2.0.0:
|
1393 |
+
resolution: {integrity: sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==}
|
1394 |
+
dev: true
|
1395 |
+
|
1396 |
+
/jiti@1.21.0:
|
1397 |
+
resolution: {integrity: sha512-gFqAIbuKyyso/3G2qhiO2OM6shY6EPP/R0+mkDbyspxKazh8BXDC5FiFsUjlczgdNz/vfra0da2y+aHrusLG/Q==}
|
1398 |
+
hasBin: true
|
1399 |
+
dev: true
|
1400 |
+
|
1401 |
+
/js-yaml@4.1.0:
|
1402 |
+
resolution: {integrity: sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==}
|
1403 |
+
hasBin: true
|
1404 |
+
dependencies:
|
1405 |
+
argparse: 2.0.1
|
1406 |
+
dev: true
|
1407 |
+
|
1408 |
+
/json-buffer@3.0.1:
|
1409 |
+
resolution: {integrity: sha512-4bV5BfR2mqfQTJm+V5tPPdf+ZpuhiIvTuAB5g8kcrXOZpTT/QwwVRWBywX1ozr6lEuPdbHxwaJlm9G6mI2sfSQ==}
|
1410 |
+
dev: true
|
1411 |
+
|
1412 |
+
/json-schema-traverse@0.4.1:
|
1413 |
+
resolution: {integrity: sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==}
|
1414 |
+
dev: true
|
1415 |
+
|
1416 |
+
/json-stable-stringify-without-jsonify@1.0.1:
|
1417 |
+
resolution: {integrity: sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw==}
|
1418 |
+
dev: true
|
1419 |
+
|
1420 |
+
/keyv@4.5.4:
|
1421 |
+
resolution: {integrity: sha512-oxVHkHR/EJf2CNXnWxRLW6mg7JyCCUcG0DtEGmL2ctUo1PNTin1PUil+r/+4r5MpVgC/fn1kjsx7mjSujKqIpw==}
|
1422 |
+
dependencies:
|
1423 |
+
json-buffer: 3.0.1
|
1424 |
+
dev: true
|
1425 |
+
|
1426 |
+
/leaflet-providers@2.0.0:
|
1427 |
+
resolution: {integrity: sha512-CWwKEnHd66Qsx0m4o5q5ZOa60s00B91pMxnlr4Y22msubfs7dhbZhdMIz8bvZQkrZqi67ppI1fsZRS6vtrLcOA==}
|
1428 |
+
dev: false
|
1429 |
+
|
1430 |
+
/leaflet@1.9.4:
|
1431 |
+
resolution: {integrity: sha512-nxS1ynzJOmOlHp+iL3FyWqK89GtNL8U8rvlMOsQdTTssxZwCXh8N2NB3GDQOL+YR3XnWyZAxwQixURb+FA74PA==}
|
1432 |
+
dev: false
|
1433 |
+
|
1434 |
+
/levn@0.4.1:
|
1435 |
+
resolution: {integrity: sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==}
|
1436 |
+
engines: {node: '>= 0.8.0'}
|
1437 |
+
dependencies:
|
1438 |
+
prelude-ls: 1.2.1
|
1439 |
+
type-check: 0.4.0
|
1440 |
+
dev: true
|
1441 |
+
|
1442 |
+
/lilconfig@2.1.0:
|
1443 |
+
resolution: {integrity: sha512-utWOt/GHzuUxnLKxB6dk81RoOeoNeHgbrXiuGk4yyF5qlRz+iIVWu56E2fqGHFrXz0QNUhLB/8nKqvRH66JKGQ==}
|
1444 |
+
engines: {node: '>=10'}
|
1445 |
+
dev: true
|
1446 |
+
|
1447 |
+
/lilconfig@3.0.0:
|
1448 |
+
resolution: {integrity: sha512-K2U4W2Ff5ibV7j7ydLr+zLAkIg5JJ4lPn1Ltsdt+Tz/IjQ8buJ55pZAxoP34lqIiwtF9iAvtLv3JGv7CAyAg+g==}
|
1449 |
+
engines: {node: '>=14'}
|
1450 |
+
dev: true
|
1451 |
+
|
1452 |
+
/lines-and-columns@1.2.4:
|
1453 |
+
resolution: {integrity: sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==}
|
1454 |
+
dev: true
|
1455 |
+
|
1456 |
+
/locate-path@6.0.0:
|
1457 |
+
resolution: {integrity: sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==}
|
1458 |
+
engines: {node: '>=10'}
|
1459 |
+
dependencies:
|
1460 |
+
p-locate: 5.0.0
|
1461 |
+
dev: true
|
1462 |
+
|
1463 |
+
/lodash.merge@4.6.2:
|
1464 |
+
resolution: {integrity: sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==}
|
1465 |
+
dev: true
|
1466 |
+
|
1467 |
+
/lodash@4.17.21:
|
1468 |
+
resolution: {integrity: sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==}
|
1469 |
+
|
1470 |
+
/lru-cache@6.0.0:
|
1471 |
+
resolution: {integrity: sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==}
|
1472 |
+
engines: {node: '>=10'}
|
1473 |
+
dependencies:
|
1474 |
+
yallist: 4.0.0
|
1475 |
+
dev: true
|
1476 |
+
|
1477 |
+
/magic-string@0.30.5:
|
1478 |
+
resolution: {integrity: sha512-7xlpfBaQaP/T6Vh8MO/EqXSW5En6INHEvEXQiuff7Gku0PWjU3uf6w/j9o7O+SpB5fOAkrI5HeoNgwjEO0pFsA==}
|
1479 |
+
engines: {node: '>=12'}
|
1480 |
+
dependencies:
|
1481 |
+
'@jridgewell/sourcemap-codec': 1.4.15
|
1482 |
+
|
1483 |
+
/merge2@1.4.1:
|
1484 |
+
resolution: {integrity: sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==}
|
1485 |
+
engines: {node: '>= 8'}
|
1486 |
+
dev: true
|
1487 |
+
|
1488 |
+
/micromatch@4.0.5:
|
1489 |
+
resolution: {integrity: sha512-DMy+ERcEW2q8Z2Po+WNXuw3c5YaUSFjAO5GsJqfEl7UjvtIuFKO6ZrKvcItdy98dwFI2N1tg3zNIdKaQT+aNdA==}
|
1490 |
+
engines: {node: '>=8.6'}
|
1491 |
+
dependencies:
|
1492 |
+
braces: 3.0.2
|
1493 |
+
picomatch: 2.3.1
|
1494 |
+
dev: true
|
1495 |
+
|
1496 |
+
/minimatch@3.1.2:
|
1497 |
+
resolution: {integrity: sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==}
|
1498 |
+
dependencies:
|
1499 |
+
brace-expansion: 1.1.11
|
1500 |
+
dev: true
|
1501 |
+
|
1502 |
+
/ms@2.1.2:
|
1503 |
+
resolution: {integrity: sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==}
|
1504 |
+
dev: true
|
1505 |
+
|
1506 |
+
/mz@2.7.0:
|
1507 |
+
resolution: {integrity: sha512-z81GNO7nnYMEhrGh9LeymoE4+Yr0Wn5McHIZMK5cfQCl+NDX08sCZgUc9/6MHni9IWuFLm1Z3HTCXu2z9fN62Q==}
|
1508 |
+
dependencies:
|
1509 |
+
any-promise: 1.3.0
|
1510 |
+
object-assign: 4.1.1
|
1511 |
+
thenify-all: 1.6.0
|
1512 |
+
dev: true
|
1513 |
+
|
1514 |
+
/nanoid@3.3.7:
|
1515 |
+
resolution: {integrity: sha512-eSRppjcPIatRIMC1U6UngP8XFcz8MQWGQdt1MTBQ7NaAmvXDfvNxbvWV3x2y6CdEUciCSsDHDQZbhYaB8QEo2g==}
|
1516 |
+
engines: {node: ^10 || ^12 || ^13.7 || ^14 || >=15.0.1}
|
1517 |
+
hasBin: true
|
1518 |
+
|
1519 |
+
/natural-compare@1.4.0:
|
1520 |
+
resolution: {integrity: sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==}
|
1521 |
+
dev: true
|
1522 |
+
|
1523 |
+
/node-releases@2.0.14:
|
1524 |
+
resolution: {integrity: sha512-y10wOWt8yZpqXmOgRo77WaHEmhYQYGNA6y421PKsKYWEK8aW+cqAphborZDhqfyKrbZEN92CN1X2KbafY2s7Yw==}
|
1525 |
+
dev: true
|
1526 |
+
|
1527 |
+
/normalize-path@3.0.0:
|
1528 |
+
resolution: {integrity: sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==}
|
1529 |
+
engines: {node: '>=0.10.0'}
|
1530 |
+
dev: true
|
1531 |
+
|
1532 |
+
/normalize-range@0.1.2:
|
1533 |
+
resolution: {integrity: sha512-bdok/XvKII3nUpklnV6P2hxtMNrCboOjAcyBuQnWEhO665FwrSNRxU+AqpsyvO6LgGYPspN+lu5CLtw4jPRKNA==}
|
1534 |
+
engines: {node: '>=0.10.0'}
|
1535 |
+
dev: true
|
1536 |
+
|
1537 |
+
/nth-check@2.1.1:
|
1538 |
+
resolution: {integrity: sha512-lqjrjmaOoAnWfMmBPL+XNnynZh2+swxiX3WUE0s4yEHI6m+AwrK2UZOimIRl3X/4QctVqS8AiZjFqyOGrMXb/w==}
|
1539 |
+
dependencies:
|
1540 |
+
boolbase: 1.0.0
|
1541 |
+
dev: true
|
1542 |
+
|
1543 |
+
/object-assign@4.1.1:
|
1544 |
+
resolution: {integrity: sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==}
|
1545 |
+
engines: {node: '>=0.10.0'}
|
1546 |
+
dev: true
|
1547 |
+
|
1548 |
+
/object-hash@3.0.0:
|
1549 |
+
resolution: {integrity: sha512-RSn9F68PjH9HqtltsSnqYC1XXoWe9Bju5+213R98cNGttag9q9yAOTzdbsqvIa7aNm5WffBZFpWYr2aWrklWAw==}
|
1550 |
+
engines: {node: '>= 6'}
|
1551 |
+
dev: true
|
1552 |
+
|
1553 |
+
/once@1.4.0:
|
1554 |
+
resolution: {integrity: sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==}
|
1555 |
+
dependencies:
|
1556 |
+
wrappy: 1.0.2
|
1557 |
+
dev: true
|
1558 |
+
|
1559 |
+
/optionator@0.9.3:
|
1560 |
+
resolution: {integrity: sha512-JjCoypp+jKn1ttEFExxhetCKeJt9zhAgAve5FXHixTvFDW/5aEktX9bufBKLRRMdU7bNtpLfcGu94B3cdEJgjg==}
|
1561 |
+
engines: {node: '>= 0.8.0'}
|
1562 |
+
dependencies:
|
1563 |
+
'@aashutoshrathi/word-wrap': 1.2.6
|
1564 |
+
deep-is: 0.1.4
|
1565 |
+
fast-levenshtein: 2.0.6
|
1566 |
+
levn: 0.4.1
|
1567 |
+
prelude-ls: 1.2.1
|
1568 |
+
type-check: 0.4.0
|
1569 |
+
dev: true
|
1570 |
+
|
1571 |
+
/p-limit@3.1.0:
|
1572 |
+
resolution: {integrity: sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==}
|
1573 |
+
engines: {node: '>=10'}
|
1574 |
+
dependencies:
|
1575 |
+
yocto-queue: 0.1.0
|
1576 |
+
dev: true
|
1577 |
+
|
1578 |
+
/p-locate@5.0.0:
|
1579 |
+
resolution: {integrity: sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==}
|
1580 |
+
engines: {node: '>=10'}
|
1581 |
+
dependencies:
|
1582 |
+
p-limit: 3.1.0
|
1583 |
+
dev: true
|
1584 |
+
|
1585 |
+
/parent-module@1.0.1:
|
1586 |
+
resolution: {integrity: sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==}
|
1587 |
+
engines: {node: '>=6'}
|
1588 |
+
dependencies:
|
1589 |
+
callsites: 3.1.0
|
1590 |
+
dev: true
|
1591 |
+
|
1592 |
+
/path-exists@4.0.0:
|
1593 |
+
resolution: {integrity: sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==}
|
1594 |
+
engines: {node: '>=8'}
|
1595 |
+
dev: true
|
1596 |
+
|
1597 |
+
/path-is-absolute@1.0.1:
|
1598 |
+
resolution: {integrity: sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==}
|
1599 |
+
engines: {node: '>=0.10.0'}
|
1600 |
+
dev: true
|
1601 |
+
|
1602 |
+
/path-key@3.1.1:
|
1603 |
+
resolution: {integrity: sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==}
|
1604 |
+
engines: {node: '>=8'}
|
1605 |
+
dev: true
|
1606 |
+
|
1607 |
+
/path-parse@1.0.7:
|
1608 |
+
resolution: {integrity: sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==}
|
1609 |
+
dev: true
|
1610 |
+
|
1611 |
+
/picocolors@1.0.0:
|
1612 |
+
resolution: {integrity: sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ==}
|
1613 |
+
|
1614 |
+
/picomatch@2.3.1:
|
1615 |
+
resolution: {integrity: sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==}
|
1616 |
+
engines: {node: '>=8.6'}
|
1617 |
+
dev: true
|
1618 |
+
|
1619 |
+
/pify@2.3.0:
|
1620 |
+
resolution: {integrity: sha512-udgsAY+fTnvv7kI7aaxbqwWNb0AHiB0qBO89PZKPkoTmGOgdbrHDKD+0B2X4uTfJ/FT1R09r9gTsjUjNJotuog==}
|
1621 |
+
engines: {node: '>=0.10.0'}
|
1622 |
+
dev: true
|
1623 |
+
|
1624 |
+
/pirates@4.0.6:
|
1625 |
+
resolution: {integrity: sha512-saLsH7WeYYPiD25LDuLRRY/i+6HaPYr6G1OUlN39otzkSTxKnubR9RTxS3/Kk50s1g2JTgFwWQDQyplC5/SHZg==}
|
1626 |
+
engines: {node: '>= 6'}
|
1627 |
+
dev: true
|
1628 |
+
|
1629 |
+
/polygon-clipping@0.15.3:
|
1630 |
+
resolution: {integrity: sha512-ho0Xx5DLkgxRx/+n4O74XyJ67DcyN3Tu9bGYKsnTukGAW6ssnuak6Mwcyb1wHy9MZc9xsUWqIoiazkZB5weECg==}
|
1631 |
+
dependencies:
|
1632 |
+
splaytree: 3.1.2
|
1633 |
+
dev: false
|
1634 |
+
|
1635 |
+
/postcss-import@15.1.0(postcss@8.4.32):
|
1636 |
+
resolution: {integrity: sha512-hpr+J05B2FVYUAXHeK1YyI267J/dDDhMU6B6civm8hSY1jYJnBXxzKDKDswzJmtLHryrjhnDjqqp/49t8FALew==}
|
1637 |
+
engines: {node: '>=14.0.0'}
|
1638 |
+
peerDependencies:
|
1639 |
+
postcss: ^8.0.0
|
1640 |
+
dependencies:
|
1641 |
+
postcss: 8.4.32
|
1642 |
+
postcss-value-parser: 4.2.0
|
1643 |
+
read-cache: 1.0.0
|
1644 |
+
resolve: 1.22.8
|
1645 |
+
dev: true
|
1646 |
+
|
1647 |
+
/postcss-js@4.0.1(postcss@8.4.32):
|
1648 |
+
resolution: {integrity: sha512-dDLF8pEO191hJMtlHFPRa8xsizHaM82MLfNkUHdUtVEV3tgTp5oj+8qbEqYM57SLfc74KSbw//4SeJma2LRVIw==}
|
1649 |
+
engines: {node: ^12 || ^14 || >= 16}
|
1650 |
+
peerDependencies:
|
1651 |
+
postcss: ^8.4.21
|
1652 |
+
dependencies:
|
1653 |
+
camelcase-css: 2.0.1
|
1654 |
+
postcss: 8.4.32
|
1655 |
+
dev: true
|
1656 |
+
|
1657 |
+
/postcss-load-config@4.0.2(postcss@8.4.32):
|
1658 |
+
resolution: {integrity: sha512-bSVhyJGL00wMVoPUzAVAnbEoWyqRxkjv64tUl427SKnPrENtq6hJwUojroMz2VB+Q1edmi4IfrAPpami5VVgMQ==}
|
1659 |
+
engines: {node: '>= 14'}
|
1660 |
+
peerDependencies:
|
1661 |
+
postcss: '>=8.0.9'
|
1662 |
+
ts-node: '>=9.0.0'
|
1663 |
+
peerDependenciesMeta:
|
1664 |
+
postcss:
|
1665 |
+
optional: true
|
1666 |
+
ts-node:
|
1667 |
+
optional: true
|
1668 |
+
dependencies:
|
1669 |
+
lilconfig: 3.0.0
|
1670 |
+
postcss: 8.4.32
|
1671 |
+
yaml: 2.3.4
|
1672 |
+
dev: true
|
1673 |
+
|
1674 |
+
/postcss-nested@6.0.1(postcss@8.4.32):
|
1675 |
+
resolution: {integrity: sha512-mEp4xPMi5bSWiMbsgoPfcP74lsWLHkQbZc3sY+jWYd65CUwXrUaTp0fmNpa01ZcETKlIgUdFN/MpS2xZtqL9dQ==}
|
1676 |
+
engines: {node: '>=12.0'}
|
1677 |
+
peerDependencies:
|
1678 |
+
postcss: ^8.2.14
|
1679 |
+
dependencies:
|
1680 |
+
postcss: 8.4.32
|
1681 |
+
postcss-selector-parser: 6.0.13
|
1682 |
+
dev: true
|
1683 |
+
|
1684 |
+
/postcss-selector-parser@6.0.13:
|
1685 |
+
resolution: {integrity: sha512-EaV1Gl4mUEV4ddhDnv/xtj7sxwrwxdetHdWUGnT4VJQf+4d05v6lHYZr8N573k5Z0BViss7BDhfWtKS3+sfAqQ==}
|
1686 |
+
engines: {node: '>=4'}
|
1687 |
+
dependencies:
|
1688 |
+
cssesc: 3.0.0
|
1689 |
+
util-deprecate: 1.0.2
|
1690 |
+
dev: true
|
1691 |
+
|
1692 |
+
/postcss-value-parser@4.2.0:
|
1693 |
+
resolution: {integrity: sha512-1NNCs6uurfkVbeXG4S8JFT9t19m45ICnif8zWLd5oPSZ50QnwMfK+H3jv408d4jw/7Bttv5axS5IiHoLaVNHeQ==}
|
1694 |
+
dev: true
|
1695 |
+
|
1696 |
+
/postcss@8.4.32:
|
1697 |
+
resolution: {integrity: sha512-D/kj5JNu6oo2EIy+XL/26JEDTlIbB8hw85G8StOE6L74RQAVVP5rej6wxCNqyMbR4RkPfqvezVbPw81Ngd6Kcw==}
|
1698 |
+
engines: {node: ^10 || ^12 || >=14}
|
1699 |
+
dependencies:
|
1700 |
+
nanoid: 3.3.7
|
1701 |
+
picocolors: 1.0.0
|
1702 |
+
source-map-js: 1.0.2
|
1703 |
+
|
1704 |
+
/prelude-ls@1.2.1:
|
1705 |
+
resolution: {integrity: sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==}
|
1706 |
+
engines: {node: '>= 0.8.0'}
|
1707 |
+
dev: true
|
1708 |
+
|
1709 |
+
/prettier@3.1.1:
|
1710 |
+
resolution: {integrity: sha512-22UbSzg8luF4UuZtzgiUOfcGM8s4tjBv6dJRT7j275NXsy2jb4aJa4NNveul5x4eqlF1wuhuR2RElK71RvmVaw==}
|
1711 |
+
engines: {node: '>=14'}
|
1712 |
+
hasBin: true
|
1713 |
+
dev: true
|
1714 |
+
|
1715 |
+
/punycode@2.3.1:
|
1716 |
+
resolution: {integrity: sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg==}
|
1717 |
+
engines: {node: '>=6'}
|
1718 |
+
dev: true
|
1719 |
+
|
1720 |
+
/queue-microtask@1.2.3:
|
1721 |
+
resolution: {integrity: sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==}
|
1722 |
+
dev: true
|
1723 |
+
|
1724 |
+
/quickselect@2.0.0:
|
1725 |
+
resolution: {integrity: sha512-RKJ22hX8mHe3Y6wH/N3wCM6BWtjaxIyyUIkpHOvfFnxdI4yD4tBXEBKSbriGujF6jnSVkJrffuo6vxACiSSxIw==}
|
1726 |
+
dev: false
|
1727 |
+
|
1728 |
+
/rbush@3.0.1:
|
1729 |
+
resolution: {integrity: sha512-XRaVO0YecOpEuIvbhbpTrZgoiI6xBlz6hnlr6EHhd+0x9ase6EmeN+hdwwUaJvLcsFFQ8iWVF1GAK1yB0BWi0w==}
|
1730 |
+
dependencies:
|
1731 |
+
quickselect: 2.0.0
|
1732 |
+
dev: false
|
1733 |
+
|
1734 |
+
/read-cache@1.0.0:
|
1735 |
+
resolution: {integrity: sha512-Owdv/Ft7IjOgm/i0xvNDZ1LrRANRfew4b2prF3OWMQLxLfu3bS8FVhCsrSCMK4lR56Y9ya+AThoTpDCTxCmpRA==}
|
1736 |
+
dependencies:
|
1737 |
+
pify: 2.3.0
|
1738 |
+
dev: true
|
1739 |
+
|
1740 |
+
/readdirp@3.6.0:
|
1741 |
+
resolution: {integrity: sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==}
|
1742 |
+
engines: {node: '>=8.10.0'}
|
1743 |
+
dependencies:
|
1744 |
+
picomatch: 2.3.1
|
1745 |
+
dev: true
|
1746 |
+
|
1747 |
+
/resolve-from@4.0.0:
|
1748 |
+
resolution: {integrity: sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==}
|
1749 |
+
engines: {node: '>=4'}
|
1750 |
+
dev: true
|
1751 |
+
|
1752 |
+
/resolve@1.22.8:
|
1753 |
+
resolution: {integrity: sha512-oKWePCxqpd6FlLvGV1VU0x7bkPmmCNolxzjMf4NczoDnQcIWrAF+cPtZn5i6n+RfD2d9i0tzpKnG6Yk168yIyw==}
|
1754 |
+
hasBin: true
|
1755 |
+
dependencies:
|
1756 |
+
is-core-module: 2.13.1
|
1757 |
+
path-parse: 1.0.7
|
1758 |
+
supports-preserve-symlinks-flag: 1.0.0
|
1759 |
+
dev: true
|
1760 |
+
|
1761 |
+
/reusify@1.0.4:
|
1762 |
+
resolution: {integrity: sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==}
|
1763 |
+
engines: {iojs: '>=1.0.0', node: '>=0.10.0'}
|
1764 |
+
dev: true
|
1765 |
+
|
1766 |
+
/rimraf@3.0.2:
|
1767 |
+
resolution: {integrity: sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==}
|
1768 |
+
hasBin: true
|
1769 |
+
dependencies:
|
1770 |
+
glob: 7.2.3
|
1771 |
+
dev: true
|
1772 |
+
|
1773 |
+
/rollup@4.9.1:
|
1774 |
+
resolution: {integrity: sha512-pgPO9DWzLoW/vIhlSoDByCzcpX92bKEorbgXuZrqxByte3JFk2xSW2JEeAcyLc9Ru9pqcNNW+Ob7ntsk2oT/Xw==}
|
1775 |
+
engines: {node: '>=18.0.0', npm: '>=8.0.0'}
|
1776 |
+
hasBin: true
|
1777 |
+
optionalDependencies:
|
1778 |
+
'@rollup/rollup-android-arm-eabi': 4.9.1
|
1779 |
+
'@rollup/rollup-android-arm64': 4.9.1
|
1780 |
+
'@rollup/rollup-darwin-arm64': 4.9.1
|
1781 |
+
'@rollup/rollup-darwin-x64': 4.9.1
|
1782 |
+
'@rollup/rollup-linux-arm-gnueabihf': 4.9.1
|
1783 |
+
'@rollup/rollup-linux-arm64-gnu': 4.9.1
|
1784 |
+
'@rollup/rollup-linux-arm64-musl': 4.9.1
|
1785 |
+
'@rollup/rollup-linux-riscv64-gnu': 4.9.1
|
1786 |
+
'@rollup/rollup-linux-x64-gnu': 4.9.1
|
1787 |
+
'@rollup/rollup-linux-x64-musl': 4.9.1
|
1788 |
+
'@rollup/rollup-win32-arm64-msvc': 4.9.1
|
1789 |
+
'@rollup/rollup-win32-ia32-msvc': 4.9.1
|
1790 |
+
'@rollup/rollup-win32-x64-msvc': 4.9.1
|
1791 |
+
fsevents: 2.3.3
|
1792 |
+
dev: true
|
1793 |
+
|
1794 |
+
/run-parallel@1.2.0:
|
1795 |
+
resolution: {integrity: sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==}
|
1796 |
+
dependencies:
|
1797 |
+
queue-microtask: 1.2.3
|
1798 |
+
dev: true
|
1799 |
+
|
1800 |
+
/semver@7.5.4:
|
1801 |
+
resolution: {integrity: sha512-1bCSESV6Pv+i21Hvpxp3Dx+pSD8lIPt8uVjRrxAUt/nbswYc+tK6Y2btiULjd4+fnq15PX+nqQDC7Oft7WkwcA==}
|
1802 |
+
engines: {node: '>=10'}
|
1803 |
+
hasBin: true
|
1804 |
+
dependencies:
|
1805 |
+
lru-cache: 6.0.0
|
1806 |
+
dev: true
|
1807 |
+
|
1808 |
+
/shebang-command@2.0.0:
|
1809 |
+
resolution: {integrity: sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==}
|
1810 |
+
engines: {node: '>=8'}
|
1811 |
+
dependencies:
|
1812 |
+
shebang-regex: 3.0.0
|
1813 |
+
dev: true
|
1814 |
+
|
1815 |
+
/shebang-regex@3.0.0:
|
1816 |
+
resolution: {integrity: sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==}
|
1817 |
+
engines: {node: '>=8'}
|
1818 |
+
dev: true
|
1819 |
+
|
1820 |
+
/source-map-js@1.0.2:
|
1821 |
+
resolution: {integrity: sha512-R0XvVJ9WusLiqTCEiGCmICCMplcCkIwwR11mOSD9CR5u+IXYdiseeEuXCVAjS54zqwkLcPNnmU4OeJ6tUrWhDw==}
|
1822 |
+
engines: {node: '>=0.10.0'}
|
1823 |
+
|
1824 |
+
/splaytree@3.1.2:
|
1825 |
+
resolution: {integrity: sha512-4OM2BJgC5UzrhVnnJA4BkHKGtjXNzzUfpQjCO8I05xYPsfS/VuQDwjCGGMi8rYQilHEV4j8NBqTFbls/PZEE7A==}
|
1826 |
+
dev: false
|
1827 |
+
|
1828 |
+
/strip-ansi@6.0.1:
|
1829 |
+
resolution: {integrity: sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==}
|
1830 |
+
engines: {node: '>=8'}
|
1831 |
+
dependencies:
|
1832 |
+
ansi-regex: 5.0.1
|
1833 |
+
dev: true
|
1834 |
+
|
1835 |
+
/strip-json-comments@3.1.1:
|
1836 |
+
resolution: {integrity: sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==}
|
1837 |
+
engines: {node: '>=8'}
|
1838 |
+
dev: true
|
1839 |
+
|
1840 |
+
/sucrase@3.34.0:
|
1841 |
+
resolution: {integrity: sha512-70/LQEZ07TEcxiU2dz51FKaE6hCTWC6vr7FOk3Gr0U60C3shtAN+H+BFr9XlYe5xqf3RA8nrc+VIwzCfnxuXJw==}
|
1842 |
+
engines: {node: '>=8'}
|
1843 |
+
hasBin: true
|
1844 |
+
dependencies:
|
1845 |
+
'@jridgewell/gen-mapping': 0.3.3
|
1846 |
+
commander: 4.1.1
|
1847 |
+
glob: 7.1.6
|
1848 |
+
lines-and-columns: 1.2.4
|
1849 |
+
mz: 2.7.0
|
1850 |
+
pirates: 4.0.6
|
1851 |
+
ts-interface-checker: 0.1.13
|
1852 |
+
dev: true
|
1853 |
+
|
1854 |
+
/supports-color@7.2.0:
|
1855 |
+
resolution: {integrity: sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==}
|
1856 |
+
engines: {node: '>=8'}
|
1857 |
+
dependencies:
|
1858 |
+
has-flag: 4.0.0
|
1859 |
+
dev: true
|
1860 |
+
|
1861 |
+
/supports-preserve-symlinks-flag@1.0.0:
|
1862 |
+
resolution: {integrity: sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==}
|
1863 |
+
engines: {node: '>= 0.4'}
|
1864 |
+
dev: true
|
1865 |
+
|
1866 |
+
/tailwindcss@3.4.0:
|
1867 |
+
resolution: {integrity: sha512-VigzymniH77knD1dryXbyxR+ePHihHociZbXnLZHUyzf2MMs2ZVqlUrZ3FvpXP8pno9JzmILt1sZPD19M3IxtA==}
|
1868 |
+
engines: {node: '>=14.0.0'}
|
1869 |
+
hasBin: true
|
1870 |
+
dependencies:
|
1871 |
+
'@alloc/quick-lru': 5.2.0
|
1872 |
+
arg: 5.0.2
|
1873 |
+
chokidar: 3.5.3
|
1874 |
+
didyoumean: 1.2.2
|
1875 |
+
dlv: 1.1.3
|
1876 |
+
fast-glob: 3.3.2
|
1877 |
+
glob-parent: 6.0.2
|
1878 |
+
is-glob: 4.0.3
|
1879 |
+
jiti: 1.21.0
|
1880 |
+
lilconfig: 2.1.0
|
1881 |
+
micromatch: 4.0.5
|
1882 |
+
normalize-path: 3.0.0
|
1883 |
+
object-hash: 3.0.0
|
1884 |
+
picocolors: 1.0.0
|
1885 |
+
postcss: 8.4.32
|
1886 |
+
postcss-import: 15.1.0(postcss@8.4.32)
|
1887 |
+
postcss-js: 4.0.1(postcss@8.4.32)
|
1888 |
+
postcss-load-config: 4.0.2(postcss@8.4.32)
|
1889 |
+
postcss-nested: 6.0.1(postcss@8.4.32)
|
1890 |
+
postcss-selector-parser: 6.0.13
|
1891 |
+
resolve: 1.22.8
|
1892 |
+
sucrase: 3.34.0
|
1893 |
+
transitivePeerDependencies:
|
1894 |
+
- ts-node
|
1895 |
+
dev: true
|
1896 |
+
|
1897 |
+
/text-table@0.2.0:
|
1898 |
+
resolution: {integrity: sha512-N+8UisAXDGk8PFXP4HAzVR9nbfmVJ3zYLAWiTIoqC5v5isinhr+r5uaO8+7r3BMfuNIufIsA7RdpVgacC2cSpw==}
|
1899 |
+
dev: true
|
1900 |
+
|
1901 |
+
/thenify-all@1.6.0:
|
1902 |
+
resolution: {integrity: sha512-RNxQH/qI8/t3thXJDwcstUO4zeqo64+Uy/+sNVRBx4Xn2OX+OZ9oP+iJnNFqplFra2ZUVeKCSa2oVWi3T4uVmA==}
|
1903 |
+
engines: {node: '>=0.8'}
|
1904 |
+
dependencies:
|
1905 |
+
thenify: 3.3.1
|
1906 |
+
dev: true
|
1907 |
+
|
1908 |
+
/thenify@3.3.1:
|
1909 |
+
resolution: {integrity: sha512-RVZSIV5IG10Hk3enotrhvz0T9em6cyHBLkH/YAZuKqd8hRkKhSfCGIcP2KUY0EPxndzANBmNllzWPwak+bheSw==}
|
1910 |
+
dependencies:
|
1911 |
+
any-promise: 1.3.0
|
1912 |
+
dev: true
|
1913 |
+
|
1914 |
+
/to-fast-properties@2.0.0:
|
1915 |
+
resolution: {integrity: sha512-/OaKK0xYrs3DmxRYqL/yDc+FxFUVYhDlXMhRmv3z915w2HF1tnN1omB354j8VUGO/hbRzyD6Y3sA7v7GS/ceog==}
|
1916 |
+
engines: {node: '>=4'}
|
1917 |
+
|
1918 |
+
/to-regex-range@5.0.1:
|
1919 |
+
resolution: {integrity: sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==}
|
1920 |
+
engines: {node: '>=8.0'}
|
1921 |
+
dependencies:
|
1922 |
+
is-number: 7.0.0
|
1923 |
+
dev: true
|
1924 |
+
|
1925 |
+
/ts-interface-checker@0.1.13:
|
1926 |
+
resolution: {integrity: sha512-Y/arvbn+rrz3JCKl9C4kVNfTfSm2/mEp5FSz5EsZSANGPSlQrpRI5M4PKF+mJnE52jOO90PnPSc3Ur3bTQw0gA==}
|
1927 |
+
dev: true
|
1928 |
+
|
1929 |
+
/type-check@0.4.0:
|
1930 |
+
resolution: {integrity: sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==}
|
1931 |
+
engines: {node: '>= 0.8.0'}
|
1932 |
+
dependencies:
|
1933 |
+
prelude-ls: 1.2.1
|
1934 |
+
dev: true
|
1935 |
+
|
1936 |
+
/type-fest@0.20.2:
|
1937 |
+
resolution: {integrity: sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==}
|
1938 |
+
engines: {node: '>=10'}
|
1939 |
+
dev: true
|
1940 |
+
|
1941 |
+
/undici-types@5.26.5:
|
1942 |
+
resolution: {integrity: sha512-JlCMO+ehdEIKqlFxk6IfVoAUVmgz7cU7zD/h9XZ0qzeosSHmUJVOzSQvvYSYWXkFXC+IfLKSIffhv0sVZup6pA==}
|
1943 |
+
dev: true
|
1944 |
+
|
1945 |
+
/update-browserslist-db@1.0.13(browserslist@4.22.2):
|
1946 |
+
resolution: {integrity: sha512-xebP81SNcPuNpPP3uzeW1NYXxI3rxyJzF3pD6sH4jE7o/IX+WtSpwnVU+qIsDPyk0d3hmFQ7mjqc6AtV604hbg==}
|
1947 |
+
hasBin: true
|
1948 |
+
peerDependencies:
|
1949 |
+
browserslist: '>= 4.21.0'
|
1950 |
+
dependencies:
|
1951 |
+
browserslist: 4.22.2
|
1952 |
+
escalade: 3.1.1
|
1953 |
+
picocolors: 1.0.0
|
1954 |
+
dev: true
|
1955 |
+
|
1956 |
+
/uri-js@4.4.1:
|
1957 |
+
resolution: {integrity: sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==}
|
1958 |
+
dependencies:
|
1959 |
+
punycode: 2.3.1
|
1960 |
+
dev: true
|
1961 |
+
|
1962 |
+
/util-deprecate@1.0.2:
|
1963 |
+
resolution: {integrity: sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==}
|
1964 |
+
dev: true
|
1965 |
+
|
1966 |
+
/vite@5.0.10(@types/node@20.10.5):
|
1967 |
+
resolution: {integrity: sha512-2P8J7WWgmc355HUMlFrwofacvr98DAjoE52BfdbwQtyLH06XKwaL/FMnmKM2crF0iX4MpmMKoDlNCB1ok7zHCw==}
|
1968 |
+
engines: {node: ^18.0.0 || >=20.0.0}
|
1969 |
+
hasBin: true
|
1970 |
+
peerDependencies:
|
1971 |
+
'@types/node': ^18.0.0 || >=20.0.0
|
1972 |
+
less: '*'
|
1973 |
+
lightningcss: ^1.21.0
|
1974 |
+
sass: '*'
|
1975 |
+
stylus: '*'
|
1976 |
+
sugarss: '*'
|
1977 |
+
terser: ^5.4.0
|
1978 |
+
peerDependenciesMeta:
|
1979 |
+
'@types/node':
|
1980 |
+
optional: true
|
1981 |
+
less:
|
1982 |
+
optional: true
|
1983 |
+
lightningcss:
|
1984 |
+
optional: true
|
1985 |
+
sass:
|
1986 |
+
optional: true
|
1987 |
+
stylus:
|
1988 |
+
optional: true
|
1989 |
+
sugarss:
|
1990 |
+
optional: true
|
1991 |
+
terser:
|
1992 |
+
optional: true
|
1993 |
+
dependencies:
|
1994 |
+
'@types/node': 20.10.5
|
1995 |
+
esbuild: 0.19.10
|
1996 |
+
postcss: 8.4.32
|
1997 |
+
rollup: 4.9.1
|
1998 |
+
optionalDependencies:
|
1999 |
+
fsevents: 2.3.3
|
2000 |
+
dev: true
|
2001 |
+
|
2002 |
+
/vue-eslint-parser@9.3.2(eslint@8.56.0):
|
2003 |
+
resolution: {integrity: sha512-q7tWyCVaV9f8iQyIA5Mkj/S6AoJ9KBN8IeUSf3XEmBrOtxOZnfTg5s4KClbZBCK3GtnT/+RyCLZyDHuZwTuBjg==}
|
2004 |
+
engines: {node: ^14.17.0 || >=16.0.0}
|
2005 |
+
peerDependencies:
|
2006 |
+
eslint: '>=6.0.0'
|
2007 |
+
dependencies:
|
2008 |
+
debug: 4.3.4
|
2009 |
+
eslint: 8.56.0
|
2010 |
+
eslint-scope: 7.2.2
|
2011 |
+
eslint-visitor-keys: 3.4.3
|
2012 |
+
espree: 9.6.1
|
2013 |
+
esquery: 1.5.0
|
2014 |
+
lodash: 4.17.21
|
2015 |
+
semver: 7.5.4
|
2016 |
+
transitivePeerDependencies:
|
2017 |
+
- supports-color
|
2018 |
+
dev: true
|
2019 |
+
|
2020 |
+
/vue@3.3.13:
|
2021 |
+
resolution: {integrity: sha512-LDnUpQvDgsfc0u/YgtAgTMXJlJQqjkxW1PVcOnJA5cshPleULDjHi7U45pl2VJYazSSvLH8UKcid/kzH8I0a0Q==}
|
2022 |
+
peerDependencies:
|
2023 |
+
typescript: '*'
|
2024 |
+
peerDependenciesMeta:
|
2025 |
+
typescript:
|
2026 |
+
optional: true
|
2027 |
+
dependencies:
|
2028 |
+
'@vue/compiler-dom': 3.3.13
|
2029 |
+
'@vue/compiler-sfc': 3.3.13
|
2030 |
+
'@vue/runtime-dom': 3.3.13
|
2031 |
+
'@vue/server-renderer': 3.3.13(vue@3.3.13)
|
2032 |
+
'@vue/shared': 3.3.13
|
2033 |
+
|
2034 |
+
/which@2.0.2:
|
2035 |
+
resolution: {integrity: sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==}
|
2036 |
+
engines: {node: '>= 8'}
|
2037 |
+
hasBin: true
|
2038 |
+
dependencies:
|
2039 |
+
isexe: 2.0.0
|
2040 |
+
dev: true
|
2041 |
+
|
2042 |
+
/wrappy@1.0.2:
|
2043 |
+
resolution: {integrity: sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==}
|
2044 |
+
dev: true
|
2045 |
+
|
2046 |
+
/xml-name-validator@4.0.0:
|
2047 |
+
resolution: {integrity: sha512-ICP2e+jsHvAj2E2lIHxa5tjXRlKDJo4IdvPvCXbXQGdzSfmSpNVyIKMvoZHjDY9DP0zV17iI85o90vRFXNccRw==}
|
2048 |
+
engines: {node: '>=12'}
|
2049 |
+
dev: true
|
2050 |
+
|
2051 |
+
/yallist@4.0.0:
|
2052 |
+
resolution: {integrity: sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==}
|
2053 |
+
dev: true
|
2054 |
+
|
2055 |
+
/yaml@2.3.4:
|
2056 |
+
resolution: {integrity: sha512-8aAvwVUSHpfEqTQ4w/KMlf3HcRdt50E5ODIQJBw1fQ5RL34xabzxtUlzTXVqc4rkZsPbvrXKWnABCD7kWSmocA==}
|
2057 |
+
engines: {node: '>= 14'}
|
2058 |
+
dev: true
|
2059 |
+
|
2060 |
+
/yocto-queue@0.1.0:
|
2061 |
+
resolution: {integrity: sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==}
|
2062 |
+
engines: {node: '>=10'}
|
2063 |
+
dev: true
|
static/postcss.config.js
ADDED
@@ -0,0 +1,7 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
export default {
|
2 |
+
plugins: {
|
3 |
+
'postcss-import': {},
|
4 |
+
tailwindcss: {},
|
5 |
+
autoprefixer: {},
|
6 |
+
},
|
7 |
+
}
|
static/public/api-docs.svg
ADDED
|
static/public/apple-touch-icon.png
ADDED
![]() |
static/public/blog.svg
ADDED
|
static/public/favicon.ico
ADDED
|
static/public/home-page.svg
ADDED
|
static/public/icon-192.png
ADDED
![]() |
static/public/icon-512.png
ADDED
![]() |
static/public/icon.svg
ADDED
|
static/public/loader.svg
ADDED
|
static/public/login.svg
ADDED
|
static/public/logout.svg
ADDED
|
static/public/manifest.webmanifest
ADDED
@@ -0,0 +1,6 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
{
|
2 |
+
"icons": [
|
3 |
+
{ "src": "/icon-192.png", "type": "image/png", "sizes": "192x192" },
|
4 |
+
{ "src": "/icon-512.png", "type": "image/png", "sizes": "512x512" }
|
5 |
+
]
|
6 |
+
}
|
static/public/marker-icon-exclude-2x.png
ADDED
![]() |
static/public/marker-icon-exclude.png
ADDED
![]() |
static/public/marker-icon-include-2x.png
ADDED
![]() |
static/public/marker-icon-include.png
ADDED
![]() |
static/public/marker-shadow.png
ADDED
![]() |
static/public/prediction-map-bw.svg
ADDED
|
static/public/user-profile.svg
ADDED
|
static/src/App.vue
ADDED
@@ -0,0 +1,28 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<template>
|
2 |
+
<PageLayout page-title="Prediction map page">
|
3 |
+
<div>
|
4 |
+
<div id="map-container-md">
|
5 |
+
<PredictionMap
|
6 |
+
:mapName="mapName"
|
7 |
+
:mapBounds='[{
|
8 |
+
"lat": 46.235421781941776,
|
9 |
+
"lng": 9.49699401855469
|
10 |
+
}, {
|
11 |
+
"lat": 46.1351347810282,
|
12 |
+
"lng": 9.32121276855469
|
13 |
+
}]'
|
14 |
+
description="This page displays predictions made with a remote machine learning model living within an AWS Lambda..."
|
15 |
+
/>
|
16 |
+
</div>
|
17 |
+
</div>
|
18 |
+
</PageLayout>
|
19 |
+
</template>
|
20 |
+
|
21 |
+
<script setup lang="ts">
|
22 |
+
import { ref } from 'vue'
|
23 |
+
|
24 |
+
import PredictionMap from '@/components/PagePredictionMap.vue'
|
25 |
+
import PageLayout from '@/components/PageLayout.vue'
|
26 |
+
|
27 |
+
const mapName = ref('prediction-map')
|
28 |
+
</script>
|
static/src/components/PageFooter.vue
ADDED
@@ -0,0 +1,16 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<template>
|
2 |
+
<!-- style 'z-index: 1001' here is needed to avoid override from leafletjs css -->
|
3 |
+
<footer class="fixed bottom-0 w-full bg-gray-200 pl-2 font-light text-xs" style="z-index: 9999;">
|
4 |
+
<p>
|
5 |
+
<span><PageFooterHyperlink path="/">SamGIS</PageFooterHyperlink>: An inference machine learning POC applied to GIS thanks to
|
6 |
+
<PageFooterHyperlink path="https://github.com/vietanhdev/samexporter/">SAM Exporter</PageFooterHyperlink>
|
7 |
+
and inspired by
|
8 |
+
<PageFooterHyperlink path="https://samgeo.gishub.org/">Segment Geospatial</PageFooterHyperlink>
|
9 |
+
</span>
|
10 |
+
</p>
|
11 |
+
</footer>
|
12 |
+
</template>
|
13 |
+
|
14 |
+
<script setup lang="ts">
|
15 |
+
import PageFooterHyperlink from "@/components/PageFooterHyperlink.vue";
|
16 |
+
</script>
|
static/src/components/PageFooterHyperlink.vue
ADDED
@@ -0,0 +1,16 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<template>
|
2 |
+
<a
|
3 |
+
:href="props.path"
|
4 |
+
class="underline"
|
5 |
+
target="_blank"
|
6 |
+
rel="noopener noreferrer"
|
7 |
+
>
|
8 |
+
<slot />
|
9 |
+
</a>
|
10 |
+
</template>
|
11 |
+
|
12 |
+
<script setup lang="ts">
|
13 |
+
const props = defineProps<{
|
14 |
+
path: string
|
15 |
+
}>()
|
16 |
+
</script>
|
static/src/components/PageLayout.vue
ADDED
@@ -0,0 +1,28 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<template>
|
2 |
+
<div class="relative min-h-screen lg:flex">
|
3 |
+
<!-- Sidebar -->
|
4 |
+
|
5 |
+
<main id="content" class="flex-1 z-1 pb-12 ml-[3.3rem] lg:ml-0 mr-4 overflow-y-auto md:pl-1 lg:h-screen">
|
6 |
+
<header class="hidden items-center justify-between h-10 ml-2 landscape:md:flex portrait:sd:flex portrait:md:h-12 bg-gray-200 border-b">
|
7 |
+
<h2 class="hidden sd:text-sm ml-2 md:block md:text-2xl">{{ props.pageTitle }}</h2>
|
8 |
+
</header>
|
9 |
+
|
10 |
+
<div class="">
|
11 |
+
<slot></slot>
|
12 |
+
</div>
|
13 |
+
|
14 |
+
<div class="bottom-0 w-full text-black">
|
15 |
+
<Footer></Footer>
|
16 |
+
</div>
|
17 |
+
</main>
|
18 |
+
</div>
|
19 |
+
|
20 |
+
</template>
|
21 |
+
|
22 |
+
<script setup lang="ts">
|
23 |
+
import Footer from "@/components/PageFooter.vue"
|
24 |
+
|
25 |
+
const props = defineProps<{
|
26 |
+
pageTitle: string
|
27 |
+
}>()
|
28 |
+
</script>
|
static/src/components/PagePredictionMap.vue
ADDED
@@ -0,0 +1,224 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<template>
|
2 |
+
<div class="h-auto">
|
3 |
+
|
4 |
+
<div class="grid grid-cols-1 2xl:grid-cols-5 lg:gap-1 lg:border-r">
|
5 |
+
|
6 |
+
<div class="lg:border-r lg:col-span-3">
|
7 |
+
<div id="id-map-cont" class="ml-2 mt-2 md:ml-4 md:mr-4">
|
8 |
+
<p class="hidden lg:block">{{ description }}</p>
|
9 |
+
<div class="w-full md:pt-1 md:pb-1 lg:hidden portrait:xl:hidden">
|
10 |
+
<ButtonMapSendRequest
|
11 |
+
class="h-8 text-sm font-extralight min-w-[180px] max-w-[180px]"
|
12 |
+
:current-base-map-name="currentBaseMapNameRef"
|
13 |
+
:map="map"
|
14 |
+
:prompts-array="promptsArrayRef"
|
15 |
+
:response-message="responseMessageRef"
|
16 |
+
:send-m-l-request="sendMLRequest"
|
17 |
+
:waiting-string="waitingString"
|
18 |
+
/>
|
19 |
+
</div>
|
20 |
+
<div id="map" class="map-predictions" />
|
21 |
+
<ButtonMapSendRequest
|
22 |
+
class="h-8 min-w-[240px] max-w-[240px] mt-2 mb-2 hidden sd:h-14 lg:block portrait:xl:block"
|
23 |
+
:current-base-map-name="currentBaseMapNameRef"
|
24 |
+
:map="map"
|
25 |
+
:prompts-array="promptsArrayRef"
|
26 |
+
:response-message="responseMessageRef"
|
27 |
+
:send-m-l-request="sendMLRequest"
|
28 |
+
:waiting-string="waitingString"
|
29 |
+
/>
|
30 |
+
|
31 |
+
</div>
|
32 |
+
</div>
|
33 |
+
|
34 |
+
<div class="lg:col-span-2">
|
35 |
+
<div class="lg:pl-2 lg:pr-2 lg:border-l lg:border-3">
|
36 |
+
|
37 |
+
<h1>Map Info</h1>
|
38 |
+
<div class="grid grid-cols-1 md:grid-cols-3">
|
39 |
+
<StatsGrid :stats-array="[
|
40 |
+
{statName: 'current Zoom', statValue: currentZoomRef},
|
41 |
+
{statName: 'current map name/type', statValue: currentBaseMapNameRef},
|
42 |
+
{statName: 'prompt: points/rectangles number', statValue: promptsArrayRef.length},
|
43 |
+
]" />
|
44 |
+
</div>
|
45 |
+
|
46 |
+
<div v-if="responseMessageRef === waitingString" />
|
47 |
+
<h2 v-else-if="responseMessageRef || responseMessageRef == '-'" class="text-lg text-red-600">{{ responseMessageRef }}</h2>
|
48 |
+
<div v-else>
|
49 |
+
<div class="grid grid-cols-1 md:grid-cols-3">
|
50 |
+
<StatsGrid :stats-array="[
|
51 |
+
{statName: 'request duration', statValue: `${durationRef.toFixed(2)}s`},
|
52 |
+
{statName: 'polygons number', statValue: numberOfPolygonsRef},
|
53 |
+
{statName: 'predicted masks number', statValue: numberOfPredictedMasksRef},
|
54 |
+
]" />
|
55 |
+
</div>
|
56 |
+
</div>
|
57 |
+
</div>
|
58 |
+
|
59 |
+
<h1>ML request prompt</h1>
|
60 |
+
<div v-if="promptsArrayRef.filter(el => {return el.type === 'point'}).length > 0">
|
61 |
+
<TableGenericComponent
|
62 |
+
:header="['id', 'data', 'label']"
|
63 |
+
:rows="applyFnToObjectWithinArray(promptsArrayRef.filter(el => {return el.type === 'point'}))"
|
64 |
+
title="Points"
|
65 |
+
row-key="id"
|
66 |
+
/>
|
67 |
+
</div>
|
68 |
+
<br />
|
69 |
+
<div v-if="promptsArrayRef.filter(el => {return el.type === 'rectangle'}).length > 0">
|
70 |
+
<TableGenericComponent
|
71 |
+
:header="['id', 'data_ne', 'data_sw']"
|
72 |
+
:rows="applyFnToObjectWithinArray(promptsArrayRef.filter(el => {return el.type === 'rectangle'}))"
|
73 |
+
title="Rectangles"
|
74 |
+
row-key="id"
|
75 |
+
class="2md:min-h-[100px]"
|
76 |
+
/>
|
77 |
+
</div>
|
78 |
+
</div>
|
79 |
+
|
80 |
+
</div>
|
81 |
+
</div>
|
82 |
+
</template>
|
83 |
+
|
84 |
+
<script lang="ts" setup>
|
85 |
+
import {
|
86 |
+
control as LeafletControl,
|
87 |
+
Evented as LEvented,
|
88 |
+
geoJSON as LeafletGeoJSON,
|
89 |
+
type LatLng,
|
90 |
+
Map as LMap,
|
91 |
+
map as LeafletMap,
|
92 |
+
tileLayer,
|
93 |
+
TileLayer as LTileLayer
|
94 |
+
} from 'leaflet'
|
95 |
+
import 'leaflet-providers'
|
96 |
+
import '@geoman-io/leaflet-geoman-free'
|
97 |
+
import { onMounted, ref, type Ref } from 'vue'
|
98 |
+
|
99 |
+
import {
|
100 |
+
durationRef,
|
101 |
+
numberOfPolygonsRef,
|
102 |
+
numberOfPredictedMasksRef,
|
103 |
+
OpenStreetMap,
|
104 |
+
prefix,
|
105 |
+
responseMessageRef,
|
106 |
+
Satellite,
|
107 |
+
waitingString
|
108 |
+
} from '@/components/constants'
|
109 |
+
import {
|
110 |
+
applyFnToObjectWithinArray,
|
111 |
+
getExtentCurrentViewMapBBox,
|
112 |
+
getGeoJSONRequest,
|
113 |
+
getSelectedPointCoordinate,
|
114 |
+
setGeomanControls,
|
115 |
+
updateMapData
|
116 |
+
} from '@/components/helpers'
|
117 |
+
import type { IBodyLatLngPoints, IPointPrompt, IRectanglePrompt, SourceTileType } from '@/components/types';
|
118 |
+
import StatsGrid from '@/components/StatsGrid.vue';
|
119 |
+
import TableGenericComponent from '@/components/TableGenericComponent.vue';
|
120 |
+
import ButtonMapSendRequest from '@/components/buttons/ButtonMapSendRequest.vue';
|
121 |
+
|
122 |
+
const currentBaseMapNameRef = ref("")
|
123 |
+
const currentMapBBoxRef = ref()
|
124 |
+
const currentZoomRef = ref()
|
125 |
+
const promptsArrayRef: Ref<Array<IPointPrompt | IRectanglePrompt>> = ref([])
|
126 |
+
let map: LMap
|
127 |
+
type ServiceTiles = {
|
128 |
+
[key: SourceTileType]: LTileLayer;
|
129 |
+
};
|
130 |
+
|
131 |
+
const props = defineProps<{
|
132 |
+
mapBounds: Array<LatLng>,
|
133 |
+
mapName: string,
|
134 |
+
description: string
|
135 |
+
}>()
|
136 |
+
|
137 |
+
const getPopupContentPoint = (leafletEvent: LEvented, label: number): HTMLDivElement => {
|
138 |
+
let popupContent: HTMLDivElement = document.createElement('div')
|
139 |
+
let currentPointLayer: LatLng = getSelectedPointCoordinate(leafletEvent)
|
140 |
+
|
141 |
+
popupContent.innerHTML = `<span>lat:${JSON.stringify(currentPointLayer.lat)}<br/>`
|
142 |
+
popupContent.innerHTML += `lng:${JSON.stringify(currentPointLayer.lng)}<br/>`
|
143 |
+
popupContent.innerHTML += `label:${label}, id:${leafletEvent.layer._leaflet_id}</span>`
|
144 |
+
|
145 |
+
const popupDiv: HTMLDivElement = document.createElement('div')
|
146 |
+
popupDiv.className = 'leaflet-popup-content-inner'
|
147 |
+
popupDiv.appendChild(popupContent)
|
148 |
+
|
149 |
+
return popupDiv
|
150 |
+
}
|
151 |
+
|
152 |
+
const sendMLRequest = async (leafletMap: LMap, promptRequest: Array<IPointPrompt | IRectanglePrompt>, sourceType: SourceTileType = OpenStreetMap) => {
|
153 |
+
if (map.pm.globalDragModeEnabled()) {
|
154 |
+
map.pm.disableGlobalDragMode()
|
155 |
+
}
|
156 |
+
if (map.pm.globalEditModeEnabled()) {
|
157 |
+
map.pm.disableGlobalEditMode()
|
158 |
+
}
|
159 |
+
const bodyRequest: IBodyLatLngPoints = {
|
160 |
+
bbox: getExtentCurrentViewMapBBox(leafletMap),
|
161 |
+
prompt: promptRequest,
|
162 |
+
zoom: leafletMap.getZoom(),
|
163 |
+
source_type: sourceType
|
164 |
+
}
|
165 |
+
try {
|
166 |
+
const geojsonOutputOnMounted = await getGeoJSONRequest(bodyRequest, '/infer_samgis')
|
167 |
+
const featureNew = LeafletGeoJSON(geojsonOutputOnMounted)
|
168 |
+
leafletMap.addLayer(featureNew)
|
169 |
+
} catch (errGeojsonOutputOnMounted) {
|
170 |
+
console.error('sendMLRequest:: sourceType: ', sourceType)
|
171 |
+
console.error('sendMLRequest:: promptRequest: ', promptRequest.length, '::', promptRequest)
|
172 |
+
console.error('sendMLRequest:: bodyRequest => ', bodyRequest, "#")
|
173 |
+
console.error("errGeojsonOutputOnMounted => ", errGeojsonOutputOnMounted)
|
174 |
+
}
|
175 |
+
}
|
176 |
+
|
177 |
+
const updateZoomBboxMap = (localMap: LMap) => {
|
178 |
+
currentZoomRef.value = localMap.getZoom()
|
179 |
+
currentMapBBoxRef.value = getExtentCurrentViewMapBBox(localMap)
|
180 |
+
}
|
181 |
+
|
182 |
+
const getCurrentBasemap = (url: string, providersArray: ServiceTiles) => {
|
183 |
+
for (const [key, value] of Object.entries(providersArray)) {
|
184 |
+
if (value._url == url) {
|
185 |
+
return key
|
186 |
+
}
|
187 |
+
}
|
188 |
+
}
|
189 |
+
|
190 |
+
onMounted(async () => {
|
191 |
+
const osmTile = tileLayer.provider(OpenStreetMap)
|
192 |
+
let localVarSatellite: SourceTileType = import.meta.env.VITE_SATELLITE_NAME ? String(import.meta.env.VITE_SATELLITE_NAME) : Satellite
|
193 |
+
const satelliteTile = tileLayer.provider(localVarSatellite)
|
194 |
+
|
195 |
+
let baseMaps: ServiceTiles = { OpenStreetMap: osmTile }
|
196 |
+
baseMaps[localVarSatellite] = satelliteTile
|
197 |
+
currentBaseMapNameRef.value = OpenStreetMap
|
198 |
+
|
199 |
+
map = LeafletMap('map', {
|
200 |
+
layers: [osmTile]
|
201 |
+
})
|
202 |
+
map.fitBounds(props.mapBounds)
|
203 |
+
map.attributionControl.setPrefix(prefix)
|
204 |
+
LeafletControl.scale({ position: 'bottomleft', imperial: false, metric: true }).addTo(map)
|
205 |
+
|
206 |
+
LeafletControl.layers(baseMaps).addTo(map)
|
207 |
+
setGeomanControls(map)
|
208 |
+
updateZoomBboxMap(map)
|
209 |
+
|
210 |
+
map.on('zoomend', (e: LEvented) => {
|
211 |
+
updateZoomBboxMap(map)
|
212 |
+
})
|
213 |
+
|
214 |
+
map.on('mouseup', (e: LEvented) => {
|
215 |
+
currentMapBBoxRef.value = getExtentCurrentViewMapBBox(map)
|
216 |
+
})
|
217 |
+
|
218 |
+
updateMapData(map, getPopupContentPoint, promptsArrayRef)
|
219 |
+
map.on('baselayerchange', (e: LEvented) => {
|
220 |
+
currentBaseMapNameRef.value = getCurrentBasemap(e.layer._url, baseMaps)
|
221 |
+
})
|
222 |
+
})
|
223 |
+
</script>
|
224 |
+
|
static/src/components/StatsGrid.vue
ADDED
@@ -0,0 +1,17 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<template>
|
2 |
+
<dl class="grid md:pt-1 md:pb-1" v-for="item in props.statsArray" v-bind:key="item.statName">
|
3 |
+
<div class="flex flex-col bg-blue-100 text-center p-1 md:p-2">
|
4 |
+
<dt class="order-last font-medium">{{ item.statName }}</dt>
|
5 |
+
<dd class="text-lg font-extrabold text-blue-600">{{ item.statValue }}</dd>
|
6 |
+
</div>
|
7 |
+
</dl>
|
8 |
+
</template>
|
9 |
+
|
10 |
+
<script setup lang="ts">
|
11 |
+
const props = defineProps<{
|
12 |
+
statsArray: Array<{
|
13 |
+
statName: string,
|
14 |
+
statValue: string
|
15 |
+
}>
|
16 |
+
}>()
|
17 |
+
</script>
|
static/src/components/TableGenericComponent.vue
ADDED
@@ -0,0 +1,30 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<template>
|
2 |
+
<table class="min-w-full divide-y-2 divide-gray-200 border border-gray-200 bg-white text-left p-4">
|
3 |
+
<caption class="text-2xl bg-blue-100">{{ props.title }}</caption>
|
4 |
+
<thead class="text-left">
|
5 |
+
<tr class="text-left">
|
6 |
+
<th
|
7 |
+
class="whitespace-nowrap px-1 py-1 text-gray-900 text-left 2md:font-medium 2md:py-2 2md:px-4"
|
8 |
+
v-for="item in props.header"
|
9 |
+
:key="item"
|
10 |
+
>{{ item }}</th>
|
11 |
+
</tr>
|
12 |
+
</thead>
|
13 |
+
|
14 |
+
<tbody class="divide-y divide-gray-200" v-for="row in props.rows" :key="props.rows[props.rowKey]">
|
15 |
+
<tr class="odd:bg-gray-50">
|
16 |
+
<td v-for="item in row" class="whitespace-nowrap px-1 py-1 text-gray-900 2md:font-medium 2md:py-2 2md:px-4">{{ item }}</td>
|
17 |
+
</tr>
|
18 |
+
</tbody>
|
19 |
+
</table>
|
20 |
+
</template>
|
21 |
+
|
22 |
+
<script setup lang="ts">
|
23 |
+
const props = defineProps<{
|
24 |
+
header: Array<string>,
|
25 |
+
rows: Array<Map<string, string>>,
|
26 |
+
title: string,
|
27 |
+
rowKey: string
|
28 |
+
}>()
|
29 |
+
</script>
|
30 |
+
|
static/src/components/buttons/ButtonComponent.vue
ADDED
@@ -0,0 +1,11 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<template>
|
2 |
+
<button class="inline-flex items-center p-2" @click="props.click">
|
3 |
+
<slot></slot>
|
4 |
+
</button>
|
5 |
+
</template>
|
6 |
+
|
7 |
+
<script setup lang="ts">
|
8 |
+
const props = defineProps<{
|
9 |
+
click: Function
|
10 |
+
}>()
|
11 |
+
</script>
|
static/src/components/buttons/ButtonMapSendRequest.vue
ADDED
@@ -0,0 +1,31 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<template>
|
2 |
+
<button
|
3 |
+
:class="`${props.class} bg-gray-200 bg-opacity-50`"
|
4 |
+
:disabled="promptsArray.length == 0 || responseMessage === waitingString"
|
5 |
+
v-if="promptsArray.length == 0 || responseMessage === waitingString"
|
6 |
+
>{{ responseMessage === waitingString ? responseMessage : '🚫 Empty prompt (disabled)' }}
|
7 |
+
</button>
|
8 |
+
<button
|
9 |
+
:class="`${props.class} bg-blue-300 whitespace-no-wrap overflow-hidden truncate`"
|
10 |
+
@click="sendMLRequest(map, promptsArray, currentBaseMapName)"
|
11 |
+
v-else
|
12 |
+
>
|
13 |
+
<span v-if="responseMessage && responseMessage != '-'">{{ responseMessage }}</span>
|
14 |
+
<span v-else>🔍 send ML request</span>
|
15 |
+
</button>
|
16 |
+
</template>
|
17 |
+
|
18 |
+
<script setup lang="ts">
|
19 |
+
import {Map as LMap} from 'leaflet';
|
20 |
+
import type { IPointPrompt, IRectanglePrompt } from '@/components/types'
|
21 |
+
|
22 |
+
const props = defineProps<{
|
23 |
+
class: string,
|
24 |
+
currentBaseMapName: string,
|
25 |
+
promptsArray: Array<IPointPrompt | IRectanglePrompt>,
|
26 |
+
responseMessage: string,
|
27 |
+
map: LMap,
|
28 |
+
sendMLRequest: Function,
|
29 |
+
waitingString: string
|
30 |
+
}>()
|
31 |
+
</script>
|
static/src/components/constants.ts
ADDED
@@ -0,0 +1,236 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
import { ref } from "vue"
|
2 |
+
|
3 |
+
export const prefix = " © <a target=\"_blank\" href=\"https://leafletjs.com\">leaflet</a>"
|
4 |
+
export const OpenStreetMap = "OpenStreetMap"
|
5 |
+
export const Satellite = "OpenStreetMap.HOT"
|
6 |
+
export const maxZoom = 20
|
7 |
+
export const minZoom = 3
|
8 |
+
export const waitingString = "waiting..."
|
9 |
+
export const durationRef = ref(0)
|
10 |
+
export const numberOfPolygonsRef = ref(0)
|
11 |
+
export const numberOfPredictedMasksRef = ref(0)
|
12 |
+
export const responseMessageRef = ref("-")
|
13 |
+
export const geojsonRef = ref("geojsonOutput-placeholder")
|
14 |
+
// modified from https://github.com/for-GET/know-your-http-well/blob/master/json/status-codes.json
|
15 |
+
export const htmlStatusMessages = [
|
16 |
+
{
|
17 |
+
code: 100,
|
18 |
+
phrase: 'Continue'
|
19 |
+
},
|
20 |
+
{
|
21 |
+
code: 101,
|
22 |
+
phrase: 'Switching Protocols'
|
23 |
+
},
|
24 |
+
{
|
25 |
+
code: 200,
|
26 |
+
phrase: 'OK'
|
27 |
+
},
|
28 |
+
{
|
29 |
+
code: 201,
|
30 |
+
phrase: 'Created'
|
31 |
+
},
|
32 |
+
{
|
33 |
+
code: 202,
|
34 |
+
phrase: 'Accepted'
|
35 |
+
},
|
36 |
+
{
|
37 |
+
code: 203,
|
38 |
+
phrase: 'Non-Authoritative Information'
|
39 |
+
},
|
40 |
+
{
|
41 |
+
code: 204,
|
42 |
+
phrase: 'No Content'
|
43 |
+
},
|
44 |
+
{
|
45 |
+
code: 205,
|
46 |
+
phrase: 'Reset Content'
|
47 |
+
},
|
48 |
+
{
|
49 |
+
code: 206,
|
50 |
+
phrase: 'Partial Content'
|
51 |
+
},
|
52 |
+
{
|
53 |
+
code: 300,
|
54 |
+
phrase: 'Multiple Choices'
|
55 |
+
},
|
56 |
+
{
|
57 |
+
code: 302,
|
58 |
+
phrase: 'Found'
|
59 |
+
},
|
60 |
+
{
|
61 |
+
code: 303,
|
62 |
+
phrase: 'See Other'
|
63 |
+
},
|
64 |
+
{
|
65 |
+
code: 304,
|
66 |
+
phrase: 'Not Modified'
|
67 |
+
},
|
68 |
+
{
|
69 |
+
code: 305,
|
70 |
+
phrase: 'Use Proxy'
|
71 |
+
},
|
72 |
+
{
|
73 |
+
code: 307,
|
74 |
+
phrase: 'Temporary Redirect'
|
75 |
+
},
|
76 |
+
{
|
77 |
+
code: 400,
|
78 |
+
phrase: 'Bad Request'
|
79 |
+
},
|
80 |
+
{
|
81 |
+
code: 401,
|
82 |
+
phrase: 'Unauthorized'
|
83 |
+
},
|
84 |
+
{
|
85 |
+
code: 402,
|
86 |
+
phrase: 'Payment Required'
|
87 |
+
},
|
88 |
+
{
|
89 |
+
code: 403,
|
90 |
+
phrase: 'Forbidden'
|
91 |
+
},
|
92 |
+
{
|
93 |
+
code: 404,
|
94 |
+
phrase: 'Not Found'
|
95 |
+
},
|
96 |
+
{
|
97 |
+
code: 405,
|
98 |
+
phrase: 'Method Not Allowed'
|
99 |
+
},
|
100 |
+
{
|
101 |
+
code: 406,
|
102 |
+
phrase: 'Not Acceptable'
|
103 |
+
},
|
104 |
+
{
|
105 |
+
code: 407,
|
106 |
+
phrase: 'Proxy Authentication Required'
|
107 |
+
},
|
108 |
+
{
|
109 |
+
code: 408,
|
110 |
+
phrase: 'Request Timeout'
|
111 |
+
},
|
112 |
+
{
|
113 |
+
code: 409,
|
114 |
+
phrase: 'Conflict'
|
115 |
+
},
|
116 |
+
{
|
117 |
+
code: 410,
|
118 |
+
phrase: 'Gone'
|
119 |
+
},
|
120 |
+
{
|
121 |
+
code: 411,
|
122 |
+
phrase: 'Length Required'
|
123 |
+
},
|
124 |
+
{
|
125 |
+
code: 412,
|
126 |
+
phrase: 'Precondition Failed'
|
127 |
+
},
|
128 |
+
{
|
129 |
+
code: 413,
|
130 |
+
phrase: 'Payload Too Large'
|
131 |
+
},
|
132 |
+
{
|
133 |
+
code: 414,
|
134 |
+
phrase: 'URI Too Long'
|
135 |
+
},
|
136 |
+
{
|
137 |
+
code: 415,
|
138 |
+
phrase: 'Unsupported Media Type'
|
139 |
+
},
|
140 |
+
{
|
141 |
+
code: 416,
|
142 |
+
phrase: 'Range Not Satisfiable'
|
143 |
+
},
|
144 |
+
{
|
145 |
+
code: 417,
|
146 |
+
phrase: 'Expectation Failed'
|
147 |
+
},
|
148 |
+
{
|
149 |
+
code: 418,
|
150 |
+
phrase: "I'm a teapot"
|
151 |
+
},
|
152 |
+
{
|
153 |
+
code: 426,
|
154 |
+
phrase: 'Upgrade Required'
|
155 |
+
},
|
156 |
+
{
|
157 |
+
code: 500,
|
158 |
+
phrase: 'Internal Server Error'
|
159 |
+
},
|
160 |
+
{
|
161 |
+
code: 501,
|
162 |
+
phrase: 'Not Implemented'
|
163 |
+
},
|
164 |
+
{
|
165 |
+
code: 502,
|
166 |
+
phrase: 'Bad Gateway'
|
167 |
+
},
|
168 |
+
{
|
169 |
+
code: 503,
|
170 |
+
phrase: 'Service Unavailable'
|
171 |
+
},
|
172 |
+
{
|
173 |
+
code: 504,
|
174 |
+
phrase: 'Gateway Time-out'
|
175 |
+
},
|
176 |
+
{
|
177 |
+
code: 505,
|
178 |
+
phrase: 'HTTP Version Not Supported'
|
179 |
+
},
|
180 |
+
{
|
181 |
+
code: 102,
|
182 |
+
phrase: 'Processing'
|
183 |
+
},
|
184 |
+
{
|
185 |
+
code: 207,
|
186 |
+
phrase: 'Multi-Status'
|
187 |
+
},
|
188 |
+
{
|
189 |
+
code: 226,
|
190 |
+
phrase: 'IM Used'
|
191 |
+
},
|
192 |
+
{
|
193 |
+
code: 308,
|
194 |
+
phrase: 'Permanent Redirect'
|
195 |
+
},
|
196 |
+
{
|
197 |
+
code: 422,
|
198 |
+
phrase: 'Unprocessable Entity'
|
199 |
+
},
|
200 |
+
{
|
201 |
+
code: 423,
|
202 |
+
phrase: 'Locked'
|
203 |
+
},
|
204 |
+
{
|
205 |
+
code: 424,
|
206 |
+
phrase: 'Failed Dependency'
|
207 |
+
},
|
208 |
+
{
|
209 |
+
code: 428,
|
210 |
+
phrase: 'Precondition Required'
|
211 |
+
},
|
212 |
+
{
|
213 |
+
code: 429,
|
214 |
+
phrase: 'Too Many Requests'
|
215 |
+
},
|
216 |
+
{
|
217 |
+
code: 431,
|
218 |
+
phrase: 'Request Header Fields Too Large'
|
219 |
+
},
|
220 |
+
{
|
221 |
+
code: 451,
|
222 |
+
phrase: 'Unavailable For Legal Reasons'
|
223 |
+
},
|
224 |
+
{
|
225 |
+
code: 506,
|
226 |
+
phrase: 'Variant Also Negotiates'
|
227 |
+
},
|
228 |
+
{
|
229 |
+
code: 507,
|
230 |
+
phrase: 'Insufficient Storage'
|
231 |
+
},
|
232 |
+
{
|
233 |
+
code: 511,
|
234 |
+
phrase: 'Network Authentication Required'
|
235 |
+
}
|
236 |
+
]
|
static/src/components/helpers.ts
ADDED
@@ -0,0 +1,253 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
import L, { icon, Evented as LEvented, type LatLng, Map as LMap } from 'leaflet'
|
2 |
+
import {
|
3 |
+
responseMessageRef,
|
4 |
+
waitingString,
|
5 |
+
durationRef,
|
6 |
+
numberOfPolygonsRef,
|
7 |
+
numberOfPredictedMasksRef
|
8 |
+
} from './constants'
|
9 |
+
import {
|
10 |
+
ExcludeIncludeLabelPrompt as excludeIncludeLabelPrompt,
|
11 |
+
type ArrayNumber,
|
12 |
+
type BboxLatLng,
|
13 |
+
type ExcludeIncludeLabelPrompt,
|
14 |
+
type IBodyLatLngPoints,
|
15 |
+
type IPointPrompt,
|
16 |
+
type IRectanglePrompt, type IRectangleTable, type IPointTable
|
17 |
+
} from './types.d'
|
18 |
+
import type { Ref } from 'vue'
|
19 |
+
|
20 |
+
|
21 |
+
export const applyFnToObjectWithinArray = (array: Array<IPointPrompt | IRectanglePrompt>): Array<IPointTable | IRectangleTable> => {
|
22 |
+
let newArray = []
|
23 |
+
for (const el of array) {
|
24 |
+
newArray.push(el.type === 'rectangle' ? getUpdatedRectangle(el) : getUpdatedPoint(el))
|
25 |
+
}
|
26 |
+
return newArray
|
27 |
+
}
|
28 |
+
|
29 |
+
const getUpdatedPoint = (obj: IPointPrompt): IPointTable => {
|
30 |
+
return {
|
31 |
+
id: obj.id,
|
32 |
+
data: obj.data,
|
33 |
+
label: obj.label
|
34 |
+
}
|
35 |
+
}
|
36 |
+
|
37 |
+
const getUpdatedRectangle = (obj: IRectanglePrompt): IRectangleTable => {
|
38 |
+
return {
|
39 |
+
id: obj.id,
|
40 |
+
data_ne: obj.data.ne,
|
41 |
+
data_sw: obj.data.sw,
|
42 |
+
}
|
43 |
+
}
|
44 |
+
|
45 |
+
/** get a custom icon given a PNG path with its anchor/size values */
|
46 |
+
const getCustomIconMarker = (
|
47 |
+
iconUrlNoExt: string,
|
48 |
+
shadowUrl = '/marker-shadow.png',
|
49 |
+
iconSize: ArrayNumber = [25, 41],
|
50 |
+
iconAnchor: ArrayNumber = [12, 41],
|
51 |
+
popupAnchor: ArrayNumber = [1, -34],
|
52 |
+
tooltipAnchor: ArrayNumber = [5, -25],
|
53 |
+
shadowSize: ArrayNumber = [41, 41]
|
54 |
+
): icon => {
|
55 |
+
return icon({
|
56 |
+
iconUrl: `${iconUrlNoExt}.png`,
|
57 |
+
iconRetinaUrl: `${iconUrlNoExt}-2x.png`,
|
58 |
+
shadowUrl,
|
59 |
+
iconSize,
|
60 |
+
iconAnchor,
|
61 |
+
popupAnchor,
|
62 |
+
shadowSize,
|
63 |
+
tooltipAnchor
|
64 |
+
})
|
65 |
+
}
|
66 |
+
|
67 |
+
/** get an the leaflet editor geoman.io toolbar with the custom actions to draw/edit/move point and rectangle layers */
|
68 |
+
const getCustomGeomanActionsObject = (actionName: string, descriptionAction: string, arrayActions: Array<object>) => {
|
69 |
+
return {
|
70 |
+
name: actionName,
|
71 |
+
block: 'custom',
|
72 |
+
title: descriptionAction,
|
73 |
+
actions: arrayActions
|
74 |
+
}
|
75 |
+
}
|
76 |
+
|
77 |
+
/** prepare the leaflet editor geoman.io toolbar with the custom actions to draw/edit/move point and rectangle layers */
|
78 |
+
export function setGeomanControls(localMap: LMap) {
|
79 |
+
// leaflet geoman toolbar
|
80 |
+
localMap.pm.addControls({
|
81 |
+
position: 'topleft',
|
82 |
+
drawControls: false,
|
83 |
+
rotateMode: false,
|
84 |
+
cutPolygon: false,
|
85 |
+
customControls: true
|
86 |
+
})
|
87 |
+
|
88 |
+
const actionArray = [{
|
89 |
+
onClick(actionEvent: LEvented) {
|
90 |
+
console.log('actionEvent:', typeof actionEvent, '|', actionEvent, '')
|
91 |
+
},
|
92 |
+
name: 'actionName'
|
93 |
+
}]
|
94 |
+
const includeMarkerControl = localMap.pm.Toolbar.copyDrawControl('Marker',
|
95 |
+
getCustomGeomanActionsObject('IncludeMarkerPrompt', 'Marker that add recognition regions from SAM prompt requests', actionArray)
|
96 |
+
)
|
97 |
+
includeMarkerControl.drawInstance.setOptions({
|
98 |
+
markerStyle: { icon: getCustomIconMarker('/marker-icon-include') }
|
99 |
+
})
|
100 |
+
const excludeMarkerControl = localMap.pm.Toolbar.copyDrawControl('Marker',
|
101 |
+
getCustomGeomanActionsObject('ExcludeMarkerPrompt', 'Marker that remove recognition regions from SAM prompt requests', actionArray)
|
102 |
+
)
|
103 |
+
excludeMarkerControl.drawInstance.setOptions({
|
104 |
+
markerStyle: { icon: getCustomIconMarker('/marker-icon-exclude') }
|
105 |
+
})
|
106 |
+
localMap.pm.Toolbar.copyDrawControl('Rectangle', {
|
107 |
+
name: 'RectanglePrompt',
|
108 |
+
block: 'custom',
|
109 |
+
title: 'Rectangular recognition regions for SAM prompt requests',
|
110 |
+
actions: actionArray
|
111 |
+
})
|
112 |
+
localMap.pm.setPathOptions({
|
113 |
+
color: "green",
|
114 |
+
fillColor: "green",
|
115 |
+
fillOpacity: 0.15,
|
116 |
+
})
|
117 |
+
}
|
118 |
+
|
119 |
+
/** get the selected rectangle layer bounding box coordinate */
|
120 |
+
export const getSelectedRectangleCoordinatesBBox = (leafletEvent: LEvented): BboxLatLng => {
|
121 |
+
const { _northEast, _southWest } = leafletEvent.layer._bounds
|
122 |
+
return {
|
123 |
+
ne: new L.LatLng(_northEast.lat, _northEast.lng),
|
124 |
+
sw: new L.LatLng(_southWest.lat, _southWest.lng)
|
125 |
+
}
|
126 |
+
}
|
127 |
+
|
128 |
+
/** get the current selected point coordinate */
|
129 |
+
export const getSelectedPointCoordinate = (leafletEvent: LEvented): LatLng => {
|
130 |
+
return leafletEvent.layer._latlng
|
131 |
+
}
|
132 |
+
|
133 |
+
/** get the current map bounding box coordinates */
|
134 |
+
export const getExtentCurrentViewMapBBox = (leafletMap: LMap): BboxLatLng => {
|
135 |
+
const boundaries = leafletMap.getBounds()
|
136 |
+
return { ne: boundaries.getNorthEast(), sw: boundaries.getSouthWest() }
|
137 |
+
}
|
138 |
+
|
139 |
+
/** send the ML request to the backend API through the cloudflare proxy function */
|
140 |
+
export const getGeoJSONRequest = async (
|
141 |
+
requestBody: IBodyLatLngPoints,
|
142 |
+
urlApi: string
|
143 |
+
) => {
|
144 |
+
responseMessageRef.value = waitingString
|
145 |
+
const data = await fetch(urlApi, {
|
146 |
+
method: 'POST',
|
147 |
+
body: JSON.stringify(requestBody),
|
148 |
+
headers: {
|
149 |
+
'Content-type': 'application/json'
|
150 |
+
}
|
151 |
+
})
|
152 |
+
try {
|
153 |
+
if (data.status === 200) {
|
154 |
+
const output: Object = await data.json()
|
155 |
+
try {
|
156 |
+
const parsed = JSON.parse(output.body)
|
157 |
+
const { geojson, n_predictions, n_shapes_geojson } = parsed.output
|
158 |
+
|
159 |
+
const parsedGeojson = JSON.parse(geojson)
|
160 |
+
durationRef.value = parsed.duration_run
|
161 |
+
numberOfPolygonsRef.value = n_shapes_geojson
|
162 |
+
numberOfPredictedMasksRef.value = n_predictions
|
163 |
+
responseMessageRef.value = ''
|
164 |
+
return parsedGeojson
|
165 |
+
} catch (errParseOutput1) {
|
166 |
+
console.error("errParseOutput1::", errParseOutput1)
|
167 |
+
return String(errParseOutput1)
|
168 |
+
}
|
169 |
+
} else {
|
170 |
+
const outputText = await data.text()
|
171 |
+
console.error('getGeoJSONRequest => status not 200, outputText', outputText, '#')
|
172 |
+
responseMessageRef.value = `error message response: ${outputText}...`
|
173 |
+
}
|
174 |
+
} catch (errorOtherData) {
|
175 |
+
const statusText = data.statusText || 'no response or uncaught exception!'
|
176 |
+
console.error(
|
177 |
+
'getGeoJSONRequest => data',
|
178 |
+
data,
|
179 |
+
'statusText',
|
180 |
+
statusText,
|
181 |
+
'errorOtherData',
|
182 |
+
errorOtherData,
|
183 |
+
'#'
|
184 |
+
)
|
185 |
+
responseMessageRef.value = `error status response: ${statusText}...`
|
186 |
+
}
|
187 |
+
}
|
188 |
+
|
189 |
+
/** populate a single point ML request prompt, by type (exclude or include), see type ExcludeIncludeLabelPrompt */
|
190 |
+
export const getPointPromptElement = (e: LEvented, elementType: ExcludeIncludeLabelPrompt): IPointPrompt|IRectanglePrompt => {
|
191 |
+
const currentPointLayer: LatLng = getSelectedPointCoordinate(e)
|
192 |
+
return {
|
193 |
+
id: e.layer._leaflet_id,
|
194 |
+
type: 'point',
|
195 |
+
data: currentPointLayer,
|
196 |
+
label: elementType
|
197 |
+
}
|
198 |
+
}
|
199 |
+
|
200 |
+
/** populate a single rectangle ML request prompt */
|
201 |
+
export const getRectanglePromptElement = (e: LEvented) => {
|
202 |
+
return {
|
203 |
+
id: e.layer._leaflet_id,
|
204 |
+
type: 'rectangle',
|
205 |
+
data: getSelectedRectangleCoordinatesBBox(e)
|
206 |
+
}
|
207 |
+
}
|
208 |
+
|
209 |
+
/** handle different event/layer types (rectangle, point: IncludeMarkerPrompt, ExcludeMarkerPrompt) */
|
210 |
+
const updateLayerOnCreateOrEditEvent = (
|
211 |
+
event: LEvented,
|
212 |
+
getPopupContentPointFn: (arg0: LEvented, arg1: number) => HTMLDivElement,
|
213 |
+
promptsArrayRef: Ref) => {
|
214 |
+
responseMessageRef.value = '-'
|
215 |
+
if (event.shape === 'IncludeMarkerPrompt' || event.shape === 'ExcludeMarkerPrompt') {
|
216 |
+
const labelPoint = Number(excludeIncludeLabelPrompt[event.shape])
|
217 |
+
const div = getPopupContentPointFn(event, labelPoint)
|
218 |
+
event.layer.bindPopup(div).openPopup()
|
219 |
+
promptsArrayRef.value.push(getPointPromptElement(event, labelPoint))
|
220 |
+
}
|
221 |
+
if (event.shape === 'RectanglePrompt') {
|
222 |
+
event.layer.bindPopup(`id:${event.layer._leaflet_id}.`).openPopup()
|
223 |
+
promptsArrayRef.value.push(getRectanglePromptElement(event))
|
224 |
+
}
|
225 |
+
}
|
226 |
+
|
227 |
+
/** listen on the leaflet editor geoman.io events and update its layer properties within the promptsArrayRef vue ref */
|
228 |
+
export const updateMapData = (
|
229 |
+
localMap: LMap,
|
230 |
+
getPopupContentPointFn: (arg0: LEvented, arg1: number) => HTMLDivElement,
|
231 |
+
promptsArrayRef: Ref
|
232 |
+
) => {
|
233 |
+
localMap.on('pm:create', (e: LEvented) => {
|
234 |
+
updateLayerOnCreateOrEditEvent(e, getPopupContentPointFn, promptsArrayRef)
|
235 |
+
|
236 |
+
// listen to changes on the new layer and update its object within promptsArrayRef
|
237 |
+
e.layer.on('pm:edit', function(newEvent: LEvented) {
|
238 |
+
promptsArrayRef.value = removeEventFromArrayByIndex(promptsArrayRef.value, newEvent)
|
239 |
+
updateLayerOnCreateOrEditEvent(e, getPopupContentPointFn, promptsArrayRef)
|
240 |
+
});
|
241 |
+
})
|
242 |
+
localMap.on('pm:remove', (e: LEvented) => {
|
243 |
+
responseMessageRef.value = '-'
|
244 |
+
promptsArrayRef.value = removeEventFromArrayByIndex(promptsArrayRef.value, e)
|
245 |
+
})
|
246 |
+
}
|
247 |
+
|
248 |
+
/** remove the selected layer from the ML request array prompt */
|
249 |
+
const removeEventFromArrayByIndex = (arr: Array<LEvented>, e: LEvented) => {
|
250 |
+
return arr.filter((el: LEvented) => {
|
251 |
+
return el.id != e.layer._leaflet_id
|
252 |
+
})
|
253 |
+
}
|
static/src/components/types.d.ts
ADDED
@@ -0,0 +1,50 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
import { Evented, type LatLng } from "leaflet";
|
2 |
+
|
3 |
+
export interface BboxLatLng {
|
4 |
+
ne: LatLng,
|
5 |
+
sw: LatLng
|
6 |
+
}
|
7 |
+
|
8 |
+
export enum ExcludeIncludeLabelPrompt {
|
9 |
+
ExcludeMarkerPrompt = 0,
|
10 |
+
IncludeMarkerPrompt = 1
|
11 |
+
}
|
12 |
+
type PointPromptType = "point"
|
13 |
+
type RectanglePromptType = "rectangle"
|
14 |
+
|
15 |
+
export interface IPointPrompt {
|
16 |
+
id: Evented.layer._url,
|
17 |
+
type: PointPromptType,
|
18 |
+
data: LatLng,
|
19 |
+
label: ExcludeIncludeLabelPrompt
|
20 |
+
}
|
21 |
+
|
22 |
+
export interface IRectanglePrompt {
|
23 |
+
id?: Evented.layer._url,
|
24 |
+
type: RectanglePromptType,
|
25 |
+
data: BboxLatLng
|
26 |
+
}
|
27 |
+
|
28 |
+
export interface IPointTable {
|
29 |
+
id?: Evented.layer._url,
|
30 |
+
data: LatLng,
|
31 |
+
label: ExcludeIncludeLabelPrompt
|
32 |
+
}
|
33 |
+
|
34 |
+
export interface IRectangleTable {
|
35 |
+
id?: Evented.layer._url,
|
36 |
+
data_ne: BboxLatLng,
|
37 |
+
data_sw: BboxLatLng
|
38 |
+
}
|
39 |
+
|
40 |
+
export interface IBodyLatLngPoints {
|
41 |
+
bbox: BboxLatLng,
|
42 |
+
prompt: Array<IPointPrompt|IRectanglePrompt>,
|
43 |
+
zoom: number,
|
44 |
+
source_type: string
|
45 |
+
}
|
46 |
+
|
47 |
+
export type OpenStreetMap = "OpenStreetMap"
|
48 |
+
export type Satellite = "Satellite"
|
49 |
+
export type SourceTileType = OpenStreetMap | Satellite
|
50 |
+
export type ArrayNumber = Array<number>
|
static/src/input.css
ADDED
@@ -0,0 +1,20 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
@import "leaflet/dist/leaflet.css";
|
2 |
+
@import "leaflet-custom.css";
|
3 |
+
@import "@geoman-io/leaflet-geoman-free/dist/leaflet-geoman.css";
|
4 |
+
@tailwind base;
|
5 |
+
|
6 |
+
@layer base {
|
7 |
+
* {
|
8 |
+
@apply box-border;
|
9 |
+
}
|
10 |
+
h1 {
|
11 |
+
@apply text-xl font-bold md:text-3xl;
|
12 |
+
}
|
13 |
+
a {
|
14 |
+
@apply underline;
|
15 |
+
}
|
16 |
+
}
|
17 |
+
|
18 |
+
@tailwind components;
|
19 |
+
|
20 |
+
@tailwind utilities;
|
static/src/leaflet-custom.css
ADDED
@@ -0,0 +1,42 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
.map-predictions {
|
2 |
+
width: 80%;
|
3 |
+
aspect-ratio: 256/171;
|
4 |
+
position: relative;
|
5 |
+
z-index: 999;
|
6 |
+
/*float: left;*/
|
7 |
+
}
|
8 |
+
a.leaflet-control-layers-toggle {
|
9 |
+
background-image: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABoAAAAaCAQAAAADQ4RFAAACf0lEQVR4AY1UM3gkARTePdvdoTxXKc+qTl3aU5U6b2Kbkz3Gtq3Zw6ziLGNPzrYx7946Tr6/ee/XeCQ4D3ykPtL5tHno4n0d/h3+xfuWHGLX81cn7r0iTNzjr7LrlxCqPtkbTQEHeqOrTy4Yyt3VCi/IOB0v7rVC7q45Q3Gr5K6jt+3Gl5nCoDD4MtO+j96Wu8atmhGqcNGHObuf8OM/x3AMx38+4Z2sPqzCxRFK2aF2e5Jol56XTLyggAMTL56XOMoS1W4pOyjUcGGQdZxU6qRh7B9Zp+PfpOFlqt0zyDZckPi1ttmIp03jX8gyJ8a/PG2yutpS/Vol7peZIbZcKBAEEheEIAgFbDkz5H6Zrkm2hVWGiXKiF4Ycw0RWKdtC16Q7qe3X4iOMxruonzegJzWaXFrU9utOSsLUmrc0YjeWYjCW4PDMADElpJSSQ0vQvA1Tm6/JlKnqFs1EGyZiFCqnRZTEJJJiKRYzVYzJck2Rm6P4iH+cmSY0YzimYa8l0EtTODFWhcMIMVqdsI2uiTvKmTisIDHJ3od5GILVhBCarCfVRmo4uTjkhrhzkiBV7SsaqS+TzrzM1qpGGUFt28pIySQHR6h7F6KSwGWm97ay+Z+ZqMcEjEWebE7wxCSQwpkhJqoZA5ivCdZDjJepuJ9IQjGGUmuXJdBFUygxVqVsxFsLMbDe8ZbDYVCGKxs+W080max1hFCarCfV+C1KATwcnvE9gRRuMP2prdbWGowm1KB1y+zwMMENkM755cJ2yPDtqhTI6ED1M/82yIDtC/4j4BijjeObflpO9I9MwXTCsSX8jWAFeHr05WoLTJ5G8IQVS/7vwR6ohirYM7f6HzYpogfS3R2OAAAAAElFTkSuQmCC);
|
10 |
+
background-size: 26px 26px;
|
11 |
+
}
|
12 |
+
.leaflet-retina .leaflet-control-layers-toggle {
|
13 |
+
background-image: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABoAAAAaCAQAAAADQ4RFAAACf0lEQVR4AY1UM3gkARTePdvdoTxXKc+qTl3aU5U6b2Kbkz3Gtq3Zw6ziLGNPzrYx7946Tr6/ee/XeCQ4D3ykPtL5tHno4n0d/h3+xfuWHGLX81cn7r0iTNzjr7LrlxCqPtkbTQEHeqOrTy4Yyt3VCi/IOB0v7rVC7q45Q3Gr5K6jt+3Gl5nCoDD4MtO+j96Wu8atmhGqcNGHObuf8OM/x3AMx38+4Z2sPqzCxRFK2aF2e5Jol56XTLyggAMTL56XOMoS1W4pOyjUcGGQdZxU6qRh7B9Zp+PfpOFlqt0zyDZckPi1ttmIp03jX8gyJ8a/PG2yutpS/Vol7peZIbZcKBAEEheEIAgFbDkz5H6Zrkm2hVWGiXKiF4Ycw0RWKdtC16Q7qe3X4iOMxruonzegJzWaXFrU9utOSsLUmrc0YjeWYjCW4PDMADElpJSSQ0vQvA1Tm6/JlKnqFs1EGyZiFCqnRZTEJJJiKRYzVYzJck2Rm6P4iH+cmSY0YzimYa8l0EtTODFWhcMIMVqdsI2uiTvKmTisIDHJ3od5GILVhBCarCfVRmo4uTjkhrhzkiBV7SsaqS+TzrzM1qpGGUFt28pIySQHR6h7F6KSwGWm97ay+Z+ZqMcEjEWebE7wxCSQwpkhJqoZA5ivCdZDjJepuJ9IQjGGUmuXJdBFUygxVqVsxFsLMbDe8ZbDYVCGKxs+W080max1hFCarCfV+C1KATwcnvE9gRRuMP2prdbWGowm1KB1y+zwMMENkM755cJ2yPDtqhTI6ED1M/82yIDtC/4j4BijjeObflpO9I9MwXTCsSX8jWAFeHr05WoLTJ5G8IQVS/7vwR6ohirYM7f6HzYpogfS3R2OAAAAAElFTkSuQmCC);
|
14 |
+
background-size: 28px 28px;
|
15 |
+
}
|
16 |
+
@media only screen and (min-width: 2000px) {
|
17 |
+
.map-predictions {
|
18 |
+
width: 100%;
|
19 |
+
}
|
20 |
+
}
|
21 |
+
@media only screen and (max-width: 1800px) {
|
22 |
+
.map-predictions {
|
23 |
+
width: 75%;
|
24 |
+
}
|
25 |
+
}
|
26 |
+
@media only screen and (max-width: 1600px) {
|
27 |
+
.map-predictions {
|
28 |
+
width: 65%;
|
29 |
+
}
|
30 |
+
}
|
31 |
+
@media only screen and (max-width: 1370px) and (max-height: 920px) and (orientation: landscape) {
|
32 |
+
.map-predictions {
|
33 |
+
width: 95%;
|
34 |
+
}
|
35 |
+
}
|
36 |
+
@media only screen and (max-width: 810px) and (max-height: 370px) and (orientation: landscape) {
|
37 |
+
.map-predictions {
|
38 |
+
height: 70%;
|
39 |
+
max-height: 70%;
|
40 |
+
/*float: right;*/
|
41 |
+
}
|
42 |
+
}
|
static/src/main.ts
ADDED
@@ -0,0 +1,6 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
import { createApp } from "vue";
|
2 |
+
import App from "./App.vue";
|
3 |
+
|
4 |
+
const app = createApp(App);
|
5 |
+
|
6 |
+
app.mount("#root");
|