Various fixes on sequence page and list of sequences

This commit is contained in:
Adrien Pavie
2024-05-02 12:03:05 +00:00
committed by Jean Andreani
parent 6690eecb81
commit 4aa96cf243
30 changed files with 658 additions and 469 deletions

View File

@@ -10,7 +10,7 @@ Available parameters are:
- `VITE_API_URL`: the URL to the GeoVisio API (with trailing `/`, example: `https://geovisio.fr/`)
- `VITE_INSTANCE_NAME`: the name of the instance (example: `IGN`)
- `VITE_TILES`: the URL of your tiles : default tiles are the Open Street Map Tiles (example: `https://wxs.ign.fr/essentiels/static/vectorTiles/styles/PLAN.IGN/attenue.json`)
- `VITE_TILES`: the URL of your tiles : default tiles are the Open Street Map Tiles (example: `https://data.geopf.fr/annexes/ressources/vectorTiles/styles/PLAN.IGN/standard.json`)
- `VITE_MAX_ZOOM`: the max zoom to use on the map (defaults to 24).
- `VITE_ZOOM`: the zoom to use at the initialization of the map (defaults to 0).
- `VITE_CENTER`: the center position to use at the initialization of the map (defaults to 0).

View File

@@ -25,7 +25,7 @@
"axios": "^1.2.3",
"bootstrap": "^5.2.3",
"bootstrap-icons": "^1.10.3",
"geovisio": "2.5.1-develop-3e498d46",
"geovisio": "3.0.0-develop-28e7fdc1",
"moment": "^2.29.4",
"pako": "^2.1.0",
"pinia": "^2.1.4",

View File

@@ -1,21 +1,17 @@
<script setup lang="ts">
import { ref, computed } from 'vue'
import { ref } from 'vue'
import Header from '@/components/Header.vue'
import Footer from '@/components/Footer.vue'
import { RouterView } from 'vue-router'
import { hasASessionCookieDecoded } from '@/utils/auth'
import authConfig from './composables/auth'
import { authConfig, isAuth } from './composables/auth'
const { authConf } = authConfig()
const { isLogged } = isAuth()
let focusMap = ref<string>('focus-map')
function setFocusMap(value: string) {
focusMap.value = value
}
const isLogged = computed((): boolean => {
const cookie = hasASessionCookieDecoded()
return !!(cookie && cookie.account)
})
</script>
<template>

1
src/assets/images/en.svg Normal file

File diff suppressed because one or more lines are too long

After

Width:  |  Height:  |  Size: 5.8 KiB

1
src/assets/images/fr.svg Normal file
View File

@@ -0,0 +1 @@
<svg xmlns="http://www.w3.org/2000/svg" width="512" height="512" viewBox="0 0 512 512" version="1.1"><path d="M 341 256 L 341 424.064 412.272 423.782 L 483.545 423.500 490.127 420.259 C 498.055 416.355, 505.078 409.201, 508.820 401.218 L 511.500 395.500 511.500 256 L 511.500 116.500 508.820 110.782 C 505.078 102.799, 498.055 95.645, 490.127 91.741 L 483.545 88.500 412.272 88.218 L 341 87.936 341 256" stroke="none" fill="#ff4b55" fill-rule="evenodd"/><path d="M 171 256 L 171 424 256 424 L 341 424 341 256 L 341 88 256 88 L 171 88 171 256" stroke="none" fill="#f4f4f4" fill-rule="evenodd"/><path d="M 27.929 89.367 C 17.637 92.142, 8.008 100.484, 3.160 110.825 L 0.500 116.500 0.500 256 L 0.500 395.500 3.180 401.218 C 6.922 409.201, 13.945 416.355, 21.873 420.259 L 28.455 423.500 99.728 423.782 L 171 424.064 171 256.032 L 171 88 101.750 88.067 C 50.201 88.118, 31.332 88.450, 27.929 89.367" stroke="none" fill="#44449c" fill-rule="evenodd"/></svg>

After

Width:  |  Height:  |  Size: 953 B

1
src/assets/images/hu.svg Normal file
View File

@@ -0,0 +1 @@
<svg xmlns="http://www.w3.org/2000/svg" width="512" height="512" viewBox="0 0 512 512" version="1.1"><path d="M 50 17.886 C 41.197 20.732, 35.982 23.858, 29.912 29.928 C 23.834 36.006, 20.197 42.216, 17.612 50.932 C 16.208 55.662, 16 64.083, 16 116.182 L 16 176 256 176 L 496 176 496 116.182 C 496 51.184, 496.061 51.984, 490.272 40.554 C 487.059 34.209, 477.791 24.941, 471.446 21.728 C 459.317 15.586, 474.887 15.995, 255.568 16.054 C 66.632 16.105, 55.194 16.206, 50 17.886" stroke="none" fill="#c0392b" fill-rule="evenodd"/><path d="M 16 256 L 16 336 256 336 L 496 336 496 256 L 496 176 256 176 L 16 176 16 256" stroke="none" fill="#fcfcfc" fill-rule="evenodd"/><path d="M 16 395.818 C 16 460.816, 15.939 460.016, 21.728 471.446 C 24.941 477.791, 34.209 487.059, 40.554 490.272 C 52.678 496.412, 37.187 496, 256 496 C 474.813 496, 459.322 496.412, 471.446 490.272 C 477.791 487.059, 487.059 477.791, 490.272 471.446 C 496.061 460.016, 496 460.816, 496 395.818 L 496 336 256 336 L 16 336 16 395.818" stroke="none" fill="#24ac64" fill-rule="evenodd"/></svg>

After

Width:  |  Height:  |  Size: 1.0 KiB

1
src/assets/images/pt.svg Normal file
View File

@@ -0,0 +1 @@
<svg xmlns="http://www.w3.org/2000/svg" width="512" height="512" viewBox="0 0 512 512" version="1.1"><path d="M 170.377 245.461 C 170.056 246.296, 169.957 252.497, 170.157 259.240 C 170.443 268.882, 170.911 272.141, 172.345 274.500 C 178.068 283.914, 190.051 284.114, 195.500 274.887 C 197.234 271.950, 197.500 269.704, 197.500 258 L 197.500 244.500 184.230 244.221 C 173.107 243.987, 170.865 244.187, 170.377 245.461" stroke="none" fill="#004cba" fill-rule="evenodd"/><path d="M 153.189 250.776 L 153.500 276.551 156.787 283.223 C 164.622 299.127, 181.991 306.147, 195.922 299.040 C 202.361 295.755, 208.630 289.450, 211.728 283.143 L 214.500 277.500 214.824 251.250 L 215.147 225 184.012 225 L 152.877 225 153.189 250.776 M 170.377 245.461 C 170.056 246.296, 169.953 252.497, 170.147 259.240 C 170.453 269.872, 170.801 271.984, 172.766 275.144 C 176.832 281.682, 184.484 283.718, 190.656 279.903 C 196.539 276.268, 197.480 273.250, 197.491 258 L 197.500 244.500 184.230 244.221 C 173.107 243.987, 170.865 244.187, 170.377 245.461" stroke="none" fill="#ffffff" fill-rule="evenodd"/><path d="M 173.500 148.570 C 140.174 153.092, 115.707 166.576, 97.570 190.413 C 61.447 237.890, 70.878 305.962, 118.472 341.285 C 153.937 367.605, 199.632 369.859, 238.444 347.202 C 249.571 340.707, 267.651 322.620, 274.392 311.242 C 279.888 301.965, 285.403 288.090, 287.784 277.546 C 290.041 267.558, 290.033 243.939, 287.771 233.765 C 283.057 212.569, 274.214 196.340, 259 180.962 C 242.241 164.022, 226.242 155.179, 203.819 150.462 C 196.553 148.933, 178.928 147.834, 173.500 148.570 M 128.750 201.080 C 127.133 202.022, 127 204.912, 127 239 C 127 261.889, 127.417 277.914, 128.097 281.201 C 130.603 293.305, 140.064 308.220, 149.714 315.277 C 164.345 325.975, 179.016 329.755, 193.451 326.543 C 211.705 322.482, 226.548 310.919, 234.893 294.260 C 240.551 282.965, 240.969 279.203, 240.985 239.405 C 240.999 205.696, 240.879 203.201, 239.171 201.655 C 237.517 200.158, 232.254 200.003, 183.921 200.030 C 149.501 200.050, 129.878 200.423, 128.750 201.080" stroke="none" fill="#ffe600" fill-rule="evenodd"/><path d="M 75 1.553 C 40.842 8.877, 14.816 32.647, 3.340 67 L 0.500 75.500 0.236 253.351 C -0.024 429.355, -0.006 431.291, 2.013 439.791 C 9.839 472.741, 35.014 498.784, 69.067 509.155 C 76.325 511.366, 77.765 511.427, 130.250 511.758 L 184 512.097 184 437.765 L 184 363.434 172.750 362.225 C 158.801 360.727, 149.219 358.088, 137.148 352.421 C 81.316 326.207, 59.078 258.161, 88.643 204 C 106.061 172.094, 138.074 151.693, 175.750 148.493 L 184 147.792 184 73.896 L 184 0 132.750 0.079 C 92.950 0.141, 80.048 0.470, 75 1.553" stroke="none" fill="#04a206" fill-rule="evenodd"/><path d="M 184 73.898 L 184 147.841 190.750 148.526 C 210.176 150.497, 226.827 156.307, 242.910 166.727 C 251.981 172.603, 268.750 190.300, 274.476 200.037 C 280.234 209.831, 285.314 222.719, 287.771 233.765 C 290.033 243.939, 290.041 267.558, 287.784 277.546 C 283.274 297.513, 274.210 314.428, 260.101 329.208 C 241.790 348.391, 220.088 359.179, 193.793 362.169 L 184 363.282 184 437.641 L 184 512 306.542 512 C 414.592 512, 429.996 511.812, 436.792 510.412 C 473.570 502.834, 503.058 473.237, 510.450 436.484 C 511.895 429.301, 512.027 410.846, 511.773 252.500 L 511.490 76.500 509.204 69 C 499.478 37.085, 474.881 12.491, 443 2.803 L 435.500 0.523 309.750 0.239 L 184 -0.045 184 73.898 M 128.750 201.080 C 127.133 202.022, 127 204.912, 127 239 C 127 261.889, 127.417 277.914, 128.097 281.201 C 130.603 293.305, 140.064 308.220, 149.714 315.277 C 164.345 325.975, 179.016 329.755, 193.451 326.543 C 211.705 322.482, 226.548 310.919, 234.893 294.260 C 240.551 282.965, 240.969 279.203, 240.985 239.405 C 240.999 205.696, 240.879 203.201, 239.171 201.655 C 237.517 200.158, 232.254 200.003, 183.921 200.030 C 149.501 200.050, 129.878 200.423, 128.750 201.080 M 153.189 251.250 L 153.500 277.500 156.272 283.143 C 161.388 293.558, 171.743 300.889, 182.568 301.758 C 190.722 302.412, 199.009 298.836, 205.555 291.838 C 214.130 282.670, 214.456 281.242, 214.811 251.250 L 215.121 225 184 225 L 152.879 225 153.189 251.250" stroke="none" fill="#f3042b" fill-rule="evenodd"/></svg>

After

Width:  |  Height:  |  Size: 4.0 KiB

View File

@@ -107,6 +107,9 @@
/>
</div>
</div>
<div class="entry-lang-switcher">
<LangSwitcher />
</div>
</div>
</div>
</nav>
@@ -119,10 +122,13 @@ import { onClickOutside } from '@vueuse/core'
import { useRoute } from 'vue-router'
import { useI18n } from 'vue-i18n'
import { getAuthRoute, hasASessionCookieDecoded } from '@/utils/auth'
import { isAuth } from '../composables/auth'
import Link from '@/components/Link.vue'
import InstanceName from '@/components/InstanceName.vue'
import HeaderOpen from '@/components/header/HeaderOpen.vue'
import AccountButton from '@/components/header/AccountButton.vue'
import LangSwitcher from '@/components/header/LangSwitcher.vue'
const { isLogged } = isAuth()
const { t } = useI18n()
const route = useRoute()
defineProps({
@@ -140,10 +146,6 @@ function closeModal(): void {
function toggleMenu(): void {
menuIsClosed.value = !menuIsClosed.value
}
const isLogged = computed((): boolean => {
const cookie = hasASessionCookieDecoded()
return !!(cookie && cookie.account)
})
const ariaLabel = computed((): string =>
menuIsClosed.value
? t('general.header.burger_menu_aria_label_open')
@@ -199,6 +201,9 @@ const userName = computed((): string => {
div {
margin-right: toRem(2);
}
div:last-child {
margin-right: 0;
}
}
.link-upload {
margin-right: toRem(2);
@@ -212,6 +217,9 @@ const userName = computed((): string => {
padding-left: toRem(0.5);
color: var(--blue);
}
.entry-lang-switcher {
margin-left: toRem(2);
}
@media (max-width: toRem(102.4)) {
.nav {
padding-right: toRem(2);

View File

@@ -8,8 +8,9 @@
<script lang="ts" setup>
import { computed } from 'vue'
import { getEnv } from '@/utils'
const instanceName = computed((): string | null => {
const instanceName = String(import.meta.env.VITE_INSTANCE_NAME)
const instanceName = getEnv('VITE_INSTANCE_NAME')
if (instanceName) return instanceName
return null
})

View File

@@ -4,10 +4,11 @@
<script setup lang="ts">
import axios from 'axios'
import { onMounted, onUnmounted, ref, computed } from 'vue'
import { onMounted, onUnmounted, ref, watch, computed } from 'vue'
import { useSequenceStore } from '@/store/sequence'
import { Viewer, StandaloneMap, Editor } from 'geovisio'
import { createUrlLink, manageSlashUrl } from '@/utils'
import { createUrlLink, manageSlashUrl, getEnv } from '@/utils'
import { isAuth } from '../composables/auth'
import {
createLink,
createSequenceLink,
@@ -17,13 +18,14 @@ import { useI18n } from 'vue-i18n'
import { hasASessionCookieDecoded } from '@/utils/auth'
import type {
ViewerInterface,
ParamsViewerInterface,
EditorInterface,
StandAloneInterface,
MapInterface
ParamsViewerInterface,
ParamsEditorStandaloneInterface
} from '@/views/interfaces/common'
const sequenceStore = useSequenceStore()
const { t } = useI18n()
const { t, locale } = useI18n()
const { isLogged } = isAuth()
let mapIsLoaded = ref<boolean>(false)
let viewer = ref()
const props = defineProps({
@@ -37,10 +39,6 @@ const props = defineProps({
seqBruteDeg: { type: Number, default: 0 },
roadDegrees: { type: Number, default: 0 }
})
const isLogged = computed((): boolean => {
const cookie = hasASessionCookieDecoded()
return !!(cookie && cookie.account)
})
const userName = computed((): string => {
const cookie = hasASessionCookieDecoded()
if (cookie && cookie.account) return cookie.account.name
@@ -92,10 +90,15 @@ function createViewerButton(link: HTMLDivElement): void {
}
)
}
watch(locale, () => {
const viewerEl = document.getElementById('viewer')
if (viewerEl) viewerEl.innerHTML = ''
initViewer()
})
function setupViewer(params: ParamsViewerInterface): void {
const maxZoom = String(import.meta.env.VITE_MAX_ZOOM)
const zoom = String(import.meta.env.VITE_ZOOM)
const center = String(import.meta.env.VITE_CENTER)
const maxZoom = getEnv('VITE_MAX_ZOOM')
const zoom = getEnv('VITE_ZOOM')
const center = getEnv('VITE_CENTER')
const reportLink = document.createElement('div')
reportLink.className = 'gvs-group gvs-group-large gvs-group-btnpanel'
let paramsViewer: ViewerInterface = {
@@ -103,6 +106,15 @@ function setupViewer(params: ParamsViewerInterface): void {
widgets: { customWidget: reportLink },
map: { startWide: true }
}
if (params.map && params.map.raster) {
paramsViewer = {
...paramsViewer,
map: {
...paramsViewer.map,
raster: params.map.raster
}
}
}
if (center && center.length > 0) {
const centerMap = center.split(',').map((el: string) => parseInt(el))
paramsViewer = {
@@ -133,7 +145,7 @@ function setupViewer(params: ParamsViewerInterface): void {
}
viewer.value = new Viewer(
'viewer', // Div ID
`${manageSlashUrl()}/api/search`,
`${manageSlashUrl()}api`,
{
...paramsViewer
}
@@ -155,21 +167,21 @@ function setupStandAlone(params: ParamsViewerInterface): void {
const bbox = [props.bbox[0], props.bbox[1], props.bbox[2], props.bbox[3]]
viewer.value = new StandaloneMap(
props.id, // Div ID
`${manageSlashUrl()}/api/search`,
`${manageSlashUrl()}api`,
{
...paramsMap,
bounds: bbox
}
)
}
function setupEditor(params: ParamsViewerInterface): void {
function setupEditor(params: ParamsEditorStandaloneInterface): void {
let paramsMap: EditorInterface = { ...params, minZoom: 7 }
if (props.seqId) paramsMap = { ...paramsMap, selectedSequence: props.seqId }
if (props.userId) paramsMap = { ...paramsMap, users: [props.userId] }
try {
viewer.value = new Editor(
'viewer', // Div ID
`${manageSlashUrl()}/api/search`,
`${manageSlashUrl()}api`,
{
...paramsMap
}
@@ -178,22 +190,25 @@ function setupEditor(params: ParamsViewerInterface): void {
console.log(e)
}
}
onMounted(async (): Promise<void> => {
const tiles = String(import.meta.env.VITE_TILES)
const rasterTile = String(import.meta.env.VITE_RASTER_TILE)
let params: ParamsViewerInterface | MapInterface = {}
async function initViewer(): Promise<void> {
const tiles = getEnv('VITE_TILES')
const rasterTile = getEnv('VITE_RASTER_TILE')
let params: ParamsViewerInterface | ParamsEditorStandaloneInterface = {
lang: locale.value
}
if (rasterTile && rasterTile.length > 0) {
const raster = JSON.parse(rasterTile)
if (props.viewerType === 'viewer') params = { ...params, raster }
if (props.viewerType !== 'viewer') params = { ...params, raster }
else params = { ...params, map: { raster } }
}
if (tiles && tiles.length) params = { style: await fetchTiles(tiles) }
if (tiles && tiles.length) {
params = { ...params, style: await fetchTiles(tiles) }
}
if (props.picId && props.picId.length) {
params = { ...params, selectedPicture: props.picId }
}
if (props.fetchOptions && props.fetchOptions.credentials) {
params = { ...params, ...props.fetchOptions }
params = { ...params, fetchOptions: { ...props.fetchOptions } }
}
try {
if (props.viewerType === 'standAlone') setupStandAlone(params)
@@ -201,9 +216,11 @@ onMounted(async (): Promise<void> => {
else setupViewer(params)
mapIsLoaded.value = true
} catch (err) {
console.log(err)
mapIsLoaded.value = true
}
}
onMounted(() => {
initViewer()
})
onUnmounted((): void => {
if (viewer.value && props.viewerType) {

View File

@@ -0,0 +1,103 @@
<template>
<div class="dropdown">
<img :src="img(`${locale}.svg`)" loading="lazy" class="img-lang" />
<span class="desktop">{{ locale.toUpperCase() }}</span>
<div class="image-chevron desktop">
<i class="bi bi-chevron-down" />
</div>
<div class="dropdown-block">
<button
v-for="lang in allLocales"
@click.native="changeLocale(lang)"
class="item-lang"
>
<img :src="formatLangListUrl(lang)" loading="lazy" class="img-lang" />
<span>{{ lang.toUpperCase() }}</span>
</button>
</div>
</div>
</template>
<script lang="ts" setup>
import { ref, computed } from 'vue'
import { useI18n } from 'vue-i18n'
import { img } from '../../utils/image'
const { locale, messages } = useI18n()
const displayed = ref<boolean>(true)
const allLocales = computed(() => {
let locales: string[] = []
Object.keys(messages.value).forEach(function (key) {
if (locale.value !== key) locales = [...locales, key]
})
return locales
})
function changeLocale(lang: string): void {
locale.value = lang
displayed.value = false
}
function formatLangListUrl(lang: string): string {
return img(`${lang}.svg`)
}
</script>
<style scoped lang="scss">
.dropdown {
display: flex;
align-items: center;
cursor: pointer;
height: toRem(2);
}
.dropdown:hover > .dropdown-block {
display: block;
}
.dropdown:hover > .image-chevron {
transform: rotate(180deg);
}
.dropdown-block {
display: none;
position: absolute;
z-index: 2;
background-color: var(--white);
border-radius: toRem(0.5);
width: fit-content;
left: toRem(-1);
top: toRem(2);
padding: toRem(0.5);
}
.img-lang {
height: toRem(1.5);
margin-right: toRem(0.5);
}
.desktop {
@include text(xs-r-regular);
}
.image-chevron {
margin-left: toRem(0.5);
}
.item-lang {
display: flex;
align-items: center;
justify-content: flex-start;
background-color: var(--white);
border: none;
cursor: pointer;
@include text(xs-r-regular);
margin-bottom: toRem(0.5);
}
@media (max-width: toRem(50)) {
.desktop {
display: none;
}
.img-lang {
height: toRem(2);
}
.dropdown-block {
left: toRem(-2);
top: toRem(3);
padding: toRem(0.5);
}
.item-lang {
margin-bottom: toRem(1);
}
}
</style>

View File

@@ -50,12 +50,13 @@
</template>
<script lang="ts" setup>
import { ref, watchEffect } from 'vue'
import { ref, watchEffect, onMounted, onUnmounted } from 'vue'
import InformationCard from '@/components/InformationCard.vue'
import Button from '@/components/Button.vue'
import Input from '@/components/Input.vue'
import WidgetOrientation from '@/components/sequence/WidgetOrientation.vue'
import { modulo180 } from '@/utils/calc'
const emit = defineEmits<{
(e: 'triggerAngle', value: number): void
(e: 'triggerMovingAngle', value: number): void
@@ -68,6 +69,13 @@ const props = defineProps({
seqBruteDeg: { type: Number, default: 0 },
isLoading: { type: Boolean, default: false }
})
onMounted(() => {
triggerMovingAngle(angleInputValue.value)
})
onUnmounted(() => {
triggerMovingAngle(angleInputValue.value)
})
watchEffect(() => {
angleValue.value = props.seqBruteDeg
angleInputValue.value = Math.round(props.seqBruteDeg - props.roadDegrees)

View File

@@ -44,7 +44,7 @@
<Button
look="button--blue"
type="submit"
:text="$t('pages.sequence.orientation_panel_button')"
:text="$t('pages.sequence.sort_panel_button')"
:disabled="sortValue.length === 0"
/>
</form>

View File

@@ -30,6 +30,7 @@
@mousedown="mousedown"
@mousemove="handleMouseMove"
@mouseup="mouseup"
@mouseout="mouseup"
class="cursor-img"
>
<button class="arrow-img arrow-img-1" @click="clickAndMove(45)">

View File

@@ -1,8 +1,9 @@
import axios from 'axios'
import { onMounted, ref } from 'vue'
import { onMounted, watchEffect, ref } from 'vue'
import { hasASessionCookieDecoded } from '@/utils/auth'
import type { AuthConfigInterface } from './interfaces/Auth'
export default function authConfig() {
export function authConfig() {
const authConf = ref<AuthConfigInterface>()
async function getConfig(): Promise<AuthConfigInterface> {
@@ -15,3 +16,12 @@ export default function authConfig() {
onMounted(async () => (authConf.value = await getConfig()))
return { authConf }
}
export function isAuth() {
const isLogged = ref<boolean>(false)
watchEffect(() => {
const cookie = hasASessionCookieDecoded()
isLogged.value = !!(cookie && cookie.account)
})
return { isLogged }
}

View File

@@ -79,6 +79,7 @@
"sort_panel_check_gps": "GPS Date",
"sort_panel_check_file": "File date",
"sort_panel_check_name": "File name",
"sort_panel_button": "Validate sort",
"created": "Uploaded :",
"taken": "Shot on :",
"duration": "Duration :",

View File

@@ -79,6 +79,7 @@
"sort_panel_check_gps": "Date du GPS",
"sort_panel_check_file": "Date de la caméra",
"sort_panel_check_name": "Nom du fichier",
"sort_panel_button": "Valider le tri",
"created": "Versement :",
"taken": "Prise de vue :",
"duration": "Durée :",

View File

@@ -1,162 +1,162 @@
{
"general": {
"meta": {
"title": "Instância Panoramax",
"description": "Panoramax, a alternativa livre para foto-mapear território."
},
"header": {
"contribute_text": "Porquê Contribuir?",
"viewer": "Visualizador",
"my_account": "Minha Conta",
"upload_text": "+ Partilhar Imagens",
"alt_logo": "Logo da Instância",
"alt_photos": "Icon das Imagens",
"alt_information": "Icon do Utilizador",
"alt_settings": "Icon das Definições",
"alt_logout": "Icon de Terminar Sessão",
"title": "Panoramax",
"beta_text": "Versão Beta",
"logout_text": "Terminar Sessão",
"my_information_text": "Meus Detalhes",
"my_settings_text": "Minhas Definições",
"burger_menu_aria_label_open": "Mostrar Menu",
"burger_menu_aria_label_closed": "Esconder menu",
"sequences_text": "Minhas Imagens",
"login_text": "Iniciar Sessão",
"register_text": "Criar Conta"
},
"footer": {
"panoramax_site": "Descobrir Panoramax",
"information_gitlab": "Mostrar código fonte",
"gitlab_logo": "Logo do GitLab",
"ay11_text": "Acessibilidade: Não conforme"
},
"error_text": "Um erro ocorreu",
"success_text": "Atualização concluida",
"title": "Instância Panoramax"
"general": {
"meta": {
"title": "Instância Panoramax",
"description": "Panoramax, a alternativa livre para foto-mapear território."
},
"pages": {
"home": {
"report_button_text": "Reportar esta imagem",
"sequence_title": "Ver a sequencia",
"open_fullscreen": "Modo ecrã inteiro",
"close_fullscreen": "Modo normal",
"report_mail": "?subject=⚠️ Denuncia na imagem {picId}&body=Olá, %0D%0A%0D%0A Problema na imagem (manter tipo de problema reportado): %0D%0A%0D%0A %0D%0A%0D%0A conteúdo inapropriado / falta de desfoque num elemento a ser anonimizado ou desfocado por razões de segurançans / sobredesfocamento (demasiado desfocamento) %0D%0A%0D%0A Link para a imagem afetada: {link} %0D%0A%0D%0A Detalhes dos elementos afetados (especialmente para problemas de desfocamento - o que deveria ou não estar defocado?):"
},
"settings": {
"title": "Meus tokens",
"setting_tooltip": "Mostrar ou esconder token"
},
"sequence": {
"sequence_published": "Publicado",
"sequence_waiting": "Ainda a processar",
"sequence_hidden": "Escondido",
"sequence_form_title": "Editar o titulo",
"back_button": "Voltar à lista das minhas sequencias",
"delete_sequence_tooltip": "Permanentemente apagar esta sequencia",
"hide_photo_tooltip": "Esconder imagens selecionadas",
"delete_photo_tooltip": "Apagar permanentemente as imagens selecionadas",
"conf_pic_msg": "⚠️ As imagens selecionadas irão ser apagadas permanentemente",
"conf_sequence_msg": "⚠️ Esta sequencia vai ser apagada permanentemente",
"button_panel_orientation": "Definir orientação",
"button_panel_sort": "Ordenar sequencia",
"orientation_panel_tooltip": "Arraste a caixa azul para a direção desejada\"",
"orientation_input_label": "ou altere o ângulo aqui",
"orientation_input_placeholder": "Valor entre -180 e 180",
"orientation_input_error_value": "O valor tem de estar entre -180 e 180",
"orientation_panel_button": "Validar posição",
"orientation_updated": "Orientação atualizada",
"sort_updated": "Sequencia ordenada",
"hide_sequence_tooltip": "Esconder estas sequencias",
"info_msg_maj": "Use a tecla SHIFT para selecionar várias imagens",
"button_panel_photos": "Gerir imagens",
"orientation_panel_title": "Ajustar a orientação de todas as fotos na sequencia",
"duration_end": "Fim :",
"camera": "Camera :",
"button_delete": "Apagar a sequencia",
"button_disable": "Ocultar a sequencia",
"button_enable": "Mostrar a sequencia",
"picture_selected": "{count} imagem selecionada| {count} imagens selecionadas",
"hours": "{count} hora| {count} horas",
"minutes": "{count} minuto| {count} minutos",
"seconds": "{count} segundo| {count} segundos",
"select_text": "Selecionar tudo",
"unselect_text": "Desselecionar tudo",
"select_shift_text": "Selecione múltiplas imagens com shift",
"waiting_process": "Foto em progresso",
"no_image": "Sem imagens na sequencia",
"sort_panel_title": "Definição de ordenamento da sequencia",
"sort_panel_settings": "Ordenar sequencia por:",
"sort_panel_settings_order": "Ordenar:",
"sort_panel_settings_order_increase": "Ascendente",
"sort_panel_settings_order_decrease": "Descendente",
"sort_panel_check_gps": "Data GPS",
"sort_panel_check_file": "Data do ficheiro",
"sort_panel_check_name": "Nome do ficheiro",
"created": "Enviada :",
"taken": "Tirada em :",
"duration": "Duração :",
"duration_begin": "Inicio :"
},
"sequences": {
"no_sequence_found": "Nenhuma sequencia encontrada",
"filter_bbox_button": "Procurar nesta área",
"filter_date_close_button": "Fechar",
"title": "Minhas sequencias",
"filter_date_upload_title": "Filtrar por data de envio:",
"radio_date_placeholder": "03/01/2024",
"radio_date": "data",
"hide_button": "Ocultar",
"show_button": "Mostrar",
"delete_button": "Apagar",
"filter_date_reset_button": "Restaurar",
"filter_date_title": "Filtrar por data da foto :",
"sequence_name": "Nome",
"sequence_photos": "Fotos",
"sequence_date": "Tirada em",
"sequence_creation": "Enviar",
"sequence_creation_tooltip": "Filtrar por data de envio",
"sequence_date_tooltip": "Filtrar por data da foto",
"reset_filter_button": "Restaurar filtros",
"sequence_status": "Estado",
"sequence_published": "Publicado",
"sequence_waiting": "Ainda a processar",
"sequence_hidden": "Oculto",
"no_sequences_text": "Ainda não tem fotos publicadas 😢",
"button_upload": "Enviar imagens",
"sequence_deleted": "A sequencia foi apagada"
},
"share_pictures": {
"title": "Porquê contribuir para o Panoramax?",
"upload_description": "A aplicação web Panoramax permite o envio de todas as fotos de campo em formato JPEG com apenas um clique. Não são necessárias habilidades de programação. Para grandes números de fotos, recomendamos o uso da ferramenta em linha comandos",
"information_about_description": "Uma API está disponivel para recolher todos os metadados e fotos. <a href='{docLink}' target='_blank' style='color:#0a1f69'>\nDescubra mais aqui </a>\nOs dados também são exibidos na forma de <a href='{docTiles}' target='_blank' style='color:#0a1f69'> vector tiles </a>",
"card_description2": "Fotos 360º não são obrigatórias: fotos tiradas com o smartphone são tudo o que é necessário. Datas, localização e formato jpg são os únicos pré-requisitos.",
"description": "Contribuir para o Panoramax significa participar no desenvolvimento de um recurso digital geo-comum, livre, soberano e reutilizavel. Cada foto geolocalizada publicada no panoramax pode ser usada por qualquer um para uma grande variedade de propósitos, por exemplo, por uma autoridade local que precise de observar o estado das estradas, ou por um operador de telecomunicações para preparar uma intrevenção.\n\nCada contribuidor pode enviar as suas sequencias de imagens, modificar e consulta-las, tal como ver todas as outras - 360º ou não - contribuidas pela comunidade. O desfocamento das caras e matriculas é automático na plataforma.",
"alt_img_map": "Ilustração de uma mulher a olhar para um mapa com o seu smartphone geolocalizado",
"card_photo1": "Locais visíveis de uma estrada publica",
"card_photo2": "Fotos publicadas em formato 360º ou não",
"card_photo3": "Fotos facilmente reutilizáveis",
"card_photo4": "Uma fácil e rápida contribuição de imagens",
"card_alt_photo1": "Imagem de um edificio",
"card_alt_photo2": "Imagem a mostrar 360-graus",
"card_alt_photo3": "Imagem a mostrar um mapa com um ponteiro",
"card_alt_photo4": "Imagem a representar um ponteiro",
"card_description1": "Todas as fotos tiradas de uma estrada publica são aceites, desde que sejam geolocalizadas e vistas desde o solo.",
"card_description3": "Todas as fotos são acessíveis e reutilizáveis sem uma conta: via website ou API standard (standard STAC).",
"card_description4": "Várias ferramentas estão disponíveis para facilitar contribuições, incluindo em linhas de comandos e no site.",
"upload_subtitle": "Envie as suas fotos facilmente online",
"upload_illustration_alt": "Ilustração a mostrar o envio de fotos online",
"upload_button": "+ Enviar fotos",
"command_line_subtitle": "Ferramenta de linha de comandos",
"comment_install": "Instalar a ferramenta de linha de comandos geovisio",
"comment_upload": "Iniciar o comando de envio de imagens na pasta escolhida",
"button_copy": "Copiar",
"information_subtitle": "Aqui, todas as suas fotos são acessíveis para todos: ",
"information_text1": "Automaticamente desfocado em conformidade com a legislação.",
"information_text3": "No seu formato e resolução original para diversas reutilizações.",
"information_about_title": "Precisa acesso a fotos?",
"terminal_text": "geovisio upload --api-url {url} <PASTA_FOTOS>",
"information_text2": "As fotos enviadas serão publicadas como {word}"
}
"header": {
"contribute_text": "Porquê Contribuir?",
"viewer": "Visualizador",
"my_account": "Minha Conta",
"upload_text": "+ Partilhar Imagens",
"alt_logo": "Logo da Instância",
"alt_photos": "Icon das Imagens",
"alt_information": "Icon do Utilizador",
"alt_settings": "Icon das Definições",
"alt_logout": "Icon de Terminar Sessão",
"title": "Panoramax",
"beta_text": "Versão Beta",
"logout_text": "Terminar Sessão",
"my_information_text": "Meus Detalhes",
"my_settings_text": "Minhas Definições",
"burger_menu_aria_label_open": "Mostrar Menu",
"burger_menu_aria_label_closed": "Esconder menu",
"sequences_text": "Minhas Imagens",
"login_text": "Iniciar Sessão",
"register_text": "Criar Conta"
},
"footer": {
"panoramax_site": "Descobrir Panoramax",
"information_gitlab": "Mostrar código fonte",
"gitlab_logo": "Logo do GitLab",
"ay11_text": "Acessibilidade: Não conforme"
},
"error_text": "Um erro ocorreu",
"success_text": "Atualização concluida",
"title": "Instância Panoramax"
},
"pages": {
"home": {
"report_button_text": "Reportar esta imagem",
"sequence_title": "Ver a sequencia",
"open_fullscreen": "Modo ecrã inteiro",
"close_fullscreen": "Modo normal",
"report_mail": "?subject=⚠️ Denuncia na imagem {picId}&body=Olá, %0D%0A%0D%0A Problema na imagem (manter tipo de problema reportado): %0D%0A%0D%0A %0D%0A%0D%0A conteúdo inapropriado / falta de desfoque num elemento a ser anonimizado ou desfocado por razões de segurançans / sobredesfocamento (demasiado desfocamento) %0D%0A%0D%0A Link para a imagem afetada: {link} %0D%0A%0D%0A Detalhes dos elementos afetados (especialmente para problemas de desfocamento - o que deveria ou não estar defocado?):"
},
"settings": {
"title": "Meus tokens",
"setting_tooltip": "Mostrar ou esconder token"
},
"sequence": {
"sequence_published": "Publicado",
"sequence_waiting": "Ainda a processar",
"sequence_hidden": "Escondido",
"sequence_form_title": "Editar o titulo",
"back_button": "Voltar à lista das minhas sequencias",
"delete_sequence_tooltip": "Permanentemente apagar esta sequencia",
"hide_photo_tooltip": "Esconder imagens selecionadas",
"delete_photo_tooltip": "Apagar permanentemente as imagens selecionadas",
"conf_pic_msg": "⚠️ As imagens selecionadas irão ser apagadas permanentemente",
"conf_sequence_msg": "⚠️ Esta sequencia vai ser apagada permanentemente",
"button_panel_orientation": "Definir orientação",
"button_panel_sort": "Ordenar sequencia",
"orientation_panel_tooltip": "Arraste a caixa azul para a direção desejada\"",
"orientation_input_label": "ou altere o ângulo aqui",
"orientation_input_placeholder": "Valor entre -180 e 180",
"orientation_input_error_value": "O valor tem de estar entre -180 e 180",
"orientation_panel_button": "Validar posição",
"orientation_updated": "Orientação atualizada",
"sort_updated": "Sequencia ordenada",
"hide_sequence_tooltip": "Esconder estas sequencias",
"info_msg_maj": "Use a tecla SHIFT para selecionar várias imagens",
"button_panel_photos": "Gerir imagens",
"orientation_panel_title": "Ajustar a orientação de todas as fotos na sequencia",
"duration_end": "Fim :",
"camera": "Camera :",
"button_delete": "Apagar a sequencia",
"button_disable": "Ocultar a sequencia",
"button_enable": "Mostrar a sequencia",
"picture_selected": "{count} imagem selecionada| {count} imagens selecionadas",
"hours": "{count} hora| {count} horas",
"minutes": "{count} minuto| {count} minutos",
"seconds": "{count} segundo| {count} segundos",
"select_text": "Selecionar tudo",
"unselect_text": "Desselecionar tudo",
"select_shift_text": "Selecione múltiplas imagens com shift",
"waiting_process": "Foto em progresso",
"no_image": "Sem imagens na sequencia",
"sort_panel_title": "Definição de ordenamento da sequencia",
"sort_panel_settings": "Ordenar sequencia por:",
"sort_panel_settings_order": "Ordenar:",
"sort_panel_settings_order_increase": "Ascendente",
"sort_panel_settings_order_decrease": "Descendente",
"sort_panel_check_gps": "Data GPS",
"sort_panel_check_file": "Data do ficheiro",
"sort_panel_check_name": "Nome do ficheiro",
"created": "Enviada :",
"taken": "Tirada em :",
"duration": "Duração :",
"duration_begin": "Inicio :"
},
"sequences": {
"no_sequence_found": "Nenhuma sequencia encontrada",
"filter_bbox_button": "Procurar nesta área",
"filter_date_close_button": "Fechar",
"title": "Minhas sequencias",
"filter_date_upload_title": "Filtrar por data de envio:",
"radio_date_placeholder": "03/01/2024",
"radio_date": "data",
"hide_button": "Ocultar",
"show_button": "Mostrar",
"delete_button": "Apagar",
"filter_date_reset_button": "Restaurar",
"filter_date_title": "Filtrar por data da foto :",
"sequence_name": "Nome",
"sequence_photos": "Fotos",
"sequence_date": "Tirada em",
"sequence_creation": "Enviar",
"sequence_creation_tooltip": "Filtrar por data de envio",
"sequence_date_tooltip": "Filtrar por data da foto",
"reset_filter_button": "Restaurar filtros",
"sequence_status": "Estado",
"sequence_published": "Publicado",
"sequence_waiting": "Ainda a processar",
"sequence_hidden": "Oculto",
"no_sequences_text": "Ainda não tem fotos publicadas 😢",
"button_upload": "Enviar imagens",
"sequence_deleted": "A sequencia foi apagada"
},
"share_pictures": {
"title": "Porquê contribuir para o Panoramax?",
"upload_description": "A aplicação web Panoramax permite o envio de todas as fotos de campo em formato JPEG com apenas um clique. Não são necessárias habilidades de programação. Para grandes números de fotos, recomendamos o uso da ferramenta em linha comandos",
"information_about_description": "Uma API está disponivel para recolher todos os metadados e fotos. <a href='{docLink}' target='_blank' style='color:#0a1f69'>\nDescubra mais aqui </a>\nOs dados também são exibidos na forma de <a href='{docTiles}' target='_blank' style='color:#0a1f69'> vector tiles </a>",
"card_description2": "Fotos 360º não são obrigatórias: fotos tiradas com o smartphone são tudo o que é necessário. Datas, localização e formato jpg são os únicos pré-requisitos.",
"description": "Contribuir para o Panoramax significa participar no desenvolvimento de um recurso digital geo-comum, livre, soberano e reutilizavel. Cada foto geolocalizada publicada no panoramax pode ser usada por qualquer um para uma grande variedade de propósitos, por exemplo, por uma autoridade local que precise de observar o estado das estradas, ou por um operador de telecomunicações para preparar uma intrevenção.\n\nCada contribuidor pode enviar as suas sequencias de imagens, modificar e consulta-las, tal como ver todas as outras - 360º ou não - contribuidas pela comunidade. O desfocamento das caras e matriculas é automático na plataforma.",
"alt_img_map": "Ilustração de uma mulher a olhar para um mapa com o seu smartphone geolocalizado",
"card_photo1": "Locais visíveis de uma estrada publica",
"card_photo2": "Fotos publicadas em formato 360º ou não",
"card_photo3": "Fotos facilmente reutilizáveis",
"card_photo4": "Uma fácil e rápida contribuição de imagens",
"card_alt_photo1": "Imagem de um edificio",
"card_alt_photo2": "Imagem a mostrar 360-graus",
"card_alt_photo3": "Imagem a mostrar um mapa com um ponteiro",
"card_alt_photo4": "Imagem a representar um ponteiro",
"card_description1": "Todas as fotos tiradas de uma estrada publica são aceites, desde que sejam geolocalizadas e vistas desde o solo.",
"card_description3": "Todas as fotos são acessíveis e reutilizáveis sem uma conta: via website ou API standard (standard STAC).",
"card_description4": "Várias ferramentas estão disponíveis para facilitar contribuições, incluindo em linhas de comandos e no site.",
"upload_subtitle": "Envie as suas fotos facilmente online",
"upload_illustration_alt": "Ilustração a mostrar o envio de fotos online",
"upload_button": "+ Enviar fotos",
"command_line_subtitle": "Ferramenta de linha de comandos",
"comment_install": "Instalar a ferramenta de linha de comandos geovisio",
"comment_upload": "Iniciar o comando de envio de imagens na pasta escolhida",
"button_copy": "Copiar",
"information_subtitle": "Aqui, todas as suas fotos são acessíveis para todos: ",
"information_text1": "Automaticamente desfocado em conformidade com a legislação.",
"information_text3": "No seu formato e resolução original para diversas reutilizações.",
"information_about_title": "Precisa acesso a fotos?",
"terminal_text": "geovisio upload --api-url {url} <PASTA_FOTOS>",
"information_text2": "As fotos enviadas serão publicadas como {word}"
}
}
}

View File

@@ -12,10 +12,12 @@ import { pinia } from './store'
import fr from './locales/fr.json'
import en from './locales/en.json'
import hu from './locales/hu.json'
import pt from './locales/pt.json'
import './assets/main.scss'
import 'bootstrap/dist/css/bootstrap.css'
import 'bootstrap-icons/font/bootstrap-icons.css'
import 'geovisio/build/index.css'
import { getEnv } from '@/utils'
declare global {
interface Window {
@@ -23,10 +25,10 @@ declare global {
}
}
axios.defaults.baseURL = String(import.meta.env.VITE_API_URL)
axios.defaults.baseURL = getEnv('VITE_API_URL')
axios.defaults.withCredentials = true
const matomoHost = String(import.meta.env.VITE_MATOMO_HOST)
const matomoSiteId = String(import.meta.env.VITE_MATOMO_SITE_ID)
const matomoHost = getEnv('VITE_MATOMO_HOST')
const matomoSiteId = getEnv('VITE_MATOMO_SITE_ID')
const matomoExist = matomoHost && matomoSiteId
const i18n = createI18n({
@@ -38,7 +40,8 @@ const i18n = createI18n({
messages: {
fr,
en,
hu
hu,
pt
}
})

View File

@@ -34,7 +34,7 @@ describe('Template', () => {
}
})
expect(wrapper.html()).contains('class="logged-link desktop"')
expect(wrapper.html()).contains('text="Pourquoi contribuer ?"')
expect(wrapper.html()).contains('text="Pourquoi contribuer?"')
})
})
describe('When the user is in mobile', () => {
@@ -63,7 +63,7 @@ describe('Template', () => {
userProfileUrlLength: 5
}
})
expect(wrapper.html()).contains('text="Pourquoi contribuer ?"')
expect(wrapper.html()).contains('text="Pourquoi contribuer?"')
expect(wrapper.html()).contains('text="+ Partager des photos"')
expect(wrapper.html()).contains('text="Mes informations"')
expect(wrapper.html()).contains('text="Mes paramètres"')

View File

@@ -1,4 +1,4 @@
import { it, describe, expect, vi, beforeEach } from 'vitest'
import { it, describe, expect, vi } from 'vitest'
import {
imageStatus,
photoToDeleteOrPatchSelected,
@@ -11,7 +11,6 @@ import {
decodingFlaskCookie,
hasASessionCookieDecoded
} from '../../utils/auth'
import { img } from '../../utils/image'
import { useCookies } from 'vue3-cookies'
vi.mock('vue3-cookies', () => {
const mockCookies = {
@@ -177,13 +176,6 @@ describe('hasASessionCookieDecoded', () => {
})
})
describe('img', () => {
it('should render the formated img path', () => {
const name = 'my-img'
expect(img(name)).contains('src/assets/images')
})
})
describe('sortByName', () => {
it('should return the the list sorted by name', () => {
const list1 = [

View File

@@ -1,7 +1,9 @@
function modulo180(value: number, roadDegrees: number): number {
let moduloAngle = (value - roadDegrees) % 360
if (moduloAngle < -180) moduloAngle += 360
if (moduloAngle > 180) moduloAngle -= 360
while (moduloAngle > 180 || moduloAngle < -180) {
if (moduloAngle < -180) moduloAngle += 360
if (moduloAngle > 180) moduloAngle -= 360
}
return Math.round(moduloAngle)
}

View File

@@ -3,9 +3,14 @@ function createUrlLink(picId: string): string {
}
function manageSlashUrl(): string {
let apiUrl = String(import.meta.env.VITE_API_URL)
let apiUrl = getEnv('VITE_API_URL')
if (apiUrl.charAt(apiUrl.length - 1) !== '/') apiUrl += '/'
return apiUrl
}
export { createUrlLink, manageSlashUrl }
function getEnv(value: string | undefined) {
if (value) return import.meta.env[value]
return null
}
export { createUrlLink, manageSlashUrl, getEnv }

View File

@@ -10,9 +10,10 @@
<section v-if="sequence" class="entry-viewer">
<WebsiteViewer
:key="viewerType"
:fetch-options="{ fetchOptions: { credentials: 'include' } }"
:pic-id="pictures[0].id"
:fetch-options="{ credentials: 'include' }"
:pic-id="pictures[0] && pictures[0].id ? pictures[0].id : undefined"
:seq-id="sequence.id"
:user-id="getUserId"
:viewer-type="viewerType"
:seq-brute-deg="seqBruteDeg"
:road-degrees="seqDegrees"
@@ -202,7 +203,7 @@ import PanelPhotosManagement from '@/components/sequence/PanelPhotosManagement.v
import PanelOrientationManagement from '@/components/sequence/PanelOrientationManagement.vue'
import PanelSortManagement from '@/components/sequence/PanelSortManagement.vue'
import WebsiteViewer from '@/components/WebsiteViewer.vue'
import type ViewerType from '@/components/Viewer.vue'
import type ViewerType from '@/components/WebsiteViewer.vue'
import { durationCalc, formatDate } from '@/utils/dates'
import {
deleteACollectionItem,
@@ -219,6 +220,7 @@ import {
spliceIntoChunks,
formatPaginationItems
} from '@/views/utils/sequence/index'
import { getEnv } from '@/utils'
import type {
ResponseUserPhotoInterface,
ResponseUserPhotoLinksInterface,
@@ -279,6 +281,7 @@ onMounted(async () => {
} catch (err) {
console.log(err)
}
isLoading.value = false
})
onUnmounted(() => {
document.removeEventListener('keydown', (evt) => {
@@ -312,7 +315,7 @@ function setPanelView(value: string): void {
panelView.value = value
if (!viewerRef?.value?.viewer) return
if (value === 'orientation') {
const raster = String(import.meta.env.VITE_RASTER_TILE)
const raster = getEnv('VITE_RASTER_TILE')
if (raster) viewerRef.value.viewer.map.setBackground('aerial')
setSeqDegrees()
} else viewerRef.value.viewer.map.setBackground('streets')
@@ -348,7 +351,7 @@ const isSequenceOwner = computed((): boolean => {
sequence.value.providers[0].name === cookies.get('user_name')
)
})
const getUserId = computed<string>((): string => cookies.get('user_id'))
const sequenceStatus = computed((): string => {
if (sequence.value?.status === 'ready')
return t('pages.sequence.sequence_published')
@@ -470,7 +473,11 @@ function triggerCheck(value: CheckboxInterface): void {
} else picturesToDelete.value = []
}
function orientMovingSequence(value: number): void {
if (!viewerRef?.value?.viewer) return
if (
!viewerRef?.value?.viewer ||
!viewerRef.value.viewer?.psv?.getPictureMetadata()
)
return
viewerRef.value.viewer.previewSequenceHeadingChange(value)
}
async function orientSequence(value: number): Promise<void> {
@@ -481,6 +488,11 @@ async function orientSequence(value: number): Promise<void> {
})
formatSequenceFetched(data)
sequenceStore.addToastText(t('pages.sequence.orientation_updated'), 'success')
if (viewerRef.value) {
orientMovingSequence(value)
await viewerRef.value.viewer._loadSequence()
await viewerRef.value.viewer.psv.clearPictureMetadataCache()
}
isLoadingOrient.value = false
}
async function sortSequence(value: string): Promise<void> {

View File

@@ -21,11 +21,7 @@
>
<WebsiteViewer
v-if="collectionBbox.length"
:fetch-options="{
fetchOptions: {
credentials: 'include'
}
}"
:fetch-options="{ credentials: 'include' }"
viewer-type="standAlone"
:user-id="getUserId"
:bbox="collectionBbox"
@@ -295,7 +291,7 @@ import {
import { useCookies } from 'vue3-cookies'
import axios from 'axios'
import WebsiteViewer from '@/components/WebsiteViewer.vue'
import type ViewerType from '@/components/Viewer.vue'
import type ViewerType from '@/components/WebsiteViewer.vue'
import Button from '@/components/Button.vue'
import Link from '@/components/Link.vue'
import Toast from '@/components/Toast.vue'
@@ -421,11 +417,18 @@ async function deleteCollection(
sequence: SequenceLinkInterface
): Promise<void> {
isLoading.value = true
if (confirm(t('pages.sequence.conf_sequence_msg'))) {
await deleteACollection(sequence.id)
await fetchAndFormatSequence()
if (viewerRef.value) viewerRef.value.viewer.map.reloadVectorTiles()
try {
if (confirm(t('pages.sequence.conf_sequence_msg'))) {
await deleteACollection(sequence.id)
await fetchAndFormatSequence()
}
} catch (error: unknown) {
const err = error as { response: { data: { message: string } } }
if (err.response.data.message.includes('No data loaded for user')) {
userSequences.value = []
}
}
if (viewerRef.value) viewerRef.value.viewer.map.reloadVectorTiles()
isLoading.value = false
}
function sequenceStatus(status: string): string {
@@ -559,7 +562,6 @@ onMounted(async () => {
isLoading.value = false
} catch (err) {
isLoading.value = false
console.log(err)
}
})
function formatUri(): void {
@@ -713,6 +715,8 @@ watchEffect(() => {
background-color: var(--blue-pale);
padding-right: toRem(2);
padding-left: toRem(2);
padding-top: toRem(0.5);
padding-bottom: toRem(0.5);
&:nth-child(2n) {
background-color: var(--white);
}

View File

@@ -165,15 +165,13 @@ import InformationCard from '@/components/InformationCard.vue'
import License from '@/components/License.vue'
import { computed } from 'vue'
import { useI18n } from 'vue-i18n'
import authConfig from '../composables/auth'
import { manageSlashUrl } from '@/utils'
import { authConfig } from '../composables/auth'
import { manageSlashUrl, getEnv } from '@/utils'
const { t } = useI18n()
const { authConf } = authConfig()
const apiUrl = computed((): string =>
String(import.meta.env.VITE_API_URL)
? manageSlashUrl()
: 'https://panoramax.ign.fr/'
getEnv('VITE_API_URL') ? manageSlashUrl() : 'https://panoramax.ign.fr/'
)
const formatTextInfoCard = computed((): string => {
@@ -271,7 +269,7 @@ ul {
.subtitle {
@include text(h2);
color: var(--blue-dark);
margin-bottom: 0;
margin-bottom: toRem(2);
}
.upload-button {
display: flex;
@@ -285,10 +283,6 @@ ul {
.entry-information-card {
margin-top: toRem(2);
}
.subtitle {
@include text(h2);
color: var(--blue-dark);
}
.icon-block {
display: flex;
align-items: center;

View File

@@ -142,7 +142,7 @@ import {
createASequence
} from '@/views/utils/upload/request'
import { sortByName } from '@/views/utils/upload/index'
import authConfig from '../composables/auth'
import { authConfig } from '../composables/auth'
import { deleteACollection } from '@/views/utils/sequence/request'
const { authConf } = authConfig()

View File

@@ -23,36 +23,38 @@ export interface ViewerInterface {
| {
type: string
tiles: string[]
attribution: string
tileSize: number
}
| string
}
fetchOptions?: { credentials: string }
fetchOptions?: { credentials?: string }
}
export interface ParamsViewerInterface {
style?: void
raster?: RasterInterface
selectedPicture?: string
fetchOptions?: { credentials: string }
}
export interface MapInterface {
lang: string
style?: void
selectedPicture?: string
fetchOptions?: { credentials: string }
map: {
raster?: RasterInterface
fetchOptions?: { credentials?: string }
map?: {
raster?:
| {
type: string
tiles: string[]
tileSize: number
}
| string
}
}
interface RasterInterface {
raster:
export interface ParamsEditorStandaloneInterface {
lang: string
style?: void
selectedPicture?: string
fetchOptions?: { credentials?: string }
raster?:
| {
type: string
tiles: string[]
attribution: string
tileSize: number
}
| string

View File

@@ -3,7 +3,6 @@ import { defineConfig, loadEnv } from 'vite'
import vue from '@vitejs/plugin-vue'
import eslintPlugin from 'vite-plugin-eslint'
import { createHtmlPlugin } from 'vite-plugin-html'
// https://vitejs.dev/config/
export default ({ mode }) => {
process.env = { ...process.env, ...loadEnv(mode, process.cwd()) }

436
yarn.lock
View File

@@ -2,11 +2,6 @@
# yarn lockfile v1
"@aashutoshrathi/word-wrap@^1.2.3":
version "1.2.6"
resolved "https://registry.yarnpkg.com/@aashutoshrathi/word-wrap/-/word-wrap-1.2.6.tgz#bd9154aec9983f77b3a034ecaa015c2e4201f6cf"
integrity sha512-1Yjs2SvM8TflER/OD3cOjhWWOZb58A2t7wpE2S9XfBYTiIl+XFhQG2bjy4Pu1I+EAlCNUzRDYDdFwFYUKvXcIA==
"@achrinza/node-ipc@^9.2.5":
version "9.2.8"
resolved "https://registry.yarnpkg.com/@achrinza/node-ipc/-/node-ipc-9.2.8.tgz#aabfe9fe84406c90bfb7319d5e68b5b517dd8686"
@@ -24,7 +19,7 @@
"@jridgewell/gen-mapping" "^0.3.5"
"@jridgewell/trace-mapping" "^0.3.24"
"@babel/code-frame@^7.0.0", "@babel/code-frame@^7.12.13", "@babel/code-frame@^7.23.5", "@babel/code-frame@^7.24.1", "@babel/code-frame@^7.24.2", "@babel/code-frame@^7.8.3":
"@babel/code-frame@^7.0.0", "@babel/code-frame@^7.12.13", "@babel/code-frame@^7.23.5", "@babel/code-frame@^7.24.2", "@babel/code-frame@^7.8.3":
version "7.24.2"
resolved "https://registry.yarnpkg.com/@babel/code-frame/-/code-frame-7.24.2.tgz#718b4b19841809a58b29b68cde80bc5e1aa6d9ae"
integrity sha512-y5+tLQyV8pg3fsiln67BVLD1P13Eg4lh5RW9mF0zUuvLrv9uIQ4MCL+CRT+FTsBlBjcIan6PGsLcBN0m3ClUyQ==
@@ -38,32 +33,32 @@
integrity sha512-vg8Gih2MLK+kOkHJp4gBEIkyaIi00jgWot2D9QOmmfLC8jINSOzmCLta6Bvz/JSBCqnegV0L80jhxkol5GWNfQ==
"@babel/core@^7.11.6", "@babel/core@^7.12.16", "@babel/core@^7.12.3", "@babel/core@^7.18.10", "@babel/core@^7.23.9":
version "7.24.4"
resolved "https://registry.yarnpkg.com/@babel/core/-/core-7.24.4.tgz#1f758428e88e0d8c563874741bc4ffc4f71a4717"
integrity sha512-MBVlMXP+kkl5394RBLSxxk/iLTeVGuXTV3cIDXavPpMMqnSnt6apKgan/U8O3USWZCWZT/TbgfEpKa4uMgN4Dg==
version "7.24.5"
resolved "https://registry.yarnpkg.com/@babel/core/-/core-7.24.5.tgz#15ab5b98e101972d171aeef92ac70d8d6718f06a"
integrity sha512-tVQRucExLQ02Boi4vdPp49svNGcfL2GhdTCT9aldhXgCJVAI21EtRfBettiuLUwce/7r6bFdgs6JFkcdTiFttA==
dependencies:
"@ampproject/remapping" "^2.2.0"
"@babel/code-frame" "^7.24.2"
"@babel/generator" "^7.24.4"
"@babel/generator" "^7.24.5"
"@babel/helper-compilation-targets" "^7.23.6"
"@babel/helper-module-transforms" "^7.23.3"
"@babel/helpers" "^7.24.4"
"@babel/parser" "^7.24.4"
"@babel/helper-module-transforms" "^7.24.5"
"@babel/helpers" "^7.24.5"
"@babel/parser" "^7.24.5"
"@babel/template" "^7.24.0"
"@babel/traverse" "^7.24.1"
"@babel/types" "^7.24.0"
"@babel/traverse" "^7.24.5"
"@babel/types" "^7.24.5"
convert-source-map "^2.0.0"
debug "^4.1.0"
gensync "^1.0.0-beta.2"
json5 "^2.2.3"
semver "^6.3.1"
"@babel/generator@^7.18.10", "@babel/generator@^7.24.1", "@babel/generator@^7.24.4", "@babel/generator@^7.7.2":
version "7.24.4"
resolved "https://registry.yarnpkg.com/@babel/generator/-/generator-7.24.4.tgz#1fc55532b88adf952025d5d2d1e71f946cb1c498"
integrity sha512-Xd6+v6SnjWVx/nus+y0l1sxMOTOMBkyL4+BIdbALyatQnAe/SRVjANeDPSCYaX+i1iJmuGSKf3Z+E+V/va1Hvw==
"@babel/generator@^7.18.10", "@babel/generator@^7.24.5", "@babel/generator@^7.7.2":
version "7.24.5"
resolved "https://registry.yarnpkg.com/@babel/generator/-/generator-7.24.5.tgz#e5afc068f932f05616b66713e28d0f04e99daeb3"
integrity sha512-x32i4hEXvr+iI0NEoEfDKzlemF8AmtOP8CcrRaEcpzysWuoEb1KknpcvMsHKPONoKZiDuItklgWhB18xEhr9PA==
dependencies:
"@babel/types" "^7.24.0"
"@babel/types" "^7.24.5"
"@jridgewell/gen-mapping" "^0.3.5"
"@jridgewell/trace-mapping" "^0.3.25"
jsesc "^2.5.1"
@@ -99,81 +94,81 @@
dependencies:
"@babel/types" "^7.22.5"
"@babel/helper-module-imports@^7.22.15":
"@babel/helper-module-imports@^7.24.3":
version "7.24.3"
resolved "https://registry.yarnpkg.com/@babel/helper-module-imports/-/helper-module-imports-7.24.3.tgz#6ac476e6d168c7c23ff3ba3cf4f7841d46ac8128"
integrity sha512-viKb0F9f2s0BCS22QSF308z/+1YWKV/76mwt61NBzS5izMzDPwdq1pTrzf+Li3npBWX9KdQbkeCt1jSAM7lZqg==
dependencies:
"@babel/types" "^7.24.0"
"@babel/helper-module-transforms@^7.23.3":
version "7.23.3"
resolved "https://registry.yarnpkg.com/@babel/helper-module-transforms/-/helper-module-transforms-7.23.3.tgz#d7d12c3c5d30af5b3c0fcab2a6d5217773e2d0f1"
integrity sha512-7bBs4ED9OmswdfDzpz4MpWgSrV7FXlc3zIagvLFjS5H+Mk7Snr21vQ6QwrsoCGMfNC4e4LQPdoULEt4ykz0SRQ==
"@babel/helper-module-transforms@^7.24.5":
version "7.24.5"
resolved "https://registry.yarnpkg.com/@babel/helper-module-transforms/-/helper-module-transforms-7.24.5.tgz#ea6c5e33f7b262a0ae762fd5986355c45f54a545"
integrity sha512-9GxeY8c2d2mdQUP1Dye0ks3VDyIMS98kt/llQ2nUId8IsWqTF0l1LkSX0/uP7l7MCDrzXS009Hyhe2gzTiGW8A==
dependencies:
"@babel/helper-environment-visitor" "^7.22.20"
"@babel/helper-module-imports" "^7.22.15"
"@babel/helper-simple-access" "^7.22.5"
"@babel/helper-split-export-declaration" "^7.22.6"
"@babel/helper-validator-identifier" "^7.22.20"
"@babel/helper-module-imports" "^7.24.3"
"@babel/helper-simple-access" "^7.24.5"
"@babel/helper-split-export-declaration" "^7.24.5"
"@babel/helper-validator-identifier" "^7.24.5"
"@babel/helper-plugin-utils@^7.0.0", "@babel/helper-plugin-utils@^7.10.4", "@babel/helper-plugin-utils@^7.12.13", "@babel/helper-plugin-utils@^7.14.5", "@babel/helper-plugin-utils@^7.24.0", "@babel/helper-plugin-utils@^7.8.0":
version "7.24.0"
resolved "https://registry.yarnpkg.com/@babel/helper-plugin-utils/-/helper-plugin-utils-7.24.0.tgz#945681931a52f15ce879fd5b86ce2dae6d3d7f2a"
integrity sha512-9cUznXMG0+FxRuJfvL82QlTqIzhVW9sL0KjMPHhAOOvpQGL8QtdxnBKILjBqxlHyliz0yCa1G903ZXI/FuHy2w==
version "7.24.5"
resolved "https://registry.yarnpkg.com/@babel/helper-plugin-utils/-/helper-plugin-utils-7.24.5.tgz#a924607dd254a65695e5bd209b98b902b3b2f11a"
integrity sha512-xjNLDopRzW2o6ba0gKbkZq5YWEBaK3PCyTOY1K2P/O07LGMhMqlMXPxwN4S5/RhWuCobT8z0jrlKGlYmeR1OhQ==
"@babel/helper-simple-access@^7.22.5":
version "7.22.5"
resolved "https://registry.yarnpkg.com/@babel/helper-simple-access/-/helper-simple-access-7.22.5.tgz#4938357dc7d782b80ed6dbb03a0fba3d22b1d5de"
integrity sha512-n0H99E/K+Bika3++WNL17POvo4rKWZ7lZEp1Q+fStVbUi8nxPQEBOlTmCOxW/0JsS56SKKQ+ojAe2pHKJHN35w==
"@babel/helper-simple-access@^7.24.5":
version "7.24.5"
resolved "https://registry.yarnpkg.com/@babel/helper-simple-access/-/helper-simple-access-7.24.5.tgz#50da5b72f58c16b07fbd992810be6049478e85ba"
integrity sha512-uH3Hmf5q5n7n8mz7arjUlDOCbttY/DW4DYhE6FUsjKJ/oYC1kQQUvwEQWxRwUpX9qQKRXeqLwWxrqilMrf32sQ==
dependencies:
"@babel/types" "^7.22.5"
"@babel/types" "^7.24.5"
"@babel/helper-split-export-declaration@^7.22.6":
version "7.22.6"
resolved "https://registry.yarnpkg.com/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.22.6.tgz#322c61b7310c0997fe4c323955667f18fcefb91c"
integrity sha512-AsUnxuLhRYsisFiaJwvp1QF+I3KjD5FOxut14q/GzovUe6orHLesW2C7d754kRm53h5gqrz6sFl6sxc4BVtE/g==
"@babel/helper-split-export-declaration@^7.24.5":
version "7.24.5"
resolved "https://registry.yarnpkg.com/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.24.5.tgz#b9a67f06a46b0b339323617c8c6213b9055a78b6"
integrity sha512-5CHncttXohrHk8GWOFCcCl4oRD9fKosWlIRgWm4ql9VYioKm52Mk2xsmoohvm7f3JoiLSM5ZgJuRaf5QZZYd3Q==
dependencies:
"@babel/types" "^7.22.5"
"@babel/types" "^7.24.5"
"@babel/helper-string-parser@^7.23.4":
"@babel/helper-string-parser@^7.24.1":
version "7.24.1"
resolved "https://registry.yarnpkg.com/@babel/helper-string-parser/-/helper-string-parser-7.24.1.tgz#f99c36d3593db9540705d0739a1f10b5e20c696e"
integrity sha512-2ofRCjnnA9y+wk8b9IAREroeUP02KHp431N2mhKniy2yKIDKpbrHv9eXwm8cBeWQYcJmzv5qKCu65P47eCF7CQ==
"@babel/helper-validator-identifier@^7.22.20":
version "7.22.20"
resolved "https://registry.yarnpkg.com/@babel/helper-validator-identifier/-/helper-validator-identifier-7.22.20.tgz#c4ae002c61d2879e724581d96665583dbc1dc0e0"
integrity sha512-Y4OZ+ytlatR8AI+8KZfKuL5urKp7qey08ha31L8b3BwewJAoJamTzyvxPR/5D+KkdJCGPq/+8TukHBlY10FX9A==
"@babel/helper-validator-identifier@^7.24.5":
version "7.24.5"
resolved "https://registry.yarnpkg.com/@babel/helper-validator-identifier/-/helper-validator-identifier-7.24.5.tgz#918b1a7fa23056603506370089bd990d8720db62"
integrity sha512-3q93SSKX2TWCG30M2G2kwaKeTYgEUp5Snjuj8qm729SObL6nbtUldAi37qbxkD5gg3xnBio+f9nqpSepGZMvxA==
"@babel/helper-validator-option@^7.23.5":
version "7.23.5"
resolved "https://registry.yarnpkg.com/@babel/helper-validator-option/-/helper-validator-option-7.23.5.tgz#907a3fbd4523426285365d1206c423c4c5520307"
integrity sha512-85ttAOMLsr53VgXkTbkx8oA6YTfT4q7/HzXSLEYmjcSTJPMPQtvq1BD79Byep5xMUYbGRzEpDsjUf3dyp54IKw==
"@babel/helpers@^7.24.4":
version "7.24.4"
resolved "https://registry.yarnpkg.com/@babel/helpers/-/helpers-7.24.4.tgz#dc00907fd0d95da74563c142ef4cd21f2cb856b6"
integrity sha512-FewdlZbSiwaVGlgT1DPANDuCHaDMiOo+D/IDYRFYjHOuv66xMSJ7fQwwODwRNAPkADIO/z1EoF/l2BCWlWABDw==
"@babel/helpers@^7.24.5":
version "7.24.5"
resolved "https://registry.yarnpkg.com/@babel/helpers/-/helpers-7.24.5.tgz#fedeb87eeafa62b621160402181ad8585a22a40a"
integrity sha512-CiQmBMMpMQHwM5m01YnrM6imUG1ebgYJ+fAIW4FZe6m4qHTPaRHti+R8cggAwkdz4oXhtO4/K9JWlh+8hIfR2Q==
dependencies:
"@babel/template" "^7.24.0"
"@babel/traverse" "^7.24.1"
"@babel/types" "^7.24.0"
"@babel/traverse" "^7.24.5"
"@babel/types" "^7.24.5"
"@babel/highlight@^7.24.2":
version "7.24.2"
resolved "https://registry.yarnpkg.com/@babel/highlight/-/highlight-7.24.2.tgz#3f539503efc83d3c59080a10e6634306e0370d26"
integrity sha512-Yac1ao4flkTxTteCDZLEvdxg2fZfz1v8M4QpaGypq/WPDqg3ijHYbDfs+LG5hvzSoqaSZ9/Z9lKSP3CjZjv+pA==
version "7.24.5"
resolved "https://registry.yarnpkg.com/@babel/highlight/-/highlight-7.24.5.tgz#bc0613f98e1dd0720e99b2a9ee3760194a704b6e"
integrity sha512-8lLmua6AVh/8SLJRRVD6V8p73Hir9w5mJrhE+IPpILG31KKlI9iz5zmBYKcWPS59qSfgP9RaSBQSHHE81WKuEw==
dependencies:
"@babel/helper-validator-identifier" "^7.22.20"
"@babel/helper-validator-identifier" "^7.24.5"
chalk "^2.4.2"
js-tokens "^4.0.0"
picocolors "^1.0.0"
"@babel/parser@^7.1.0", "@babel/parser@^7.10.5", "@babel/parser@^7.14.7", "@babel/parser@^7.18.11", "@babel/parser@^7.20.7", "@babel/parser@^7.23.9", "@babel/parser@^7.24.0", "@babel/parser@^7.24.1", "@babel/parser@^7.24.4":
version "7.24.4"
resolved "https://registry.yarnpkg.com/@babel/parser/-/parser-7.24.4.tgz#234487a110d89ad5a3ed4a8a566c36b9453e8c88"
integrity sha512-zTvEBcghmeBma9QIGunWevvBAp4/Qu9Bdq+2k0Ot4fVMD6v3dsC9WOcRSKk7tRRyBM/53yKMJko9xOatGQAwSg==
"@babel/parser@^7.1.0", "@babel/parser@^7.10.5", "@babel/parser@^7.14.7", "@babel/parser@^7.18.11", "@babel/parser@^7.20.7", "@babel/parser@^7.23.9", "@babel/parser@^7.24.0", "@babel/parser@^7.24.4", "@babel/parser@^7.24.5":
version "7.24.5"
resolved "https://registry.yarnpkg.com/@babel/parser/-/parser-7.24.5.tgz#4a4d5ab4315579e5398a82dcf636ca80c3392790"
integrity sha512-EOv5IK8arwh3LI47dz1b0tKUb/1uhHAnHJOrjgtQMIpu1uXd9mlFrJg9IUgGUgZ41Ch0K8REPTYpO7B76b4vJg==
"@babel/plugin-syntax-async-generators@^7.8.4":
version "7.8.4"
@@ -274,9 +269,9 @@
"@babel/helper-plugin-utils" "^7.24.0"
"@babel/runtime@^7.21.0":
version "7.24.4"
resolved "https://registry.yarnpkg.com/@babel/runtime/-/runtime-7.24.4.tgz#de795accd698007a66ba44add6cc86542aff1edd"
integrity sha512-dkxf7+hn8mFBwKjs9bvBlArzLVxVbS8usaPUDd5p2a9JCL9tB8OaOVN1isD4+Xyk4ns89/xeOmbQvgdK7IIVdA==
version "7.24.5"
resolved "https://registry.yarnpkg.com/@babel/runtime/-/runtime-7.24.5.tgz#230946857c053a36ccc66e1dd03b17dd0c4ed02c"
integrity sha512-Nms86NXrsaeU9vbBJKni6gXiEXZ4CVpYVzEjDH9Sb8vmZ3UljyA1GSOJl/6LGPO8EHLuSF9H+IxNXHPX8QHJ4g==
dependencies:
regenerator-runtime "^0.14.0"
@@ -289,29 +284,29 @@
"@babel/parser" "^7.24.0"
"@babel/types" "^7.24.0"
"@babel/traverse@^7.10.5", "@babel/traverse@^7.18.11", "@babel/traverse@^7.24.1":
version "7.24.1"
resolved "https://registry.yarnpkg.com/@babel/traverse/-/traverse-7.24.1.tgz#d65c36ac9dd17282175d1e4a3c49d5b7988f530c"
integrity sha512-xuU6o9m68KeqZbQuDt2TcKSxUw/mrsvavlEqQ1leZ/B+C9tk6E4sRWy97WaXgvq5E+nU3cXMxv3WKOCanVMCmQ==
"@babel/traverse@^7.10.5", "@babel/traverse@^7.18.11", "@babel/traverse@^7.24.5":
version "7.24.5"
resolved "https://registry.yarnpkg.com/@babel/traverse/-/traverse-7.24.5.tgz#972aa0bc45f16983bf64aa1f877b2dd0eea7e6f8"
integrity sha512-7aaBLeDQ4zYcUFDUD41lJc1fG8+5IU9DaNSJAgal866FGvmD5EbWQgnEC6kO1gGLsX0esNkfnJSndbTXA3r7UA==
dependencies:
"@babel/code-frame" "^7.24.1"
"@babel/generator" "^7.24.1"
"@babel/code-frame" "^7.24.2"
"@babel/generator" "^7.24.5"
"@babel/helper-environment-visitor" "^7.22.20"
"@babel/helper-function-name" "^7.23.0"
"@babel/helper-hoist-variables" "^7.22.5"
"@babel/helper-split-export-declaration" "^7.22.6"
"@babel/parser" "^7.24.1"
"@babel/types" "^7.24.0"
"@babel/helper-split-export-declaration" "^7.24.5"
"@babel/parser" "^7.24.5"
"@babel/types" "^7.24.5"
debug "^4.3.1"
globals "^11.1.0"
"@babel/types@^7.0.0", "@babel/types@^7.18.10", "@babel/types@^7.20.7", "@babel/types@^7.22.5", "@babel/types@^7.23.0", "@babel/types@^7.24.0", "@babel/types@^7.3.3":
version "7.24.0"
resolved "https://registry.yarnpkg.com/@babel/types/-/types-7.24.0.tgz#3b951f435a92e7333eba05b7566fd297960ea1bf"
integrity sha512-+j7a5c253RfKh8iABBhywc8NSfP5LURe7Uh4qpsh6jc+aLJguvmIUBdjSdEMQv2bENrCR5MfRdjGo7vzS/ob7w==
"@babel/types@^7.0.0", "@babel/types@^7.18.10", "@babel/types@^7.20.7", "@babel/types@^7.22.5", "@babel/types@^7.23.0", "@babel/types@^7.24.0", "@babel/types@^7.24.5", "@babel/types@^7.3.3":
version "7.24.5"
resolved "https://registry.yarnpkg.com/@babel/types/-/types-7.24.5.tgz#7661930afc638a5383eb0c4aee59b74f38db84d7"
integrity sha512-6mQNsaLeXTw0nxYUYu+NSa4Hx4BlF1x1x8/PMFbiR+GBSr+2DkECc69b8hgy2frEodNcvPffeH8YfWd3LI6jhQ==
dependencies:
"@babel/helper-string-parser" "^7.23.4"
"@babel/helper-validator-identifier" "^7.22.20"
"@babel/helper-string-parser" "^7.24.1"
"@babel/helper-validator-identifier" "^7.24.5"
to-fast-properties "^2.0.0"
"@bcoe/v8-coverage@^0.2.3":
@@ -1197,9 +1192,9 @@
integrity sha512-nG96G3Wp6acyAgJqGasjODb+acrI7KltPiRxzHPXnP3NgI28bpQDRv53olbqGXbfcgF5aiiHmO3xpwEpS5Ld9g==
"@types/node@*":
version "20.12.7"
resolved "https://registry.yarnpkg.com/@types/node/-/node-20.12.7.tgz#04080362fa3dd6c5822061aa3124f5c152cff384"
integrity sha512-wq0cICSkRLVaf3UGLMGItu/PtdY7oaXaI/RVU+xliKVOtRna3PRY57ZDfztpDL0n11vfymMUnXv8QwYCO7L1wg==
version "20.12.8"
resolved "https://registry.yarnpkg.com/@types/node/-/node-20.12.8.tgz#35897bf2bfe3469847ab04634636de09552e8256"
integrity sha512-NU0rJLJnshZWdE/097cdCBbyW1h4hEg0xpovcoAQYHl8dnEyp/NAOiE45pvc+Bd1Dt+2r94v2eGFpQJ4R7g+2w==
dependencies:
undici-types "~5.26.4"
@@ -1455,47 +1450,47 @@
semver "^7.3.4"
strip-ansi "^6.0.0"
"@vue/compiler-core@3.4.24":
version "3.4.24"
resolved "https://registry.yarnpkg.com/@vue/compiler-core/-/compiler-core-3.4.24.tgz#6b4a5ffddcd874a692f2acfa68981201bcd7096b"
integrity sha512-vbW/tgbwJYj62N/Ww99x0zhFTkZDTcGh3uwJEuadZ/nF9/xuFMC4693P9r+3sxGXISABpDKvffY5ApH9pmdd1A==
"@vue/compiler-core@3.4.26":
version "3.4.26"
resolved "https://registry.yarnpkg.com/@vue/compiler-core/-/compiler-core-3.4.26.tgz#d507886520e83a6f8339ed55ed0b2b5d84b44b73"
integrity sha512-N9Vil6Hvw7NaiyFUFBPXrAyETIGlQ8KcFMkyk6hW1Cl6NvoqvP+Y8p1Eqvx+UdqsnrnI9+HMUEJegzia3mhXmQ==
dependencies:
"@babel/parser" "^7.24.4"
"@vue/shared" "3.4.24"
"@vue/shared" "3.4.26"
entities "^4.5.0"
estree-walker "^2.0.2"
source-map-js "^1.2.0"
"@vue/compiler-dom@3.4.24", "@vue/compiler-dom@^3.3.0":
version "3.4.24"
resolved "https://registry.yarnpkg.com/@vue/compiler-dom/-/compiler-dom-3.4.24.tgz#b7335a49f095b6d35e48b6f7be8da513c1fa52b8"
integrity sha512-4XgABML/4cNndVsQndG6BbGN7+EoisDwi3oXNovqL/4jdNhwvP8/rfRMTb6FxkxIxUUtg6AI1/qZvwfSjxJiWA==
"@vue/compiler-dom@3.4.26", "@vue/compiler-dom@^3.3.0":
version "3.4.26"
resolved "https://registry.yarnpkg.com/@vue/compiler-dom/-/compiler-dom-3.4.26.tgz#acc7b788b48152d087d4bb9e655b795e3dbec554"
integrity sha512-4CWbR5vR9fMg23YqFOhr6t6WB1Fjt62d6xdFPyj8pxrYub7d+OgZaObMsoxaF9yBUHPMiPFK303v61PwAuGvZA==
dependencies:
"@vue/compiler-core" "3.4.24"
"@vue/shared" "3.4.24"
"@vue/compiler-core" "3.4.26"
"@vue/shared" "3.4.26"
"@vue/compiler-sfc@3.4.24", "@vue/compiler-sfc@^3.2.37":
version "3.4.24"
resolved "https://registry.yarnpkg.com/@vue/compiler-sfc/-/compiler-sfc-3.4.24.tgz#2872e353147ce2a145169a33ddd4d68dc95c3a18"
integrity sha512-nRAlJUK02FTWfA2nuvNBAqsDZuERGFgxZ8sGH62XgFSvMxO2URblzulExsmj4gFZ8e+VAyDooU9oAoXfEDNxTA==
"@vue/compiler-sfc@3.4.26", "@vue/compiler-sfc@^3.2.37":
version "3.4.26"
resolved "https://registry.yarnpkg.com/@vue/compiler-sfc/-/compiler-sfc-3.4.26.tgz#c679f206829954c3c078d8a9be76d0098b8377ae"
integrity sha512-It1dp+FAOCgluYSVYlDn5DtZBxk1NCiJJfu2mlQqa/b+k8GL6NG/3/zRbJnHdhV2VhxFghaDq5L4K+1dakW6cw==
dependencies:
"@babel/parser" "^7.24.4"
"@vue/compiler-core" "3.4.24"
"@vue/compiler-dom" "3.4.24"
"@vue/compiler-ssr" "3.4.24"
"@vue/shared" "3.4.24"
"@vue/compiler-core" "3.4.26"
"@vue/compiler-dom" "3.4.26"
"@vue/compiler-ssr" "3.4.26"
"@vue/shared" "3.4.26"
estree-walker "^2.0.2"
magic-string "^0.30.10"
postcss "^8.4.38"
source-map-js "^1.2.0"
"@vue/compiler-ssr@3.4.24":
version "3.4.24"
resolved "https://registry.yarnpkg.com/@vue/compiler-ssr/-/compiler-ssr-3.4.24.tgz#0d11fe54dabd17cbd6393a16bf7f785da1cfab46"
integrity sha512-ZsAtr4fhaUFnVcDqwW3bYCSDwq+9Gk69q2r/7dAHDrOMw41kylaMgOP4zRnn6GIEJkQznKgrMOGPMFnLB52RbQ==
"@vue/compiler-ssr@3.4.26":
version "3.4.26"
resolved "https://registry.yarnpkg.com/@vue/compiler-ssr/-/compiler-ssr-3.4.26.tgz#22842d8adfff972d87bb798b8d496111f7f814b5"
integrity sha512-FNwLfk7LlEPRY/g+nw2VqiDKcnDTVdCfBREekF8X74cPLiWHUX6oldktf/Vx28yh4STNy7t+/yuLoMBBF7YDiQ==
dependencies:
"@vue/compiler-dom" "3.4.24"
"@vue/shared" "3.4.24"
"@vue/compiler-dom" "3.4.26"
"@vue/shared" "3.4.26"
"@vue/devtools-api@^6.5.0", "@vue/devtools-api@^6.5.1":
version "6.6.1"
@@ -1534,42 +1529,42 @@
path-browserify "^1.0.1"
vue-template-compiler "^2.7.14"
"@vue/reactivity@3.4.24":
version "3.4.24"
resolved "https://registry.yarnpkg.com/@vue/reactivity/-/reactivity-3.4.24.tgz#150584316ca2acc4ed19a24f9f29863c3a17a7b2"
integrity sha512-nup3fSYg4i4LtNvu9slF/HF/0dkMQYfepUdORBcMSsankzRPzE7ypAFurpwyRBfU1i7Dn1kcwpYsE1wETSh91g==
"@vue/reactivity@3.4.26":
version "3.4.26"
resolved "https://registry.yarnpkg.com/@vue/reactivity/-/reactivity-3.4.26.tgz#1191f543809d4c93e5b3e842ba83022350a3f205"
integrity sha512-E/ynEAu/pw0yotJeLdvZEsp5Olmxt+9/WqzvKff0gE67tw73gmbx6tRkiagE/eH0UCubzSlGRebCbidB1CpqZQ==
dependencies:
"@vue/shared" "3.4.24"
"@vue/shared" "3.4.26"
"@vue/runtime-core@3.4.24":
version "3.4.24"
resolved "https://registry.yarnpkg.com/@vue/runtime-core/-/runtime-core-3.4.24.tgz#066c544dc59a07a96c12874a57b750c239124874"
integrity sha512-c7iMfj6cJMeAG3s5yOn9Rc5D9e2/wIuaozmGf/ICGCY3KV5H7mbTVdvEkd4ZshTq7RUZqj2k7LMJWVx+EBiY1g==
"@vue/runtime-core@3.4.26":
version "3.4.26"
resolved "https://registry.yarnpkg.com/@vue/runtime-core/-/runtime-core-3.4.26.tgz#51ee971cb700370a67e5a510c4a84eff7491d658"
integrity sha512-AFJDLpZvhT4ujUgZSIL9pdNcO23qVFh7zWCsNdGQBw8ecLNxOOnPcK9wTTIYCmBJnuPHpukOwo62a2PPivihqw==
dependencies:
"@vue/reactivity" "3.4.24"
"@vue/shared" "3.4.24"
"@vue/reactivity" "3.4.26"
"@vue/shared" "3.4.26"
"@vue/runtime-dom@3.4.24":
version "3.4.24"
resolved "https://registry.yarnpkg.com/@vue/runtime-dom/-/runtime-dom-3.4.24.tgz#4f8e7acbe1e8ffa7c55af1366e4438729ebe9b20"
integrity sha512-uXKzuh/Emfad2Y7Qm0ABsLZZV6H3mAJ5ZVqmAOlrNQRf+T5mxpPGZBfec1hkP41t6h6FwF6RSGCs/gd8WbuySQ==
"@vue/runtime-dom@3.4.26":
version "3.4.26"
resolved "https://registry.yarnpkg.com/@vue/runtime-dom/-/runtime-dom-3.4.26.tgz#179aa7c8dc964112e6d096bc8ec5f361111009a1"
integrity sha512-UftYA2hUXR2UOZD/Fc3IndZuCOOJgFxJsWOxDkhfVcwLbsfh2CdXE2tG4jWxBZuDAs9J9PzRTUFt1PgydEtItw==
dependencies:
"@vue/runtime-core" "3.4.24"
"@vue/shared" "3.4.24"
"@vue/runtime-core" "3.4.26"
"@vue/shared" "3.4.26"
csstype "^3.1.3"
"@vue/server-renderer@3.4.24":
version "3.4.24"
resolved "https://registry.yarnpkg.com/@vue/server-renderer/-/server-renderer-3.4.24.tgz#80dd546f8d6a9f5c4f8b68083fe9cc2d62299332"
integrity sha512-H+DLK4sQF6sRgzKyofmlEVBIV/9KrQU6HIV7nt6yIwSGGKvSwlV8pqJlebUKLpbXaNHugdSfAbP6YmXF69lxow==
"@vue/server-renderer@3.4.26":
version "3.4.26"
resolved "https://registry.yarnpkg.com/@vue/server-renderer/-/server-renderer-3.4.26.tgz#6d0c6b0366bfe0232579aea00e3ff6784e5a1c60"
integrity sha512-xoGAqSjYDPGAeRWxeoYwqJFD/gw7mpgzOvSxEmjWaFO2rE6qpbD1PC172YRpvKhrihkyHJkNDADFXTfCyVGhKw==
dependencies:
"@vue/compiler-ssr" "3.4.24"
"@vue/shared" "3.4.24"
"@vue/compiler-ssr" "3.4.26"
"@vue/shared" "3.4.26"
"@vue/shared@3.4.24", "@vue/shared@^3.3.0":
version "3.4.24"
resolved "https://registry.yarnpkg.com/@vue/shared/-/shared-3.4.24.tgz#278ac71f492b392b9b17fe8fc7d324db1a8842db"
integrity sha512-BW4tajrJBM9AGAknnyEw5tO2xTmnqgup0VTnDAMcxYmqOX0RG0b9aSUGAbEKolD91tdwpA6oCwbltoJoNzpItw==
"@vue/shared@3.4.26", "@vue/shared@^3.3.0":
version "3.4.26"
resolved "https://registry.yarnpkg.com/@vue/shared/-/shared-3.4.26.tgz#f17854fb1faf889854aed4b23b60e86a8cab6403"
integrity sha512-Fg4zwR0GNnjzodMt3KRy2AWGMKQXByl56+4HjN87soxLNU9P5xcJkstAlIeEF3cU6UYOzmJl1tV0dVPGIljCnQ==
"@vue/test-utils@^2.2.4":
version "2.4.5"
@@ -2268,9 +2263,9 @@ camelcase@^6.2.0:
integrity sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA==
caniuse-lite@^1.0.30001587:
version "1.0.30001612"
resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30001612.tgz#d34248b4ec1f117b70b24ad9ee04c90e0b8a14ae"
integrity sha512-lFgnZ07UhaCcsSZgWW0K5j4e69dK1u/ltrL9lTUiFOwNHs12S3UMIEYgBV0Z6C6hRDev7iRnMzzYmKabYdXF9g==
version "1.0.30001615"
resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30001615.tgz#7c2c8772db681b6dee74d81d6550db68f2d28842"
integrity sha512-1IpazM5G3r38meiae0bHRnPhz+CBQ3ZLqbQMtrg+AsTPKAXgW38JNsXkyZ+v8waCsDmPq87lmfun5Q2AGysNEQ==
caseless@~0.12.0:
version "0.12.0"
@@ -2375,9 +2370,9 @@ ci-info@^3.2.0:
integrity sha512-NIxF55hv4nSqQswkAeiOi1r83xy8JldOFDTWiug55KBu9Jnblncd2U6ViHmYgHf01TPZS77NJBhBMKdWj9HQMQ==
cjs-module-lexer@^1.0.0:
version "1.2.3"
resolved "https://registry.yarnpkg.com/cjs-module-lexer/-/cjs-module-lexer-1.2.3.tgz#6c370ab19f8a3394e318fe682686ec0ac684d107"
integrity sha512-0TNiGstbQmCFwt4akjjBg5pLRTSyj/PkWQ1ZoO2zntmg9yLqSRxwEa4iCfQLGjqhiqBfOJa7W/E8wfGrTDmlZQ==
version "1.3.1"
resolved "https://registry.yarnpkg.com/cjs-module-lexer/-/cjs-module-lexer-1.3.1.tgz#c485341ae8fd999ca4ee5af2d7a1c9ae01e0099c"
integrity sha512-a3KdPAANPbNE4ZUv9h6LckSl9zLsYOP4MBmhIPkRaeyybt+r4UghLvq+xw/YwUcC1gqylCkL4rdVs3Lwupjm4Q==
clean-css@^5.2.2:
version "5.3.3"
@@ -2751,9 +2746,9 @@ date-fns@^2.16.1:
"@babel/runtime" "^7.21.0"
dayjs@^1.10.4:
version "1.11.10"
resolved "https://registry.yarnpkg.com/dayjs/-/dayjs-1.11.10.tgz#68acea85317a6e164457d6d6947564029a6a16a0"
integrity sha512-vjAczensTgRcqDERK0SR2XMwsF/tSvnvlv6VcF2GIhg6Sx4yOIt/irsr1RDJsKiIyBzJDpCoXiWWq28MqH2cnQ==
version "1.11.11"
resolved "https://registry.yarnpkg.com/dayjs/-/dayjs-1.11.11.tgz#dfe0e9d54c5f8b68ccf8ca5f72ac603e7e5ed59e"
integrity sha512-okzr3f11N6WuqYtZSvm+F776mB41wRZMhKP+hc34YdW+KmtYYK9iqvHSwo2k9FEH3fhGXvOPV6yz2IcSrfRUDg==
de-indent@^1.0.2:
version "1.0.2"
@@ -2829,7 +2824,7 @@ define-lazy-prop@^2.0.0:
resolved "https://registry.yarnpkg.com/define-lazy-prop/-/define-lazy-prop-2.0.0.tgz#3f7ae421129bcaaac9bc74905c98a0009ec9ee7f"
integrity sha512-Ds09qNh8yw3khSjiJjiUInaGX9xlqZDY7JVryGxdxV7NPeuqQfplOpQ66yJFZut3jLa5zOwkXw1g9EI2uKh4Og==
define-properties@^1.1.3, define-properties@^1.2.0, define-properties@^1.2.1:
define-properties@^1.2.0, define-properties@^1.2.1:
version "1.2.1"
resolved "https://registry.yarnpkg.com/define-properties/-/define-properties-1.2.1.tgz#10781cc616eb951a80a034bafcaa7377f6af2b6c"
integrity sha512-8QmQKqEASLd5nx0U1B1okLElbUuuttJ/AnYmRXbbbGDWh6uS208EjD4Xqq/I9wK7u0v6O08XhTWnt5XtEbR6Dg==
@@ -3033,9 +3028,9 @@ ejs@^3.1.6:
jake "^10.8.5"
electron-to-chromium@^1.4.668:
version "1.4.746"
resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.4.746.tgz#787213e75f6c7bccb55dfe8b68170555c548d093"
integrity sha512-jeWaIta2rIG2FzHaYIhSuVWqC6KJYo7oSBX4Jv7g+aVujKztfvdpf+n6MGwZdC5hQXbax4nntykLH2juIQrfPg==
version "1.4.754"
resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.4.754.tgz#20a9f3cc80e0fb6a804b86605e55da16918a58b0"
integrity sha512-7Kr5jUdns5rL/M9wFFmMZAgFDuL2YOnanFH4OI4iFzUqyh3XOL7nAGbSlSMZdzKMIyyTpNSbqZsWG9odwLeKvA==
emittery@^0.13.1:
version "0.13.1"
@@ -3169,9 +3164,9 @@ es-errors@^1.2.1, es-errors@^1.3.0:
integrity sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw==
es-module-lexer@^1.2.1:
version "1.5.0"
resolved "https://registry.yarnpkg.com/es-module-lexer/-/es-module-lexer-1.5.0.tgz#4878fee3789ad99e065f975fdd3c645529ff0236"
integrity sha512-pqrTKmwEIgafsYZAGw9kszYzmagcE/n4dbgwGWLEXg7J4QFJVQRBld8j3Q3GNez79jzxZshq0bcT962QHOghjw==
version "1.5.2"
resolved "https://registry.yarnpkg.com/es-module-lexer/-/es-module-lexer-1.5.2.tgz#00b423304f2500ac59359cc9b6844951f372d497"
integrity sha512-l60ETUTmLqbVbVHv1J4/qj+M8nq7AwMzEcg3kmJDt9dCNrTk+yHcYFf/Kw75pMDwd9mPcIGCG5LcS20SxYRzFA==
es-object-atoms@^1.0.0:
version "1.0.0"
@@ -3361,7 +3356,7 @@ esbuild@^0.18.10:
"@esbuild/win32-ia32" "0.18.20"
"@esbuild/win32-x64" "0.18.20"
escalade@^3.1.1:
escalade@^3.1.1, escalade@^3.1.2:
version "3.1.2"
resolved "https://registry.yarnpkg.com/escalade/-/escalade-3.1.2.tgz#54076e9ab29ea5bf3d8f1ed62acffbb88272df27"
integrity sha512-ErCHMCae19vR8vQGe50xIsVomy19rg6gFu3+r3jkEO46suLMWBksvVyoGgQV+jOfl84ZSOSlmv6Gxa89PmTGmA==
@@ -3924,9 +3919,9 @@ fs-extra@^9.0.0, fs-extra@^9.1.0:
universalify "^2.0.0"
fs-monkey@^1.0.4:
version "1.0.5"
resolved "https://registry.yarnpkg.com/fs-monkey/-/fs-monkey-1.0.5.tgz#fe450175f0db0d7ea758102e1d84096acb925788"
integrity sha512-8uMbBjrhzW76TYgEV27Y5E//W2f/lTFmx78P2w19FZSxarhI/798APGQyuGCwmkNxgwGRhrLfvWyLBvNtuOmew==
version "1.0.6"
resolved "https://registry.yarnpkg.com/fs-monkey/-/fs-monkey-1.0.6.tgz#8ead082953e88d992cf3ff844faa907b26756da2"
integrity sha512-b1FMfwetIKymC0eioW7mTywihSQE4oLzQn1dB6rZB5fx/3NpNEdAWeCSMB+60/AeT0TCXsxzAlcYVEFCTAksWg==
fs.realpath@^1.0.0:
version "1.0.0"
@@ -3968,10 +3963,10 @@ geojson-vt@^3.2.1:
resolved "https://registry.yarnpkg.com/geojson-vt/-/geojson-vt-3.2.1.tgz#f8adb614d2c1d3f6ee7c4265cad4bbf3ad60c8b7"
integrity sha512-EvGQQi/zPrDA6zr6BnJD/YhwAkBP8nnJ9emh3EnHQKVMfg/MRVtPbMYdgVy/IaEmn4UfagD2a6fafPDL5hbtwg==
geovisio@2.5.1-develop-3e498d46:
version "2.5.1-develop-3e498d46"
resolved "https://registry.yarnpkg.com/geovisio/-/geovisio-2.5.1-develop-3e498d46.tgz#5122cc239771dc52bb6e887b83c8f4eee3504239"
integrity sha512-HzO9PIx1uAJNtYz0FtKnBKWLVB7Ipy7EmLYOM/wrPDB8rFVA0u7o4Ihhk8TpqpvKrW/5mIBwm2xzIp7in5O7Mw==
geovisio@3.0.0-develop-28e7fdc1:
version "3.0.0-develop-28e7fdc1"
resolved "https://registry.yarnpkg.com/geovisio/-/geovisio-3.0.0-develop-28e7fdc1.tgz#0160cc28d0ffd81edd1f65d97620ee23d5ba262e"
integrity sha512-s4dR7nHuC0hNB+GPio8yBxOFjGQh7RoeJJprQHGw+IXTPnHOgZTabKAHX9vsr8LFcgadmcNwiZyNlVjrvPFvZA==
dependencies:
"@fortawesome/fontawesome-svg-core" "^6.4.0"
"@fortawesome/free-solid-svg-icons" "^6.4.0"
@@ -4181,11 +4176,12 @@ globals@^13.19.0, globals@^13.24.0:
type-fest "^0.20.2"
globalthis@^1.0.3:
version "1.0.3"
resolved "https://registry.yarnpkg.com/globalthis/-/globalthis-1.0.3.tgz#5852882a52b80dc301b0660273e1ed082f0b6ccf"
integrity sha512-sFdI5LyBiNTHjRd7cGPWapiHWMOXKyuBNX/cWJ3NfzrZQVa8GI/8cofCl74AOVqq9W5kNmguTIzJ/1s2gyI9wA==
version "1.0.4"
resolved "https://registry.yarnpkg.com/globalthis/-/globalthis-1.0.4.tgz#7430ed3a975d97bfb59bcce41f5cabbafa651236"
integrity sha512-DpLKbNU4WylpxJykQujfCcwYWiV/Jhm50Goo0wrVILAv5jOr9d+H+UR3PhSCD2rCCEIg0uc+G+muBTwD54JhDQ==
dependencies:
define-properties "^1.1.3"
define-properties "^1.2.1"
gopd "^1.0.1"
globby@^11.0.2, globby@^11.1.0:
version "11.1.0"
@@ -5262,9 +5258,9 @@ jest@^29.6.4:
jest-cli "^29.7.0"
joi@^17.4.0:
version "17.13.0"
resolved "https://registry.yarnpkg.com/joi/-/joi-17.13.0.tgz#b6f340b8029ee7af2397f821d17a4f03bf34b043"
integrity sha512-9qcrTyoBmFZRNHeVP4edKqIUEgFzq7MHvTNSDuHSqkpOPtiBkgNgcmTSqmiw1kw9tdKaiddvIDv/eCJDxmqWCA==
version "17.13.1"
resolved "https://registry.yarnpkg.com/joi/-/joi-17.13.1.tgz#9c7b53dc3b44dd9ae200255cc3b398874918a6ca"
integrity sha512-vaBlIKCyo4FCUtCm7Eu4QZd/q02bWcxfUO6YSXAZOWF6gzcLBeba8kwotUdYJjDLW8Cz8RywsSOqiNJZW0mNvg==
dependencies:
"@hapi/hoek" "^9.3.0"
"@hapi/topo" "^5.1.0"
@@ -5631,9 +5627,9 @@ lower-case@^2.0.2:
tslib "^2.0.3"
lru-cache@^10.2.0:
version "10.2.0"
resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-10.2.0.tgz#0bd445ca57363465900f4d1f9bd8db343a4d95c3"
integrity sha512-2bIM8x+VAf6JT4bKAljS1qUWgMsqZRPGJS6FSahIMPVvctcNhyVp7AJu7quxOW9jwkryBReKZY5tY5JYv2n/7Q==
version "10.2.2"
resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-10.2.2.tgz#48206bc114c1252940c41b25b41af5b545aca878"
integrity sha512-9hp3Vp2/hFQUiIwKo8XCeFVnrg8Pk3TYNPIR7tJADKi5YfcF7vEaK7avFHTlSy3kOKYaJQaalfEo6YuXdceBOQ==
lru-cache@^5.1.1:
version "5.1.1"
@@ -6498,16 +6494,16 @@ open@^8.0.2:
is-wsl "^2.2.0"
optionator@^0.9.3:
version "0.9.3"
resolved "https://registry.yarnpkg.com/optionator/-/optionator-0.9.3.tgz#007397d44ed1872fdc6ed31360190f81814e2c64"
integrity sha512-JjCoypp+jKn1ttEFExxhetCKeJt9zhAgAve5FXHixTvFDW/5aEktX9bufBKLRRMdU7bNtpLfcGu94B3cdEJgjg==
version "0.9.4"
resolved "https://registry.yarnpkg.com/optionator/-/optionator-0.9.4.tgz#7ea1c1a5d91d764fb282139c88fe11e182a3a734"
integrity sha512-6IpQ7mKUxRcZNLIObR0hz7lxsapSSIYNZJwXPGeF0mTVqGKFIXj1DQcMoT22S3ROcLyY/rz0PWaWZ9ayWmad9g==
dependencies:
"@aashutoshrathi/word-wrap" "^1.2.3"
deep-is "^0.1.3"
fast-levenshtein "^2.0.6"
levn "^0.4.1"
prelude-ls "^1.2.1"
type-check "^0.4.0"
word-wrap "^1.2.5"
ora@^5.3.0:
version "5.4.1"
@@ -6990,9 +6986,9 @@ randombytes@^2.1.0:
safe-buffer "^5.1.0"
react-is@^18.0.0:
version "18.2.0"
resolved "https://registry.yarnpkg.com/react-is/-/react-is-18.2.0.tgz#199431eeaaa2e09f86427efbb4f1473edb47609b"
integrity sha512-xWGDIW6x921xtzPkhiULtthJHoJvBbF3q26fzloPCK0hsvxtPVelvftw3zjbHWSkR2km9Z+4uxbDDK/6Zw9B8w==
version "18.3.1"
resolved "https://registry.yarnpkg.com/react-is/-/react-is-18.3.1.tgz#e83557dc12eae63a99e003a46388b1dcbb44db7e"
integrity sha512-/LLMVyas0ljjAtoYiPqYiL8VWXzUUdThrmU5+n20DZv+a+ClRoevUzw5JxU+Ieh5/c87ytoTBV9G1FiKfNJdmg==
read-pkg-up@^9.1.0:
version "9.1.0"
@@ -7290,9 +7286,9 @@ safe-regex-test@^1.0.3:
integrity sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==
sass@^1.62.0:
version "1.75.0"
resolved "https://registry.yarnpkg.com/sass/-/sass-1.75.0.tgz#91bbe87fb02dfcc34e052ddd6ab80f60d392be6c"
integrity sha512-ShMYi3WkrDWxExyxSZPst4/okE9ts46xZmJDSawJQrnte7M1V9fScVB+uNXOVKRBt0PggHOwoZcn8mYX4trnBw==
version "1.76.0"
resolved "https://registry.yarnpkg.com/sass/-/sass-1.76.0.tgz#fe15909500735ac154f0dc7386d656b62b03987d"
integrity sha512-nc3LeqvF2FNW5xGF1zxZifdW3ffIz5aBb7I7tSvOoNu7z1RQ6pFt9MBuiPtjgaI62YWrM/txjWlOCFiGtf2xpw==
dependencies:
chokidar ">=3.0.0 <4.0.0"
immutable "^4.0.0"
@@ -7596,7 +7592,16 @@ string-length@^4.0.1:
char-regex "^1.0.2"
strip-ansi "^6.0.0"
"string-width-cjs@npm:string-width@^4.2.0", string-width@^4.1.0, string-width@^4.2.0, string-width@^4.2.3:
"string-width-cjs@npm:string-width@^4.2.0":
version "4.2.3"
resolved "https://registry.yarnpkg.com/string-width/-/string-width-4.2.3.tgz#269c7117d27b05ad2e536830a8ec895ef9c6d010"
integrity sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==
dependencies:
emoji-regex "^8.0.0"
is-fullwidth-code-point "^3.0.0"
strip-ansi "^6.0.1"
string-width@^4.1.0, string-width@^4.2.0, string-width@^4.2.3:
version "4.2.3"
resolved "https://registry.yarnpkg.com/string-width/-/string-width-4.2.3.tgz#269c7117d27b05ad2e536830a8ec895ef9c6d010"
integrity sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==
@@ -7667,7 +7672,14 @@ stringify-entities@^4.0.0:
character-entities-html4 "^2.0.0"
character-entities-legacy "^3.0.0"
"strip-ansi-cjs@npm:strip-ansi@^6.0.1", strip-ansi@^6.0.0, strip-ansi@^6.0.1:
"strip-ansi-cjs@npm:strip-ansi@^6.0.1":
version "6.0.1"
resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-6.0.1.tgz#9e26c63d30f53443e9489495b2105d37b67a85d9"
integrity sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==
dependencies:
ansi-regex "^5.0.1"
strip-ansi@^6.0.0, strip-ansi@^6.0.1:
version "6.0.1"
resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-6.0.1.tgz#9e26c63d30f53443e9489495b2105d37b67a85d9"
integrity sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==
@@ -7783,9 +7795,9 @@ terser-webpack-plugin@^5.3.10:
terser "^5.26.0"
terser@^5.10.0, terser@^5.26.0, terser@^5.30.4:
version "5.30.4"
resolved "https://registry.yarnpkg.com/terser/-/terser-5.30.4.tgz#62b4d16a819424e6317fd5ceffb4ee8dc769803a"
integrity sha512-xRdd0v64a8mFK9bnsKVdoNP9GQIKUAaJPTaqEQDL4w/J8WaW4sWXXoMZ+6SimPkfT5bElreXf8m9HnmPc3E1BQ==
version "5.31.0"
resolved "https://registry.yarnpkg.com/terser/-/terser-5.31.0.tgz#06eef86f17007dbad4593f11a574c7f5eb02c6a1"
integrity sha512-Q1JFAoUKE5IMfI4Z/lkE/E6+SwgzO+x4tq4v1AyBLRj8VSYvRO6A/rQrPg1yud4g0En9EKI1TvFRF2tQFcoUkg==
dependencies:
"@jridgewell/source-map" "^0.3.3"
acorn "^8.8.2"
@@ -7875,9 +7887,9 @@ to-regex-range@^5.0.1:
is-number "^7.0.0"
tough-cookie@^4.1.2, tough-cookie@^4.1.3:
version "4.1.3"
resolved "https://registry.yarnpkg.com/tough-cookie/-/tough-cookie-4.1.3.tgz#97b9adb0728b42280aa3d814b6b999b2ff0318bf"
integrity sha512-aX/y5pVRkfRnfmuX+OdbSdXvPe6ieKX/G2s7e98f4poJHnqH3281gDPm/metm6E/WRamfx7WC4HUqkWHfQHprw==
version "4.1.4"
resolved "https://registry.yarnpkg.com/tough-cookie/-/tough-cookie-4.1.4.tgz#945f1461b45b5a8c76821c33ea49c3ac192c1b36"
integrity sha512-Loo5UUvLD9ScZ6jh8beX1T6sO1w2/MpCRpEP7V280GKMVUQ0Jzar2U3UJPsrdbziLEMMhu3Ujnq//rhiFuIeag==
dependencies:
psl "^1.1.33"
punycode "^2.1.1"
@@ -8158,11 +8170,11 @@ untildify@^4.0.0:
integrity sha512-KK8xQ1mkzZeg9inewmFVDNkg3l5LUhoq9kN6iWYB/CC9YMG8HA+c1Q8HwDe6dEX7kErrEVNVBO3fWsVq5iDgtw==
update-browserslist-db@^1.0.13:
version "1.0.13"
resolved "https://registry.yarnpkg.com/update-browserslist-db/-/update-browserslist-db-1.0.13.tgz#3c5e4f5c083661bd38ef64b6328c26ed6c8248c4"
integrity sha512-xebP81SNcPuNpPP3uzeW1NYXxI3rxyJzF3pD6sH4jE7o/IX+WtSpwnVU+qIsDPyk0d3hmFQ7mjqc6AtV604hbg==
version "1.0.14"
resolved "https://registry.yarnpkg.com/update-browserslist-db/-/update-browserslist-db-1.0.14.tgz#46a9367c323f8ade9a9dddb7f3ae7814b3a0b31c"
integrity sha512-JixKH8GR2pWYshIPUg/NujK3JO7JiqEEUiNArE86NQyrgUuZeTlZQN3xuS/yiV5Kb48ev9K6RqNkaJjXsdg7Jw==
dependencies:
escalade "^3.1.1"
escalade "^3.1.2"
picocolors "^1.0.0"
uri-js@^4.2.2:
@@ -8379,9 +8391,9 @@ vue-axios@^3.5.2:
integrity sha512-GP+dct7UlAWkl1qoP3ppw0z6jcSua5/IrMpjB5O8bh089iIiJ+hdxPYH2NPEpajlYgkW5EVMP95ttXWdas1O0g==
vue-component-type-helpers@^2.0.0:
version "2.0.14"
resolved "https://registry.yarnpkg.com/vue-component-type-helpers/-/vue-component-type-helpers-2.0.14.tgz#8030ddb73fe9229c764c02edbd2d4d1ead234e30"
integrity sha512-DInfgOyXlMyliyqAAD9frK28tTfch0+tMi4qoWJcZlRxUf+NFAtraJBnAsKLep+FOyLMiajkhfyEb3xLK08i7w==
version "2.0.16"
resolved "https://registry.yarnpkg.com/vue-component-type-helpers/-/vue-component-type-helpers-2.0.16.tgz#bfdb9cba265dca097b0f3411baeae879e008c33d"
integrity sha512-qisL/iAfdO++7w+SsfYQJVPj6QKvxp4i1MMxvsNO41z/8zu3KuAw9LkhKUfP/kcOWGDxESp+pQObWppXusejCA==
vue-demi@>=0.14.5, vue-demi@>=0.14.7:
version "0.14.7"
@@ -8470,15 +8482,15 @@ vue3-smooth-scroll@^0.8.1:
integrity sha512-9EN1aiBT2RtkIe1MoGiyGjUoLmqmlJ96R9/QVCylaiurHQ7oGu1SPzEoGJyxdhCa1q3qyMcX/pne1oTAn1UaoQ==
vue@^3.0.0, vue@^3.4.21:
version "3.4.24"
resolved "https://registry.yarnpkg.com/vue/-/vue-3.4.24.tgz#f269549939a6c092480f018aa0bd886ba64f4c6f"
integrity sha512-NPdx7dLGyHmKHGRRU5bMRYVE+rechR+KDU5R2tSTNG36PuMwbfAJ+amEvOAw7BPfZp5sQulNELSLm5YUkau+Sg==
version "3.4.26"
resolved "https://registry.yarnpkg.com/vue/-/vue-3.4.26.tgz#936c97e37672c737705d7bdfa62c31af18742269"
integrity sha512-bUIq/p+VB+0xrJubaemrfhk1/FiW9iX+pDV+62I/XJ6EkspAO9/DXEjbDFoe8pIfOZBqfk45i9BMc41ptP/uRg==
dependencies:
"@vue/compiler-dom" "3.4.24"
"@vue/compiler-sfc" "3.4.24"
"@vue/runtime-dom" "3.4.24"
"@vue/server-renderer" "3.4.24"
"@vue/shared" "3.4.24"
"@vue/compiler-dom" "3.4.26"
"@vue/compiler-sfc" "3.4.26"
"@vue/runtime-dom" "3.4.26"
"@vue/server-renderer" "3.4.26"
"@vue/shared" "3.4.26"
w3c-xmlserializer@^4.0.0:
version "4.0.0"
@@ -8623,7 +8635,12 @@ which@^2.0.1:
dependencies:
isexe "^2.0.0"
"wrap-ansi-cjs@npm:wrap-ansi@^7.0.0", wrap-ansi@^7.0.0:
word-wrap@^1.2.5:
version "1.2.5"
resolved "https://registry.yarnpkg.com/word-wrap/-/word-wrap-1.2.5.tgz#d2c45c6dd4fbce621a66f136cbe328afd0410b34"
integrity sha512-BN22B5eaMMI9UMtjrGd5g5eCYPpCPDUy0FJXbYsaT5zYxjFOckS53SQDE3pWkVoWpHXVb3BrYcEN4Twa55B5cA==
"wrap-ansi-cjs@npm:wrap-ansi@^7.0.0":
version "7.0.0"
resolved "https://registry.yarnpkg.com/wrap-ansi/-/wrap-ansi-7.0.0.tgz#67e145cff510a6a6984bdf1152911d69d2eb9e43"
integrity sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==
@@ -8641,6 +8658,15 @@ wrap-ansi@^6.2.0:
string-width "^4.1.0"
strip-ansi "^6.0.0"
wrap-ansi@^7.0.0:
version "7.0.0"
resolved "https://registry.yarnpkg.com/wrap-ansi/-/wrap-ansi-7.0.0.tgz#67e145cff510a6a6984bdf1152911d69d2eb9e43"
integrity sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==
dependencies:
ansi-styles "^4.0.0"
string-width "^4.1.0"
strip-ansi "^6.0.0"
wrap-ansi@^8.1.0:
version "8.1.0"
resolved "https://registry.yarnpkg.com/wrap-ansi/-/wrap-ansi-8.1.0.tgz#56dc22368ee570face1b49819975d9b9a5ead214"
@@ -8664,9 +8690,9 @@ write-file-atomic@^4.0.2:
signal-exit "^3.0.7"
ws@^8.11.0:
version "8.16.0"
resolved "https://registry.yarnpkg.com/ws/-/ws-8.16.0.tgz#d1cd774f36fbc07165066a60e40323eab6446fd4"
integrity sha512-HS0c//TP7Ina87TfiPUz1rQzMhHrl/SG2guqRcTOIUYD2q8uhUdNHZYJUaQ8aTGPzCh+c6oawMKW35nFl1dxyQ==
version "8.17.0"
resolved "https://registry.yarnpkg.com/ws/-/ws-8.17.0.tgz#d145d18eca2ed25aaf791a183903f7be5e295fea"
integrity sha512-uJq6108EgZMAl20KagGkzCKfMEjxmKvZHG7Tlq0Z6nOky7YF7aq4mOx6xK8TJ/i1LeK4Qus7INktacctDgY8Ow==
xml-name-validator@^4.0.0:
version "4.0.0"