From db6161adcf520cec49e2061c2c5956f82ab2bc28 Mon Sep 17 00:00:00 2001 From: 1z2 Date: Thu, 3 Nov 2022 03:34:50 +0100 Subject: [PATCH 1/7] Working Map --- src/main.ts | 162 +++++++++++++++++++- src/map_monochrome.svg | 330 +++++++++++++++++++++++++++++++++++++++++ src/regions.json | 62 ++++++++ src/style.css | 39 +++-- 4 files changed, 577 insertions(+), 16 deletions(-) create mode 100644 src/map_monochrome.svg create mode 100644 src/regions.json diff --git a/src/main.ts b/src/main.ts index 7f885fe..09b57e7 100644 --- a/src/main.ts +++ b/src/main.ts @@ -1,7 +1,157 @@ -import './style.css' +import "./style.css"; +import map from "./map_monochrome.svg"; +import regionData from "./regions.json"; -document.querySelector('#app')!.innerHTML = ` -
- Work In Progress -
-` +document.querySelector("#app")!.innerHTML = ` +

Listenbourg

+
+ + +`; + +type RegionName = keyof typeof regionData; + +/** + * Function to get the color of a given region + */ +function getRegionColor(regionName: RegionName) { + return regionData[regionName].color; +} + +function getDepartmentName(id: number): string { + for (const [, { departments }] of Object.entries(regionData)) + for (const department of departments) + if (department[0] === id) return department[1] as string; + return ""; +} + +/** + * Function to get the region of a given departement number + */ +function getRegion(id: number) { + for (const [name, { departments }] of Object.entries(regionData)) + if (departments.map((d) => d[0]).includes(id)) return name; + return undefined; +} + +function setActiveRegion(regionName: RegionName, svgObject: Document) { + let regionColor = getRegionColor(regionName as RegionName); + for (const department of regionData[regionName].departments) { + let departmentGroup = svgObject.getElementById(String(department[0])); + let departmentPath = departmentGroup?.querySelector("path"); + + if (departmentPath) { + departmentPath.style.fill = regionColor; + } + } +} + +function setInactiveRegion(regionName: RegionName, svgObject: Document) { + for (const department of regionData[regionName].departments) { + let departmentGroup = svgObject.getElementById(String(department[0])); + let departmentPath = departmentGroup?.querySelector("path"); + + if (departmentPath) { + departmentPath.style.fill = "#D6D6D6"; + } + } +} + +function toggleTooltip( + e: MouseEvent, + regionName: string, + departmentName: string +) { + let tooltip = document.querySelector(".region-name") as HTMLDivElement; + tooltip.innerHTML = `${departmentName} (${regionName})`; + tooltip.style.left = e.pageX + 225 + "px"; + tooltip.style.top = e.pageY + 25 + "px"; + tooltip.style.display = "block"; +} + +/** + * Function to get a lighten color of given + */ +function lighten(color: string) { + let r = Math.min( + 255, + Math.round(parseInt(color.substring(1, 3), 16) * 1.2) + ).toString(16); + let g = Math.min( + 255, + Math.round(parseInt(color.substring(3, 5), 16) * 1.2) + ).toString(16); + let b = Math.min( + 255, + Math.round(parseInt(color.substring(5, 7), 16) * 1.2) + ).toString(16); + r = r.length == 1 ? "0" + r : r; + g = g.length == 1 ? "0" + g : g; + b = b.length == 1 ? "0" + b : b; + return "#" + r + g + b; +} + +window.addEventListener("load", () => { + const svgObject = document.querySelector("object")!.contentDocument!; + const departments = svgObject.querySelectorAll("g"); + const regionNameDiv = document.querySelector( + ".region-name" + ) as HTMLDivElement; + + let hoveredRegion: RegionName | undefined = undefined; + let hoveredDepartment: string | undefined = undefined; + + svgObject.addEventListener("mousemove", (e) => { + let hovered = false; + departments.forEach((d) => { + if (d.querySelector("path")!.matches(":hover")) hovered = true; + }); + if (!hovered) { + regionNameDiv.style.display = "none"; + } else if (hoveredRegion && hoveredDepartment) { + toggleTooltip(e, hoveredRegion, hoveredDepartment); + } + }); + + departments.forEach((departement) => { + const path = departement.querySelector("path")!; + const departmentName = getDepartmentName(parseInt(departement.id)); + const regionName = getRegion(parseInt(departement.id))!; + const regionColor = getRegionColor(regionName as RegionName); + + path.style.transition = "fill 0.25s ease"; + + path.addEventListener("mouseenter", () => { + setActiveRegion(regionName as RegionName, svgObject); + path.style.fill = lighten(regionColor); + hoveredRegion = regionName as RegionName; + hoveredDepartment = departmentName; + }); + + path.addEventListener("mouseleave", () => { + setInactiveRegion(regionName as RegionName, svgObject); + }); + + path.addEventListener("click", () => { + regionNameDiv.innerHTML = `${departmentName} (${regionName})`; + }); + }); +}); + +// Ressources : +// https://www.petercollingridge.co.uk/tutorials/svg/interactive/javascript/ + +// Gérer différents espaces : régions / départements ✓ + +// Gérer les infos liées aux régions <==== + +// Gérer l'affichage d'un point pour les villes + +// Gérer le fait de sélectionner une ville + +// Afficher les infos d'une ville + +// Afficher les routes principales (réseau routier autoroutes, train) + +// Afficher des lieux spéciaux (aéroport...) diff --git a/src/map_monochrome.svg b/src/map_monochrome.svg new file mode 100644 index 0000000..26cc9d4 --- /dev/null +++ b/src/map_monochrome.svg @@ -0,0 +1,330 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/regions.json b/src/regions.json new file mode 100644 index 0000000..5da4c3b --- /dev/null +++ b/src/regions.json @@ -0,0 +1,62 @@ +{ + "Flußerde": { + "color": "#d17dd4", + "departments": [ + [26, "Frinterland"], + [27, "Jesusarh"], + [28, "Fisherein"], + [29, "Maarland"], + [30, "Centiertflußland"], + [31, "Talwortes"], + [32, "Kanalerde"] + ] + }, + "Kusterde": { + "color": "#30c968", + "departments": [ + [22, "Auseburg"], + [23, "Mornland"], + [24, "Wasserland"], + [25, "Kleinland"], + [33, "Virgolkust"], + [34, "Bachßland"], + [35, "Strander"] + ] + }, + "Mitteland": { + "color": "#ccfa78", + "departments": [ + [1, "Äußeres Galizien"], + [2, "Geldland"], + [3, "Oliveweißland"], + [4, "Chrüterkraft"], + [5, "Missbalder"], + [6, "Centürland"], + [7, "Herkunftland"], + [8, "Langerde"], + [9, "Siegesschlucht"], + [10, "Aschenbach"], + [11, "Serishluss"], + [12, "Lichtenland"], + [13, "Achlußluss"] + ] + }, + "Caséière": { + "color": "#3b8dc4", + "departments": [ + [14, "Carmenle"], + [15, "Franquette"], + [16, "Portaière"] + ] + }, + "Adriàs": { + "color": "#eb4034", + "departments": [ + [17, "Adriàs Norte"], + [18, "Adriàs Sur"], + [19, "La pequeña"], + [20, "Ardentia"], + [21, "Llamas Costilla"] + ] + } +} \ No newline at end of file diff --git a/src/style.css b/src/style.css index bf0cf15..e9b3811 100644 --- a/src/style.css +++ b/src/style.css @@ -1,17 +1,36 @@ html, body, #app { - width: 100vw; - height: 100vh; - padding: 0; - margin: 0; + width: 100vw; + height: 100vh; + padding: 0; + margin: 0; + overflow: hidden; } #app { - display: flex; - justify-content: center; - align-items: center; - font-family: 'Source Serif 4', serif; + font-family: 'Source Serif 4', serif; + display: flex; + flex-direction: column; + align-items: center; + background-color: #b6d9f0; } -.wip { - font-size: 2em; +h1 { + font-size: 2.5em; + margin: 5px; +} + +.region-name { + position: absolute; + font-size: 1.3em; + margin: 0; + padding: 3px 12px; + background-color: rgba(0, 0, 0, .6); + color: white; + user-select: none; + border-radius: 8px; + display: none; +} + +object { + height: 100%; } From 6a798a282d8d9601edc65be6160fd6c3aecba2db Mon Sep 17 00:00:00 2001 From: 1z2 Date: Thu, 3 Nov 2022 17:11:59 +0100 Subject: [PATCH 2/7] Bug fixes + header --- index.html | 5 +- package.json | 2 +- src/{ => assets}/map_monochrome.svg | 0 src/{ => assets}/regions.json | 0 src/assets/style.css | 68 ++++++++++ src/color.ts | 22 ++++ src/main.ts | 190 +++++++++++----------------- src/regions.ts | 42 ++++++ src/style.css | 36 ------ src/tooltip.ts | 24 ++++ 10 files changed, 232 insertions(+), 157 deletions(-) rename src/{ => assets}/map_monochrome.svg (100%) rename src/{ => assets}/regions.json (100%) create mode 100644 src/assets/style.css create mode 100644 src/color.ts create mode 100644 src/regions.ts delete mode 100644 src/style.css create mode 100644 src/tooltip.ts diff --git a/index.html b/index.html index c1a046d..ecd283a 100644 --- a/index.html +++ b/index.html @@ -3,12 +3,13 @@ - Listenbourg Map + Listenbourg Maps - + +
diff --git a/package.json b/package.json index 607fc4f..a4084e1 100644 --- a/package.json +++ b/package.json @@ -4,7 +4,7 @@ "version": "0.0.0", "type": "module", "scripts": { - "dev": "vite", + "dev": "vite --host", "build": "tsc && vite build", "preview": "vite preview" }, diff --git a/src/map_monochrome.svg b/src/assets/map_monochrome.svg similarity index 100% rename from src/map_monochrome.svg rename to src/assets/map_monochrome.svg diff --git a/src/regions.json b/src/assets/regions.json similarity index 100% rename from src/regions.json rename to src/assets/regions.json diff --git a/src/assets/style.css b/src/assets/style.css new file mode 100644 index 0000000..0963066 --- /dev/null +++ b/src/assets/style.css @@ -0,0 +1,68 @@ +html, body, #app { + width: 100vw; + height: 100vh; + padding: 0; + margin: 0; + overflow: hidden; +} + +#app { + font-family: 'Source Serif 4', serif; + display: flex; + flex-direction: column; +} + +header { + background-color: rgba(255, 255, 255, .4); + border-bottom: 1px solid #ebebeb; + height: 80px; + display: flex; + justify-content: space-between; + align-items: center; + padding: 0 20px; +} + +.header-title { + display: flex; + align-items: center; + user-select: none; +} + +.header-title iconify-icon, .header-buttons iconify-icon { + font-size: 2.5em; +} + +h1 { + font-size: 2.5em; + margin: 5px; +} + +.header-buttons * { + color: black; +} + +.svg-wrapper { + flex: 1; + height: calc(100% - 80px); + position: relative; + text-align: center; +} + +.region-name { + position: absolute; + font-size: 1.3em; + margin: 0; + padding: 3px 12px; + background-color: rgba(0, 0, 0, .6); + color: white; + user-select: none; + border-radius: 8px; + pointer-events: none; + display: none; +} + +object { + width: 100%; + height: 100%; + background-color: #b6d9f0; +} diff --git a/src/color.ts b/src/color.ts new file mode 100644 index 0000000..7d0bc5c --- /dev/null +++ b/src/color.ts @@ -0,0 +1,22 @@ +/** + * Returns a lightened color + * @param color A color in the format #RRGGBB + */ +export function lighten(color: string): string { + let r = Math.min( + 255, + Math.round(parseInt(color.substring(1, 3), 16) * 1.2) + ).toString(16); + let g = Math.min( + 255, + Math.round(parseInt(color.substring(3, 5), 16) * 1.2) + ).toString(16); + let b = Math.min( + 255, + Math.round(parseInt(color.substring(5, 7), 16) * 1.2) + ).toString(16); + r = r.length == 1 ? "0" + r : r; + g = g.length == 1 ? "0" + g : g; + b = b.length == 1 ? "0" + b : b; + return "#" + r + g + b; +} diff --git a/src/main.ts b/src/main.ts index 09b57e7..25f1359 100644 --- a/src/main.ts +++ b/src/main.ts @@ -1,140 +1,94 @@ -import "./style.css"; -import map from "./map_monochrome.svg"; -import regionData from "./regions.json"; - -document.querySelector("#app")!.innerHTML = ` -

Listenbourg

-
- - +import Tooltip from "./tooltip"; +import { lighten } from "./color"; +import { + regionData, + RegionName, + getRegionPaths, + getRegionColor, + getDepartmentName, + getRegionByDepartment, +} from "./regions"; + +import "./assets/style.css"; +import map from "./assets/map_monochrome.svg"; + +const app = document.getElementById("app") as HTMLDivElement; +app.innerHTML = /* html */ ` +
+
+ +

Listenbourg Maps

+
+
+ + + +
+
+
+
+ +
`; -type RegionName = keyof typeof regionData; - -/** - * Function to get the color of a given region - */ -function getRegionColor(regionName: RegionName) { - return regionData[regionName].color; -} - -function getDepartmentName(id: number): string { - for (const [, { departments }] of Object.entries(regionData)) - for (const department of departments) - if (department[0] === id) return department[1] as string; - return ""; -} - -/** - * Function to get the region of a given departement number - */ -function getRegion(id: number) { - for (const [name, { departments }] of Object.entries(regionData)) - if (departments.map((d) => d[0]).includes(id)) return name; - return undefined; -} - -function setActiveRegion(regionName: RegionName, svgObject: Document) { - let regionColor = getRegionColor(regionName as RegionName); - for (const department of regionData[regionName].departments) { - let departmentGroup = svgObject.getElementById(String(department[0])); - let departmentPath = departmentGroup?.querySelector("path"); - - if (departmentPath) { - departmentPath.style.fill = regionColor; - } - } -} - -function setInactiveRegion(regionName: RegionName, svgObject: Document) { - for (const department of regionData[regionName].departments) { - let departmentGroup = svgObject.getElementById(String(department[0])); - let departmentPath = departmentGroup?.querySelector("path"); - - if (departmentPath) { - departmentPath.style.fill = "#D6D6D6"; - } - } -} - -function toggleTooltip( - e: MouseEvent, - regionName: string, - departmentName: string -) { - let tooltip = document.querySelector(".region-name") as HTMLDivElement; - tooltip.innerHTML = `${departmentName} (${regionName})`; - tooltip.style.left = e.pageX + 225 + "px"; - tooltip.style.top = e.pageY + 25 + "px"; - tooltip.style.display = "block"; -} - -/** - * Function to get a lighten color of given - */ -function lighten(color: string) { - let r = Math.min( - 255, - Math.round(parseInt(color.substring(1, 3), 16) * 1.2) - ).toString(16); - let g = Math.min( - 255, - Math.round(parseInt(color.substring(3, 5), 16) * 1.2) - ).toString(16); - let b = Math.min( - 255, - Math.round(parseInt(color.substring(5, 7), 16) * 1.2) - ).toString(16); - r = r.length == 1 ? "0" + r : r; - g = g.length == 1 ? "0" + g : g; - b = b.length == 1 ? "0" + b : b; - return "#" + r + g + b; -} - window.addEventListener("load", () => { const svgObject = document.querySelector("object")!.contentDocument!; - const departments = svgObject.querySelectorAll("g"); - const regionNameDiv = document.querySelector( - ".region-name" - ) as HTMLDivElement; - - let hoveredRegion: RegionName | undefined = undefined; - let hoveredDepartment: string | undefined = undefined; + const { setTooltip, hideTooltip } = Tooltip( + document.querySelector("object")!, + app.querySelector(".region-name")! + ); + const groups = svgObject.querySelectorAll("g"); + const paths = svgObject.querySelectorAll("path"); + + const regionsPaths = Object.fromEntries( + Object.keys(regionData).map((name) => [ + name, + getRegionPaths(svgObject, name as RegionName), + ]) + ); + + type Hovered = { + region: RegionName; + depID: number; + depName: string; + } | null; + + let hovered: Hovered = null; svgObject.addEventListener("mousemove", (e) => { - let hovered = false; - departments.forEach((d) => { - if (d.querySelector("path")!.matches(":hover")) hovered = true; + let isHovered = false; + paths.forEach((d) => { + if (d.matches(":hover")) isHovered = true; }); - if (!hovered) { - regionNameDiv.style.display = "none"; - } else if (hoveredRegion && hoveredDepartment) { - toggleTooltip(e, hoveredRegion, hoveredDepartment); + if (!isHovered) { + hideTooltip(); + } else if (hovered) { + setTooltip(e, `${hovered.depID} ${hovered.depName} (${hovered.region})`); } }); - departments.forEach((departement) => { - const path = departement.querySelector("path")!; - const departmentName = getDepartmentName(parseInt(departement.id)); - const regionName = getRegion(parseInt(departement.id))!; + groups.forEach((group) => { + const path = group.querySelector("path")!; + const groupID = Number(group.id); + const departmentName = getDepartmentName(groupID); + const regionName = getRegionByDepartment(groupID)!; const regionColor = getRegionColor(regionName as RegionName); path.style.transition = "fill 0.25s ease"; path.addEventListener("mouseenter", () => { - setActiveRegion(regionName as RegionName, svgObject); + for (const path of regionsPaths[regionName]) + path.style.fill = regionColor; path.style.fill = lighten(regionColor); - hoveredRegion = regionName as RegionName; - hoveredDepartment = departmentName; + hovered = { + region: regionName as RegionName, + depID: groupID, + depName: departmentName, + }; }); path.addEventListener("mouseleave", () => { - setInactiveRegion(regionName as RegionName, svgObject); - }); - - path.addEventListener("click", () => { - regionNameDiv.innerHTML = `${departmentName} (${regionName})`; + for (const path of regionsPaths[regionName]) path.style.fill = "#D6D6D6"; }); }); }); diff --git a/src/regions.ts b/src/regions.ts new file mode 100644 index 0000000..3fe1a78 --- /dev/null +++ b/src/regions.ts @@ -0,0 +1,42 @@ +import regionData_ from "./assets/regions.json"; + +export const regionData = regionData_; + +export type RegionName = keyof typeof regionData; + +export function getRegionPaths( + svg: Document, + region: RegionName +): SVGPathElement[] { + return regionData[region].departments + .map(([id]) => svg.getElementById(String(id))?.querySelector("path")) + .filter((path) => path !== undefined) as SVGPathElement[]; +} + +/** + * Function to get the color of a given region + */ +export function getRegionColor(regionName: RegionName) { + return regionData[regionName].color; +} + +/** + * Returns the name of a department given its ID + */ +export function getDepartmentName(id: number): string { + for (const [, { departments }] of Object.entries(regionData)) + for (const department of departments) + if (department[0] === id) return department[1] as string; + console.error('No department found for id "' + id + '"'); + return ""; +} + +/** + * Function to get the region of a given departement number + */ +export function getRegionByDepartment(id: number) { + for (const [name, { departments }] of Object.entries(regionData)) + if (departments.map((d) => d[0]).includes(id)) return name; + console.error('No region found for department "' + id + '"'); + return ""; +} diff --git a/src/style.css b/src/style.css deleted file mode 100644 index e9b3811..0000000 --- a/src/style.css +++ /dev/null @@ -1,36 +0,0 @@ -html, body, #app { - width: 100vw; - height: 100vh; - padding: 0; - margin: 0; - overflow: hidden; -} - -#app { - font-family: 'Source Serif 4', serif; - display: flex; - flex-direction: column; - align-items: center; - background-color: #b6d9f0; -} - -h1 { - font-size: 2.5em; - margin: 5px; -} - -.region-name { - position: absolute; - font-size: 1.3em; - margin: 0; - padding: 3px 12px; - background-color: rgba(0, 0, 0, .6); - color: white; - user-select: none; - border-radius: 8px; - display: none; -} - -object { - height: 100%; -} diff --git a/src/tooltip.ts b/src/tooltip.ts new file mode 100644 index 0000000..7c301e8 --- /dev/null +++ b/src/tooltip.ts @@ -0,0 +1,24 @@ +export default function Tooltip(svg: HTMLObjectElement, element: HTMLElement) { + function setTooltip(e: MouseEvent, content: string) { + element.innerHTML = content; + element.style.display = "block"; + + element.style.left = e.pageX + 25 + "px"; + + if ( + element.getBoundingClientRect().right > + svg.getBoundingClientRect().right + ) { + element.style.left = e.pageX - element.clientWidth + "px"; + element.style.top = e.pageY + 25 + "px"; + } else { + element.style.top = e.pageY + "px"; + } + } + + function hideTooltip() { + element.style.display = "none"; + } + + return { setTooltip, hideTooltip }; +} From 3cbb66a95c2b9fee7a47a676ecbcd55b1df55ae7 Mon Sep 17 00:00:00 2001 From: 1z2 Date: Fri, 4 Nov 2022 23:45:22 +0100 Subject: [PATCH 3/7] Zooming --- index.html | 34 +- package-lock.json | 1164 ++++++++++++++++++++++++++++++- package.json | 5 +- public/SourceSerif4-Regular.ttf | Bin 0 -> 328836 bytes src/assets/map_monochrome.svg | 312 +++++---- src/assets/style.css | 31 +- src/main.ts | 89 ++- src/tooltip.ts | 8 +- 8 files changed, 1462 insertions(+), 181 deletions(-) create mode 100644 public/SourceSerif4-Regular.ttf diff --git a/index.html b/index.html index ecd283a..a2f59be 100644 --- a/index.html +++ b/index.html @@ -1,18 +1,22 @@ - - - - Listenbourg Maps - - - - - - - -
- - - + + + + ListenMaps + + + + + + + + + + +
+ + + + \ No newline at end of file diff --git a/package-lock.json b/package-lock.json index 32648e9..60122da 100644 --- a/package-lock.json +++ b/package-lock.json @@ -7,11 +7,325 @@ "": { "name": "listenbourgmap", "version": "0.0.0", + "dependencies": { + "@rollup/plugin-babel": "^6.0.2" + }, "devDependencies": { "typescript": "^4.6.4", "vite": "^3.2.0" } }, + "node_modules/@ampproject/remapping": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/@ampproject/remapping/-/remapping-2.2.0.tgz", + "integrity": "sha512-qRmjj8nj9qmLTQXXmaR1cck3UXSRMPrbsLJAasZpF+t3riI71BXed5ebIOYwQntykeZuhjsdweEc9BxH5Jc26w==", + "peer": true, + "dependencies": { + "@jridgewell/gen-mapping": "^0.1.0", + "@jridgewell/trace-mapping": "^0.3.9" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@babel/code-frame": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.18.6.tgz", + "integrity": "sha512-TDCmlK5eOvH+eH7cdAFlNXeVJqWIQ7gW9tY1GJIpUtFb6CmjVyq2VM3u71bOyR8CRihcCgMUYoDNyLXao3+70Q==", + "peer": true, + "dependencies": { + "@babel/highlight": "^7.18.6" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/compat-data": { + "version": "7.20.1", + "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.20.1.tgz", + "integrity": "sha512-EWZ4mE2diW3QALKvDMiXnbZpRvlj+nayZ112nK93SnhqOtpdsbVD4W+2tEoT3YNBAG9RBR0ISY758ZkOgsn6pQ==", + "peer": true, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/core": { + "version": "7.19.6", + "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.19.6.tgz", + "integrity": "sha512-D2Ue4KHpc6Ys2+AxpIx1BZ8+UegLLLE2p3KJEuJRKmokHOtl49jQ5ny1773KsGLZs8MQvBidAF6yWUJxRqtKtg==", + "peer": true, + "dependencies": { + "@ampproject/remapping": "^2.1.0", + "@babel/code-frame": "^7.18.6", + "@babel/generator": "^7.19.6", + "@babel/helper-compilation-targets": "^7.19.3", + "@babel/helper-module-transforms": "^7.19.6", + "@babel/helpers": "^7.19.4", + "@babel/parser": "^7.19.6", + "@babel/template": "^7.18.10", + "@babel/traverse": "^7.19.6", + "@babel/types": "^7.19.4", + "convert-source-map": "^1.7.0", + "debug": "^4.1.0", + "gensync": "^1.0.0-beta.2", + "json5": "^2.2.1", + "semver": "^6.3.0" + }, + "engines": { + "node": ">=6.9.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/babel" + } + }, + "node_modules/@babel/generator": { + "version": "7.20.1", + "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.20.1.tgz", + "integrity": "sha512-u1dMdBUmA7Z0rBB97xh8pIhviK7oItYOkjbsCxTWMknyvbQRBwX7/gn4JXurRdirWMFh+ZtYARqkA6ydogVZpg==", + "peer": true, + "dependencies": { + "@babel/types": "^7.20.0", + "@jridgewell/gen-mapping": "^0.3.2", + "jsesc": "^2.5.1" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/generator/node_modules/@jridgewell/gen-mapping": { + "version": "0.3.2", + "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.2.tgz", + "integrity": "sha512-mh65xKQAzI6iBcFzwv28KVWSmCkdRBWoOh+bYQGW3+6OZvbbN3TqMGo5hqYxQniRcH9F2VZIoJCm4pa3BPDK/A==", + "peer": true, + "dependencies": { + "@jridgewell/set-array": "^1.0.1", + "@jridgewell/sourcemap-codec": "^1.4.10", + "@jridgewell/trace-mapping": "^0.3.9" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@babel/helper-compilation-targets": { + "version": "7.20.0", + "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.20.0.tgz", + "integrity": "sha512-0jp//vDGp9e8hZzBc6N/KwA5ZK3Wsm/pfm4CrY7vzegkVxc65SgSn6wYOnwHe9Js9HRQ1YTCKLGPzDtaS3RoLQ==", + "peer": true, + "dependencies": { + "@babel/compat-data": "^7.20.0", + "@babel/helper-validator-option": "^7.18.6", + "browserslist": "^4.21.3", + "semver": "^6.3.0" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, + "node_modules/@babel/helper-environment-visitor": { + "version": "7.18.9", + "resolved": "https://registry.npmjs.org/@babel/helper-environment-visitor/-/helper-environment-visitor-7.18.9.tgz", + "integrity": "sha512-3r/aACDJ3fhQ/EVgFy0hpj8oHyHpQc+LPtJoY9SzTThAsStm4Ptegq92vqKoE3vD706ZVFWITnMnxucw+S9Ipg==", + "peer": true, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-function-name": { + "version": "7.19.0", + "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.19.0.tgz", + "integrity": "sha512-WAwHBINyrpqywkUH0nTnNgI5ina5TFn85HKS0pbPDfxFfhyR/aNQEn4hGi1P1JyT//I0t4OgXUlofzWILRvS5w==", + "peer": true, + "dependencies": { + "@babel/template": "^7.18.10", + "@babel/types": "^7.19.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-hoist-variables": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/helper-hoist-variables/-/helper-hoist-variables-7.18.6.tgz", + "integrity": "sha512-UlJQPkFqFULIcyW5sbzgbkxn2FKRgwWiRexcuaR8RNJRy8+LLveqPjwZV/bwrLZCN0eUHD/x8D0heK1ozuoo6Q==", + "peer": true, + "dependencies": { + "@babel/types": "^7.18.6" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-module-imports": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.18.6.tgz", + "integrity": "sha512-0NFvs3VkuSYbFi1x2Vd6tKrywq+z/cLeYC/RJNFrIX/30Bf5aiGYbtvGXolEktzJH8o5E5KJ3tT+nkxuuZFVlA==", + "dependencies": { + "@babel/types": "^7.18.6" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-module-transforms": { + "version": "7.19.6", + "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.19.6.tgz", + "integrity": "sha512-fCmcfQo/KYr/VXXDIyd3CBGZ6AFhPFy1TfSEJ+PilGVlQT6jcbqtHAM4C1EciRqMza7/TpOUZliuSH+U6HAhJw==", + "peer": true, + "dependencies": { + "@babel/helper-environment-visitor": "^7.18.9", + "@babel/helper-module-imports": "^7.18.6", + "@babel/helper-simple-access": "^7.19.4", + "@babel/helper-split-export-declaration": "^7.18.6", + "@babel/helper-validator-identifier": "^7.19.1", + "@babel/template": "^7.18.10", + "@babel/traverse": "^7.19.6", + "@babel/types": "^7.19.4" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-simple-access": { + "version": "7.19.4", + "resolved": "https://registry.npmjs.org/@babel/helper-simple-access/-/helper-simple-access-7.19.4.tgz", + "integrity": "sha512-f9Xq6WqBFqaDfbCzn2w85hwklswz5qsKlh7f08w4Y9yhJHpnNC0QemtSkK5YyOY8kPGvyiwdzZksGUhnGdaUIg==", + "peer": true, + "dependencies": { + "@babel/types": "^7.19.4" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-split-export-declaration": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.18.6.tgz", + "integrity": "sha512-bde1etTx6ZyTmobl9LLMMQsaizFVZrquTEHOqKeQESMKo4PlObf+8+JA25ZsIpZhT/WEd39+vOdLXAFG/nELpA==", + "peer": true, + "dependencies": { + "@babel/types": "^7.18.6" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-string-parser": { + "version": "7.19.4", + "resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.19.4.tgz", + "integrity": "sha512-nHtDoQcuqFmwYNYPz3Rah5ph2p8PFeFCsZk9A/48dPc/rGocJ5J3hAAZ7pb76VWX3fZKu+uEr/FhH5jLx7umrw==", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-validator-identifier": { + "version": "7.19.1", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.19.1.tgz", + "integrity": "sha512-awrNfaMtnHUr653GgGEs++LlAvW6w+DcPrOliSMXWCKo597CwL5Acf/wWdNkf/tfEQE3mjkeD1YOVZOUV/od1w==", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-validator-option": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.18.6.tgz", + "integrity": "sha512-XO7gESt5ouv/LRJdrVjkShckw6STTaB7l9BrpBaAHDeF5YZT+01PCwmR0SJHnkW6i8OwW/EVWRShfi4j2x+KQw==", + "peer": true, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helpers": { + "version": "7.20.1", + "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.20.1.tgz", + "integrity": "sha512-J77mUVaDTUJFZ5BpP6mMn6OIl3rEWymk2ZxDBQJUG3P+PbmyMcF3bYWvz0ma69Af1oobDqT/iAsvzhB58xhQUg==", + "peer": true, + "dependencies": { + "@babel/template": "^7.18.10", + "@babel/traverse": "^7.20.1", + "@babel/types": "^7.20.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/highlight": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.18.6.tgz", + "integrity": "sha512-u7stbOuYjaPezCuLj29hNW1v64M2Md2qupEKP1fHc7WdOA3DgLh37suiSrZYY7haUB7iBeQZ9P1uiRF359do3g==", + "peer": true, + "dependencies": { + "@babel/helper-validator-identifier": "^7.18.6", + "chalk": "^2.0.0", + "js-tokens": "^4.0.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/parser": { + "version": "7.20.1", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.20.1.tgz", + "integrity": "sha512-hp0AYxaZJhxULfM1zyp7Wgr+pSUKBcP3M+PHnSzWGdXOzg/kHWIgiUWARvubhUKGOEw3xqY4x+lyZ9ytBVcELw==", + "peer": true, + "bin": { + "parser": "bin/babel-parser.js" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@babel/template": { + "version": "7.18.10", + "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.18.10.tgz", + "integrity": "sha512-TI+rCtooWHr3QJ27kJxfjutghu44DLnasDMwpDqCXVTal9RLp3RSYNh4NdBrRP2cQAoG9A8juOQl6P6oZG4JxA==", + "peer": true, + "dependencies": { + "@babel/code-frame": "^7.18.6", + "@babel/parser": "^7.18.10", + "@babel/types": "^7.18.10" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/traverse": { + "version": "7.20.1", + "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.20.1.tgz", + "integrity": "sha512-d3tN8fkVJwFLkHkBN479SOsw4DMZnz8cdbL/gvuDuzy3TS6Nfw80HuQqhw1pITbIruHyh7d1fMA47kWzmcUEGA==", + "peer": true, + "dependencies": { + "@babel/code-frame": "^7.18.6", + "@babel/generator": "^7.20.1", + "@babel/helper-environment-visitor": "^7.18.9", + "@babel/helper-function-name": "^7.19.0", + "@babel/helper-hoist-variables": "^7.18.6", + "@babel/helper-split-export-declaration": "^7.18.6", + "@babel/parser": "^7.20.1", + "@babel/types": "^7.20.0", + "debug": "^4.1.0", + "globals": "^11.1.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/types": { + "version": "7.20.0", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.20.0.tgz", + "integrity": "sha512-Jlgt3H0TajCW164wkTOTzHkZb075tMQMULzrLUoUeKmO7eFL96GgDxf7/Axhc5CAuKE3KFyVW1p6ysKsi2oXAg==", + "dependencies": { + "@babel/helper-string-parser": "^7.19.4", + "@babel/helper-validator-identifier": "^7.19.1", + "to-fast-properties": "^2.0.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, "node_modules/@esbuild/android-arm": { "version": "0.15.12", "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.15.12.tgz", @@ -44,6 +358,218 @@ "node": ">=12" } }, + "node_modules/@jridgewell/gen-mapping": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.1.1.tgz", + "integrity": "sha512-sQXCasFk+U8lWYEe66WxRDOE9PjVz4vSM51fTu3Hw+ClTpUSQb718772vH3pyS5pShp6lvQM7SxgIDXXXmOX7w==", + "peer": true, + "dependencies": { + "@jridgewell/set-array": "^1.0.0", + "@jridgewell/sourcemap-codec": "^1.4.10" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@jridgewell/resolve-uri": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.0.tgz", + "integrity": "sha512-F2msla3tad+Mfht5cJq7LSXcdudKTWCVYUgw6pLFOOHSTtZlj6SWNYAp+AhuqLmWdBO2X5hPrLcu8cVP8fy28w==", + "peer": true, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@jridgewell/set-array": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/@jridgewell/set-array/-/set-array-1.1.2.tgz", + "integrity": "sha512-xnkseuNADM0gt2bs+BvhO0p78Mk762YnZdsuzFV018NoG1Sj1SCQvpSqa7XUaTam5vAGasABV9qXASMKnFMwMw==", + "peer": true, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@jridgewell/sourcemap-codec": { + "version": "1.4.14", + "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.14.tgz", + "integrity": "sha512-XPSJHWmi394fuUuzDnGz1wiKqWfo1yXecHQMRf2l6hztTO+nPru658AyDngaBe7isIxEkRsPR3FZh+s7iVa4Uw==", + "peer": true + }, + "node_modules/@jridgewell/trace-mapping": { + "version": "0.3.17", + "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.17.tgz", + "integrity": "sha512-MCNzAp77qzKca9+W/+I0+sEpaUnZoeasnghNeVc41VZCEKaCH73Vq3BZZ/SzWIgrqE4H4ceI+p+b6C0mHf9T4g==", + "peer": true, + "dependencies": { + "@jridgewell/resolve-uri": "3.1.0", + "@jridgewell/sourcemap-codec": "1.4.14" + } + }, + "node_modules/@rollup/plugin-babel": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/@rollup/plugin-babel/-/plugin-babel-6.0.2.tgz", + "integrity": "sha512-Vnt8XIWYwCf3MD7qhBWYlP9pjSZvcE++nlPXhQYw6YNehl5742AzFbrV6h4BHb20VAOVUlIksVLymQCTwVCGDg==", + "dependencies": { + "@babel/helper-module-imports": "^7.18.6", + "@rollup/pluginutils": "^5.0.1" + }, + "engines": { + "node": ">=14.0.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0", + "@types/babel__core": "^7.1.9", + "rollup": "^1.20.0||^2.0.0||^3.0.0" + }, + "peerDependenciesMeta": { + "@types/babel__core": { + "optional": true + }, + "rollup": { + "optional": true + } + } + }, + "node_modules/@rollup/pluginutils": { + "version": "5.0.2", + "resolved": "https://registry.npmjs.org/@rollup/pluginutils/-/pluginutils-5.0.2.tgz", + "integrity": "sha512-pTd9rIsP92h+B6wWwFbW8RkZv4hiR/xKsqre4SIuAOaOEQRxi0lqLke9k2/7WegC85GgUs9pjmOjCUi3In4vwA==", + "dependencies": { + "@types/estree": "^1.0.0", + "estree-walker": "^2.0.2", + "picomatch": "^2.3.1" + }, + "engines": { + "node": ">=14.0.0" + }, + "peerDependencies": { + "rollup": "^1.20.0||^2.0.0||^3.0.0" + }, + "peerDependenciesMeta": { + "rollup": { + "optional": true + } + } + }, + "node_modules/@types/estree": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/@types/estree/-/estree-1.0.0.tgz", + "integrity": "sha512-WulqXMDUTYAXCjZnk6JtIHPigp55cVtDgDrO2gHRwhyJto21+1zbVCtOYB2L1F9w4qCQ0rOGWBnBe0FNTiEJIQ==" + }, + "node_modules/ansi-styles": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", + "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", + "peer": true, + "dependencies": { + "color-convert": "^1.9.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/browserslist": { + "version": "4.21.4", + "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.21.4.tgz", + "integrity": "sha512-CBHJJdDmgjl3daYjN5Cp5kbTf1mUhZoS+beLklHIvkOWscs83YAhLlF3Wsh/lciQYAcbBJgTOD44VtG31ZM4Hw==", + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/browserslist" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/browserslist" + } + ], + "peer": true, + "dependencies": { + "caniuse-lite": "^1.0.30001400", + "electron-to-chromium": "^1.4.251", + "node-releases": "^2.0.6", + "update-browserslist-db": "^1.0.9" + }, + "bin": { + "browserslist": "cli.js" + }, + "engines": { + "node": "^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7" + } + }, + "node_modules/caniuse-lite": { + "version": "1.0.30001429", + "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001429.tgz", + "integrity": "sha512-511ThLu1hF+5RRRt0zYCf2U2yRr9GPF6m5y90SBCWsvSoYoW7yAGlv/elyPaNfvGCkp6kj/KFZWU0BMA69Prsg==", + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/browserslist" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/caniuse-lite" + } + ], + "peer": true + }, + "node_modules/chalk": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", + "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", + "peer": true, + "dependencies": { + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/color-convert": { + "version": "1.9.3", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", + "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", + "peer": true, + "dependencies": { + "color-name": "1.1.3" + } + }, + "node_modules/color-name": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", + "integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==", + "peer": true + }, + "node_modules/convert-source-map": { + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.9.0.tgz", + "integrity": "sha512-ASFBup0Mz1uyiIjANan1jzLQami9z1PoYSZCiiYW2FczPbenXc45FZdBZLzOT+r6+iciuEModtmCti+hjaAk0A==", + "peer": true + }, + "node_modules/debug": { + "version": "4.3.4", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", + "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", + "peer": true, + "dependencies": { + "ms": "2.1.2" + }, + "engines": { + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } + } + }, + "node_modules/electron-to-chromium": { + "version": "1.4.284", + "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.284.tgz", + "integrity": "sha512-M8WEXFuKXMYMVr45fo8mq0wUrrJHheiKZf6BArTKk9ZBYCKJEOU5H8cdWgDT+qCVZf7Na4lVUaZsA+h6uA9+PA==", + "peer": true + }, "node_modules/esbuild": { "version": "0.15.12", "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.15.12.tgz", @@ -401,6 +927,29 @@ "node": ">=12" } }, + "node_modules/escalade": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.1.1.tgz", + "integrity": "sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==", + "peer": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/escape-string-regexp": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", + "integrity": "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==", + "peer": true, + "engines": { + "node": ">=0.8.0" + } + }, + "node_modules/estree-walker": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/estree-walker/-/estree-walker-2.0.2.tgz", + "integrity": "sha512-Rfkk/Mp/DL7JVje3u18FxFujQlTNR2q6QfMSMB7AvCBx91NGj/ba3kCfza0f6dVDbw7YlRf/nDrn7pQrCCyQ/w==" + }, "node_modules/fsevents": { "version": "2.3.2", "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.2.tgz", @@ -421,6 +970,24 @@ "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==", "dev": true }, + "node_modules/gensync": { + "version": "1.0.0-beta.2", + "resolved": "https://registry.npmjs.org/gensync/-/gensync-1.0.0-beta.2.tgz", + "integrity": "sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg==", + "peer": true, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/globals": { + "version": "11.12.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-11.12.0.tgz", + "integrity": "sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==", + "peer": true, + "engines": { + "node": ">=4" + } + }, "node_modules/has": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz", @@ -433,6 +1000,15 @@ "node": ">= 0.4.0" } }, + "node_modules/has-flag": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", + "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==", + "peer": true, + "engines": { + "node": ">=4" + } + }, "node_modules/is-core-module": { "version": "2.11.0", "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.11.0.tgz", @@ -445,6 +1021,42 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/js-tokens": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz", + "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==", + "peer": true + }, + "node_modules/jsesc": { + "version": "2.5.2", + "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-2.5.2.tgz", + "integrity": "sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA==", + "peer": true, + "bin": { + "jsesc": "bin/jsesc" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/json5": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/json5/-/json5-2.2.1.tgz", + "integrity": "sha512-1hqLFMSrGHRHxav9q9gNjJ5EXznIxGVO09xQRrwplcS8qs28pZ8s8hupZAmqDwZUmVZ2Qb2jnyPOWcDH8m8dlA==", + "peer": true, + "bin": { + "json5": "lib/cli.js" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/ms": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", + "peer": true + }, "node_modules/nanoid": { "version": "3.3.4", "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.4.tgz", @@ -457,6 +1069,12 @@ "node": "^10 || ^12 || ^13.7 || ^14 || >=15.0.1" } }, + "node_modules/node-releases": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.6.tgz", + "integrity": "sha512-PiVXnNuFm5+iYkLBNeq5211hvO38y63T0i2KKh2KnUs3RpzJ+JtODFjkD8yjLwnDkTYF1eKXheUwdssR+NRZdg==", + "peer": true + }, "node_modules/path-parse": { "version": "1.0.7", "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz", @@ -466,8 +1084,18 @@ "node_modules/picocolors": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.0.0.tgz", - "integrity": "sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ==", - "dev": true + "integrity": "sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ==" + }, + "node_modules/picomatch": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", + "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", + "engines": { + "node": ">=8.6" + }, + "funding": { + "url": "https://github.com/sponsors/jonschlinkert" + } }, "node_modules/postcss": { "version": "8.4.18", @@ -514,7 +1142,7 @@ "version": "2.79.1", "resolved": "https://registry.npmjs.org/rollup/-/rollup-2.79.1.tgz", "integrity": "sha512-uKxbd0IhMZOhjAiD5oAFp7BqvkA4Dv47qpOCtaNvng4HBwdbWtdOh8f5nZNuk2rp51PMGk3bzfWu5oayNEuYnw==", - "dev": true, + "devOptional": true, "bin": { "rollup": "dist/bin/rollup" }, @@ -525,6 +1153,15 @@ "fsevents": "~2.3.2" } }, + "node_modules/semver": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", + "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", + "peer": true, + "bin": { + "semver": "bin/semver.js" + } + }, "node_modules/source-map-js": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.0.2.tgz", @@ -534,6 +1171,18 @@ "node": ">=0.10.0" } }, + "node_modules/supports-color": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", + "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", + "peer": true, + "dependencies": { + "has-flag": "^3.0.0" + }, + "engines": { + "node": ">=4" + } + }, "node_modules/supports-preserve-symlinks-flag": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz", @@ -546,6 +1195,14 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/to-fast-properties": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/to-fast-properties/-/to-fast-properties-2.0.0.tgz", + "integrity": "sha512-/OaKK0xYrs3DmxRYqL/yDc+FxFUVYhDlXMhRmv3z915w2HF1tnN1omB354j8VUGO/hbRzyD6Y3sA7v7GS/ceog==", + "engines": { + "node": ">=4" + } + }, "node_modules/typescript": { "version": "4.8.4", "resolved": "https://registry.npmjs.org/typescript/-/typescript-4.8.4.tgz", @@ -559,6 +1216,32 @@ "node": ">=4.2.0" } }, + "node_modules/update-browserslist-db": { + "version": "1.0.10", + "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.0.10.tgz", + "integrity": "sha512-OztqDenkfFkbSG+tRxBeAnCVPckDBcvibKd35yDONx6OU8N7sqgwc7rCbkJ/WcYtVRZ4ba68d6byhC21GFh7sQ==", + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/browserslist" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/browserslist" + } + ], + "peer": true, + "dependencies": { + "escalade": "^3.1.1", + "picocolors": "^1.0.0" + }, + "bin": { + "browserslist-lint": "cli.js" + }, + "peerDependencies": { + "browserslist": ">= 4.21.0" + } + }, "node_modules/vite": { "version": "3.2.2", "resolved": "https://registry.npmjs.org/vite/-/vite-3.2.2.tgz", @@ -606,6 +1289,240 @@ } }, "dependencies": { + "@ampproject/remapping": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/@ampproject/remapping/-/remapping-2.2.0.tgz", + "integrity": "sha512-qRmjj8nj9qmLTQXXmaR1cck3UXSRMPrbsLJAasZpF+t3riI71BXed5ebIOYwQntykeZuhjsdweEc9BxH5Jc26w==", + "peer": true, + "requires": { + "@jridgewell/gen-mapping": "^0.1.0", + "@jridgewell/trace-mapping": "^0.3.9" + } + }, + "@babel/code-frame": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.18.6.tgz", + "integrity": "sha512-TDCmlK5eOvH+eH7cdAFlNXeVJqWIQ7gW9tY1GJIpUtFb6CmjVyq2VM3u71bOyR8CRihcCgMUYoDNyLXao3+70Q==", + "peer": true, + "requires": { + "@babel/highlight": "^7.18.6" + } + }, + "@babel/compat-data": { + "version": "7.20.1", + "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.20.1.tgz", + "integrity": "sha512-EWZ4mE2diW3QALKvDMiXnbZpRvlj+nayZ112nK93SnhqOtpdsbVD4W+2tEoT3YNBAG9RBR0ISY758ZkOgsn6pQ==", + "peer": true + }, + "@babel/core": { + "version": "7.19.6", + "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.19.6.tgz", + "integrity": "sha512-D2Ue4KHpc6Ys2+AxpIx1BZ8+UegLLLE2p3KJEuJRKmokHOtl49jQ5ny1773KsGLZs8MQvBidAF6yWUJxRqtKtg==", + "peer": true, + "requires": { + "@ampproject/remapping": "^2.1.0", + "@babel/code-frame": "^7.18.6", + "@babel/generator": "^7.19.6", + "@babel/helper-compilation-targets": "^7.19.3", + "@babel/helper-module-transforms": "^7.19.6", + "@babel/helpers": "^7.19.4", + "@babel/parser": "^7.19.6", + "@babel/template": "^7.18.10", + "@babel/traverse": "^7.19.6", + "@babel/types": "^7.19.4", + "convert-source-map": "^1.7.0", + "debug": "^4.1.0", + "gensync": "^1.0.0-beta.2", + "json5": "^2.2.1", + "semver": "^6.3.0" + } + }, + "@babel/generator": { + "version": "7.20.1", + "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.20.1.tgz", + "integrity": "sha512-u1dMdBUmA7Z0rBB97xh8pIhviK7oItYOkjbsCxTWMknyvbQRBwX7/gn4JXurRdirWMFh+ZtYARqkA6ydogVZpg==", + "peer": true, + "requires": { + "@babel/types": "^7.20.0", + "@jridgewell/gen-mapping": "^0.3.2", + "jsesc": "^2.5.1" + }, + "dependencies": { + "@jridgewell/gen-mapping": { + "version": "0.3.2", + "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.2.tgz", + "integrity": "sha512-mh65xKQAzI6iBcFzwv28KVWSmCkdRBWoOh+bYQGW3+6OZvbbN3TqMGo5hqYxQniRcH9F2VZIoJCm4pa3BPDK/A==", + "peer": true, + "requires": { + "@jridgewell/set-array": "^1.0.1", + "@jridgewell/sourcemap-codec": "^1.4.10", + "@jridgewell/trace-mapping": "^0.3.9" + } + } + } + }, + "@babel/helper-compilation-targets": { + "version": "7.20.0", + "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.20.0.tgz", + "integrity": "sha512-0jp//vDGp9e8hZzBc6N/KwA5ZK3Wsm/pfm4CrY7vzegkVxc65SgSn6wYOnwHe9Js9HRQ1YTCKLGPzDtaS3RoLQ==", + "peer": true, + "requires": { + "@babel/compat-data": "^7.20.0", + "@babel/helper-validator-option": "^7.18.6", + "browserslist": "^4.21.3", + "semver": "^6.3.0" + } + }, + "@babel/helper-environment-visitor": { + "version": "7.18.9", + "resolved": "https://registry.npmjs.org/@babel/helper-environment-visitor/-/helper-environment-visitor-7.18.9.tgz", + "integrity": "sha512-3r/aACDJ3fhQ/EVgFy0hpj8oHyHpQc+LPtJoY9SzTThAsStm4Ptegq92vqKoE3vD706ZVFWITnMnxucw+S9Ipg==", + "peer": true + }, + "@babel/helper-function-name": { + "version": "7.19.0", + "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.19.0.tgz", + "integrity": "sha512-WAwHBINyrpqywkUH0nTnNgI5ina5TFn85HKS0pbPDfxFfhyR/aNQEn4hGi1P1JyT//I0t4OgXUlofzWILRvS5w==", + "peer": true, + "requires": { + "@babel/template": "^7.18.10", + "@babel/types": "^7.19.0" + } + }, + "@babel/helper-hoist-variables": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/helper-hoist-variables/-/helper-hoist-variables-7.18.6.tgz", + "integrity": "sha512-UlJQPkFqFULIcyW5sbzgbkxn2FKRgwWiRexcuaR8RNJRy8+LLveqPjwZV/bwrLZCN0eUHD/x8D0heK1ozuoo6Q==", + "peer": true, + "requires": { + "@babel/types": "^7.18.6" + } + }, + "@babel/helper-module-imports": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.18.6.tgz", + "integrity": "sha512-0NFvs3VkuSYbFi1x2Vd6tKrywq+z/cLeYC/RJNFrIX/30Bf5aiGYbtvGXolEktzJH8o5E5KJ3tT+nkxuuZFVlA==", + "requires": { + "@babel/types": "^7.18.6" + } + }, + "@babel/helper-module-transforms": { + "version": "7.19.6", + "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.19.6.tgz", + "integrity": "sha512-fCmcfQo/KYr/VXXDIyd3CBGZ6AFhPFy1TfSEJ+PilGVlQT6jcbqtHAM4C1EciRqMza7/TpOUZliuSH+U6HAhJw==", + "peer": true, + "requires": { + "@babel/helper-environment-visitor": "^7.18.9", + "@babel/helper-module-imports": "^7.18.6", + "@babel/helper-simple-access": "^7.19.4", + "@babel/helper-split-export-declaration": "^7.18.6", + "@babel/helper-validator-identifier": "^7.19.1", + "@babel/template": "^7.18.10", + "@babel/traverse": "^7.19.6", + "@babel/types": "^7.19.4" + } + }, + "@babel/helper-simple-access": { + "version": "7.19.4", + "resolved": "https://registry.npmjs.org/@babel/helper-simple-access/-/helper-simple-access-7.19.4.tgz", + "integrity": "sha512-f9Xq6WqBFqaDfbCzn2w85hwklswz5qsKlh7f08w4Y9yhJHpnNC0QemtSkK5YyOY8kPGvyiwdzZksGUhnGdaUIg==", + "peer": true, + "requires": { + "@babel/types": "^7.19.4" + } + }, + "@babel/helper-split-export-declaration": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.18.6.tgz", + "integrity": "sha512-bde1etTx6ZyTmobl9LLMMQsaizFVZrquTEHOqKeQESMKo4PlObf+8+JA25ZsIpZhT/WEd39+vOdLXAFG/nELpA==", + "peer": true, + "requires": { + "@babel/types": "^7.18.6" + } + }, + "@babel/helper-string-parser": { + "version": "7.19.4", + "resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.19.4.tgz", + "integrity": "sha512-nHtDoQcuqFmwYNYPz3Rah5ph2p8PFeFCsZk9A/48dPc/rGocJ5J3hAAZ7pb76VWX3fZKu+uEr/FhH5jLx7umrw==" + }, + "@babel/helper-validator-identifier": { + "version": "7.19.1", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.19.1.tgz", + "integrity": "sha512-awrNfaMtnHUr653GgGEs++LlAvW6w+DcPrOliSMXWCKo597CwL5Acf/wWdNkf/tfEQE3mjkeD1YOVZOUV/od1w==" + }, + "@babel/helper-validator-option": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.18.6.tgz", + "integrity": "sha512-XO7gESt5ouv/LRJdrVjkShckw6STTaB7l9BrpBaAHDeF5YZT+01PCwmR0SJHnkW6i8OwW/EVWRShfi4j2x+KQw==", + "peer": true + }, + "@babel/helpers": { + "version": "7.20.1", + "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.20.1.tgz", + "integrity": "sha512-J77mUVaDTUJFZ5BpP6mMn6OIl3rEWymk2ZxDBQJUG3P+PbmyMcF3bYWvz0ma69Af1oobDqT/iAsvzhB58xhQUg==", + "peer": true, + "requires": { + "@babel/template": "^7.18.10", + "@babel/traverse": "^7.20.1", + "@babel/types": "^7.20.0" + } + }, + "@babel/highlight": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.18.6.tgz", + "integrity": "sha512-u7stbOuYjaPezCuLj29hNW1v64M2Md2qupEKP1fHc7WdOA3DgLh37suiSrZYY7haUB7iBeQZ9P1uiRF359do3g==", + "peer": true, + "requires": { + "@babel/helper-validator-identifier": "^7.18.6", + "chalk": "^2.0.0", + "js-tokens": "^4.0.0" + } + }, + "@babel/parser": { + "version": "7.20.1", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.20.1.tgz", + "integrity": "sha512-hp0AYxaZJhxULfM1zyp7Wgr+pSUKBcP3M+PHnSzWGdXOzg/kHWIgiUWARvubhUKGOEw3xqY4x+lyZ9ytBVcELw==", + "peer": true + }, + "@babel/template": { + "version": "7.18.10", + "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.18.10.tgz", + "integrity": "sha512-TI+rCtooWHr3QJ27kJxfjutghu44DLnasDMwpDqCXVTal9RLp3RSYNh4NdBrRP2cQAoG9A8juOQl6P6oZG4JxA==", + "peer": true, + "requires": { + "@babel/code-frame": "^7.18.6", + "@babel/parser": "^7.18.10", + "@babel/types": "^7.18.10" + } + }, + "@babel/traverse": { + "version": "7.20.1", + "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.20.1.tgz", + "integrity": "sha512-d3tN8fkVJwFLkHkBN479SOsw4DMZnz8cdbL/gvuDuzy3TS6Nfw80HuQqhw1pITbIruHyh7d1fMA47kWzmcUEGA==", + "peer": true, + "requires": { + "@babel/code-frame": "^7.18.6", + "@babel/generator": "^7.20.1", + "@babel/helper-environment-visitor": "^7.18.9", + "@babel/helper-function-name": "^7.19.0", + "@babel/helper-hoist-variables": "^7.18.6", + "@babel/helper-split-export-declaration": "^7.18.6", + "@babel/parser": "^7.20.1", + "@babel/types": "^7.20.0", + "debug": "^4.1.0", + "globals": "^11.1.0" + } + }, + "@babel/types": { + "version": "7.20.0", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.20.0.tgz", + "integrity": "sha512-Jlgt3H0TajCW164wkTOTzHkZb075tMQMULzrLUoUeKmO7eFL96GgDxf7/Axhc5CAuKE3KFyVW1p6ysKsi2oXAg==", + "requires": { + "@babel/helper-string-parser": "^7.19.4", + "@babel/helper-validator-identifier": "^7.19.1", + "to-fast-properties": "^2.0.0" + } + }, "@esbuild/android-arm": { "version": "0.15.12", "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.15.12.tgz", @@ -620,6 +1537,142 @@ "dev": true, "optional": true }, + "@jridgewell/gen-mapping": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.1.1.tgz", + "integrity": "sha512-sQXCasFk+U8lWYEe66WxRDOE9PjVz4vSM51fTu3Hw+ClTpUSQb718772vH3pyS5pShp6lvQM7SxgIDXXXmOX7w==", + "peer": true, + "requires": { + "@jridgewell/set-array": "^1.0.0", + "@jridgewell/sourcemap-codec": "^1.4.10" + } + }, + "@jridgewell/resolve-uri": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.0.tgz", + "integrity": "sha512-F2msla3tad+Mfht5cJq7LSXcdudKTWCVYUgw6pLFOOHSTtZlj6SWNYAp+AhuqLmWdBO2X5hPrLcu8cVP8fy28w==", + "peer": true + }, + "@jridgewell/set-array": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/@jridgewell/set-array/-/set-array-1.1.2.tgz", + "integrity": "sha512-xnkseuNADM0gt2bs+BvhO0p78Mk762YnZdsuzFV018NoG1Sj1SCQvpSqa7XUaTam5vAGasABV9qXASMKnFMwMw==", + "peer": true + }, + "@jridgewell/sourcemap-codec": { + "version": "1.4.14", + "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.14.tgz", + "integrity": "sha512-XPSJHWmi394fuUuzDnGz1wiKqWfo1yXecHQMRf2l6hztTO+nPru658AyDngaBe7isIxEkRsPR3FZh+s7iVa4Uw==", + "peer": true + }, + "@jridgewell/trace-mapping": { + "version": "0.3.17", + "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.17.tgz", + "integrity": "sha512-MCNzAp77qzKca9+W/+I0+sEpaUnZoeasnghNeVc41VZCEKaCH73Vq3BZZ/SzWIgrqE4H4ceI+p+b6C0mHf9T4g==", + "peer": true, + "requires": { + "@jridgewell/resolve-uri": "3.1.0", + "@jridgewell/sourcemap-codec": "1.4.14" + } + }, + "@rollup/plugin-babel": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/@rollup/plugin-babel/-/plugin-babel-6.0.2.tgz", + "integrity": "sha512-Vnt8XIWYwCf3MD7qhBWYlP9pjSZvcE++nlPXhQYw6YNehl5742AzFbrV6h4BHb20VAOVUlIksVLymQCTwVCGDg==", + "requires": { + "@babel/helper-module-imports": "^7.18.6", + "@rollup/pluginutils": "^5.0.1" + } + }, + "@rollup/pluginutils": { + "version": "5.0.2", + "resolved": "https://registry.npmjs.org/@rollup/pluginutils/-/pluginutils-5.0.2.tgz", + "integrity": "sha512-pTd9rIsP92h+B6wWwFbW8RkZv4hiR/xKsqre4SIuAOaOEQRxi0lqLke9k2/7WegC85GgUs9pjmOjCUi3In4vwA==", + "requires": { + "@types/estree": "^1.0.0", + "estree-walker": "^2.0.2", + "picomatch": "^2.3.1" + } + }, + "@types/estree": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/@types/estree/-/estree-1.0.0.tgz", + "integrity": "sha512-WulqXMDUTYAXCjZnk6JtIHPigp55cVtDgDrO2gHRwhyJto21+1zbVCtOYB2L1F9w4qCQ0rOGWBnBe0FNTiEJIQ==" + }, + "ansi-styles": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", + "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", + "peer": true, + "requires": { + "color-convert": "^1.9.0" + } + }, + "browserslist": { + "version": "4.21.4", + "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.21.4.tgz", + "integrity": "sha512-CBHJJdDmgjl3daYjN5Cp5kbTf1mUhZoS+beLklHIvkOWscs83YAhLlF3Wsh/lciQYAcbBJgTOD44VtG31ZM4Hw==", + "peer": true, + "requires": { + "caniuse-lite": "^1.0.30001400", + "electron-to-chromium": "^1.4.251", + "node-releases": "^2.0.6", + "update-browserslist-db": "^1.0.9" + } + }, + "caniuse-lite": { + "version": "1.0.30001429", + "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001429.tgz", + "integrity": "sha512-511ThLu1hF+5RRRt0zYCf2U2yRr9GPF6m5y90SBCWsvSoYoW7yAGlv/elyPaNfvGCkp6kj/KFZWU0BMA69Prsg==", + "peer": true + }, + "chalk": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", + "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", + "peer": true, + "requires": { + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" + } + }, + "color-convert": { + "version": "1.9.3", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", + "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", + "peer": true, + "requires": { + "color-name": "1.1.3" + } + }, + "color-name": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", + "integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==", + "peer": true + }, + "convert-source-map": { + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.9.0.tgz", + "integrity": "sha512-ASFBup0Mz1uyiIjANan1jzLQami9z1PoYSZCiiYW2FczPbenXc45FZdBZLzOT+r6+iciuEModtmCti+hjaAk0A==", + "peer": true + }, + "debug": { + "version": "4.3.4", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", + "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", + "peer": true, + "requires": { + "ms": "2.1.2" + } + }, + "electron-to-chromium": { + "version": "1.4.284", + "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.284.tgz", + "integrity": "sha512-M8WEXFuKXMYMVr45fo8mq0wUrrJHheiKZf6BArTKk9ZBYCKJEOU5H8cdWgDT+qCVZf7Na4lVUaZsA+h6uA9+PA==", + "peer": true + }, "esbuild": { "version": "0.15.12", "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.15.12.tgz", @@ -790,6 +1843,23 @@ "dev": true, "optional": true }, + "escalade": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.1.1.tgz", + "integrity": "sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==", + "peer": true + }, + "escape-string-regexp": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", + "integrity": "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==", + "peer": true + }, + "estree-walker": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/estree-walker/-/estree-walker-2.0.2.tgz", + "integrity": "sha512-Rfkk/Mp/DL7JVje3u18FxFujQlTNR2q6QfMSMB7AvCBx91NGj/ba3kCfza0f6dVDbw7YlRf/nDrn7pQrCCyQ/w==" + }, "fsevents": { "version": "2.3.2", "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.2.tgz", @@ -803,6 +1873,18 @@ "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==", "dev": true }, + "gensync": { + "version": "1.0.0-beta.2", + "resolved": "https://registry.npmjs.org/gensync/-/gensync-1.0.0-beta.2.tgz", + "integrity": "sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg==", + "peer": true + }, + "globals": { + "version": "11.12.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-11.12.0.tgz", + "integrity": "sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==", + "peer": true + }, "has": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz", @@ -812,6 +1894,12 @@ "function-bind": "^1.1.1" } }, + "has-flag": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", + "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==", + "peer": true + }, "is-core-module": { "version": "2.11.0", "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.11.0.tgz", @@ -821,12 +1909,42 @@ "has": "^1.0.3" } }, + "js-tokens": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz", + "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==", + "peer": true + }, + "jsesc": { + "version": "2.5.2", + "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-2.5.2.tgz", + "integrity": "sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA==", + "peer": true + }, + "json5": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/json5/-/json5-2.2.1.tgz", + "integrity": "sha512-1hqLFMSrGHRHxav9q9gNjJ5EXznIxGVO09xQRrwplcS8qs28pZ8s8hupZAmqDwZUmVZ2Qb2jnyPOWcDH8m8dlA==", + "peer": true + }, + "ms": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", + "peer": true + }, "nanoid": { "version": "3.3.4", "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.4.tgz", "integrity": "sha512-MqBkQh/OHTS2egovRtLk45wEyNXwF+cokD+1YPf9u5VfJiRdAiRwB2froX5Co9Rh20xs4siNPm8naNotSD6RBw==", "dev": true }, + "node-releases": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.6.tgz", + "integrity": "sha512-PiVXnNuFm5+iYkLBNeq5211hvO38y63T0i2KKh2KnUs3RpzJ+JtODFjkD8yjLwnDkTYF1eKXheUwdssR+NRZdg==", + "peer": true + }, "path-parse": { "version": "1.0.7", "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz", @@ -836,8 +1954,12 @@ "picocolors": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.0.0.tgz", - "integrity": "sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ==", - "dev": true + "integrity": "sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ==" + }, + "picomatch": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", + "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==" }, "postcss": { "version": "8.4.18", @@ -865,29 +1987,59 @@ "version": "2.79.1", "resolved": "https://registry.npmjs.org/rollup/-/rollup-2.79.1.tgz", "integrity": "sha512-uKxbd0IhMZOhjAiD5oAFp7BqvkA4Dv47qpOCtaNvng4HBwdbWtdOh8f5nZNuk2rp51PMGk3bzfWu5oayNEuYnw==", - "dev": true, + "devOptional": true, "requires": { "fsevents": "~2.3.2" } }, + "semver": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", + "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", + "peer": true + }, "source-map-js": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.0.2.tgz", "integrity": "sha512-R0XvVJ9WusLiqTCEiGCmICCMplcCkIwwR11mOSD9CR5u+IXYdiseeEuXCVAjS54zqwkLcPNnmU4OeJ6tUrWhDw==", "dev": true }, + "supports-color": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", + "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", + "peer": true, + "requires": { + "has-flag": "^3.0.0" + } + }, "supports-preserve-symlinks-flag": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz", "integrity": "sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==", "dev": true }, + "to-fast-properties": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/to-fast-properties/-/to-fast-properties-2.0.0.tgz", + "integrity": "sha512-/OaKK0xYrs3DmxRYqL/yDc+FxFUVYhDlXMhRmv3z915w2HF1tnN1omB354j8VUGO/hbRzyD6Y3sA7v7GS/ceog==" + }, "typescript": { "version": "4.8.4", "resolved": "https://registry.npmjs.org/typescript/-/typescript-4.8.4.tgz", "integrity": "sha512-QCh+85mCy+h0IGff8r5XWzOVSbBO+KfeYrMQh7NJ58QujwcE22u+NUSmUxqF+un70P9GXKxa2HCNiTTMJknyjQ==", "dev": true }, + "update-browserslist-db": { + "version": "1.0.10", + "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.0.10.tgz", + "integrity": "sha512-OztqDenkfFkbSG+tRxBeAnCVPckDBcvibKd35yDONx6OU8N7sqgwc7rCbkJ/WcYtVRZ4ba68d6byhC21GFh7sQ==", + "peer": true, + "requires": { + "escalade": "^3.1.1", + "picocolors": "^1.0.0" + } + }, "vite": { "version": "3.2.2", "resolved": "https://registry.npmjs.org/vite/-/vite-3.2.2.tgz", diff --git a/package.json b/package.json index a4084e1..d7139f8 100644 --- a/package.json +++ b/package.json @@ -11,5 +11,8 @@ "devDependencies": { "typescript": "^4.6.4", "vite": "^3.2.0" + }, + "dependencies": { + "@rollup/plugin-babel": "^6.0.2" } -} \ No newline at end of file +} diff --git a/public/SourceSerif4-Regular.ttf b/public/SourceSerif4-Regular.ttf new file mode 100644 index 0000000000000000000000000000000000000000..3ec8f3a33eb5faf5b7dfaead094c566b47c2c4e8 GIT binary patch literal 328836 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

=l2O)Hb96}wy??b5_ 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 literal 0 HcmV?d00001 diff --git a/src/assets/map_monochrome.svg b/src/assets/map_monochrome.svg index 26cc9d4..5bb172a 100644 --- a/src/assets/map_monochrome.svg +++ b/src/assets/map_monochrome.svg @@ -1,40 +1,62 @@ - - - + + + + + - - - + + + - - - + + + - - - + + + - - - + + + - - - + + + - - - + + + - - - + + + - - - + + + - - - + + + - - - + + + - - - + + + - - - + + + - - - + + + - - - + + + - - - + + + - - - + + + - - - + + + - - - + + + - - - + + + - - - + + + - - - + + + - - - + + + - - - + + + - - - + + + - - - + + + - - - + + + - - - + + + - - - + + + - - - + + + - - - + + + - - - + + + - - - + + + - - - + + + - - - + + + - - + s-5,0.9-10,1.3C905.5,595.9,900.5,592,893.6,590.6z" /> + + \ No newline at end of file diff --git a/src/assets/style.css b/src/assets/style.css index 0963066..be08888 100644 --- a/src/assets/style.css +++ b/src/assets/style.css @@ -1,13 +1,23 @@ +:root { + --header-height: 80px; +} + +@media (max-width: 600px) { + :root { + --header-height: 40px; + } +} + html, body, #app { width: 100vw; height: 100vh; padding: 0; margin: 0; overflow: hidden; + font-family: "HK Grotesk", sans-serif; } #app { - font-family: 'Source Serif 4', serif; display: flex; flex-direction: column; } @@ -15,11 +25,13 @@ html, body, #app { header { background-color: rgba(255, 255, 255, .4); border-bottom: 1px solid #ebebeb; - height: 80px; + height: var(--header-height); display: flex; justify-content: space-between; align-items: center; padding: 0 20px; + box-shadow: 0 0 10px rgba(0, 0, 0, .1); + z-index: 1; } .header-title { @@ -37,13 +49,26 @@ h1 { margin: 5px; } +/* smaller title on mobile */ +@media (max-width: 600px) { + .header-title iconify-icon, .header-buttons iconify-icon { + font-size: 1em; + } + + h1 { + font-size: 1em; + } +} + .header-buttons * { color: black; } .svg-wrapper { + user-select: none; + -webkit-user-select: none; flex: 1; - height: calc(100% - 80px); + height: calc(100% - var(--header-height)); position: relative; text-align: center; } diff --git a/src/main.ts b/src/main.ts index 25f1359..2b37e6f 100644 --- a/src/main.ts +++ b/src/main.ts @@ -17,7 +17,7 @@ app.innerHTML = /* html */ `

-
-
- -
-`; - -window.addEventListener("load", () => { - const svgObject = document.querySelector("object")!.contentDocument!; - const svgEl = svgObject.querySelector("svg")!; - const { setTooltip, hideTooltip } = Tooltip( - document.querySelector("object")!, - app.querySelector(".region-name")! - ); - const groups = svgObject.querySelectorAll("g"); - const paths = svgObject.querySelectorAll("path"); - const svgDepTexts: SVGTextElement[] = []; - - const regionsPaths = Object.fromEntries( - Object.keys(regionData).map((name) => [ - name, - getRegionPaths(svgObject, name as RegionName), - ]) - ); - - type Hovered = { - region: RegionName; - depID: number; - depName: string; - } | null; - - const minZoom = 0.9; - - let hovered: Hovered = null; - let zoom = minZoom; - let offsetX = 0; - let offsetY = 0; - let dragging = false; - - function updateTransform() { - svgEl.style.transform = `translate(${offsetX * zoom}px, ${ - offsetY * zoom - }px) scale(${zoom})`; - } - - updateTransform(); - - svgObject.addEventListener( - "wheel", - (e: WheelEvent) => { - const oldZoom = zoom; - zoom = Math.max(minZoom, zoom - e.deltaY * 0.01); - updateTransform(); - svgEl.style.cursor = zoom === minZoom ? "pointer" : "grab"; - - if (zoom > 1.5 && oldZoom <= 1.5) { - svgEl.style.setProperty('--text-display', 'block'); - hideTooltip(); - } else if (zoom <= 1.5 && oldZoom > 1.5) { - svgEl.style.setProperty('--text-display', 'none'); - } - - svgEl.style.setProperty('--text-fz', `${Math.min(1, 1 / zoom * 2)}rem`); - - e.preventDefault(); - }, - { passive: false } - ); - - svgObject.addEventListener("mousedown", () => { - dragging = true; - svgEl.style.cursor = "grabbing"; - }); - svgObject.addEventListener("mouseup", () => { - dragging = false; - svgEl.style.cursor = zoom === minZoom ? "pointer" : "grab"; - }); - - svgObject.addEventListener("mousemove", (e) => { - let isHovered = false; - groups.forEach((d) => { - if (d.matches(":hover")) isHovered = true; - }); - if (!isHovered) { - hideTooltip(); - } else if (hovered && zoom < 1.5) { - setTooltip(e, `${hovered.depID} ${hovered.depName} (${hovered.region})`); - } - - if (dragging) { - offsetX += e.movementX / zoom; - offsetY += e.movementY / zoom; - updateTransform(); - } - }); - - svgEl.style.overflow = "hidden"; - svgEl.style.cursor = "pointer"; - - groups.forEach((group) => { - const path = group.querySelector("path")!; - const groupID = Number(group.id); - const departmentName = getDepartmentName(groupID); - const regionName = getRegionByDepartment(groupID)!; - const regionColor = getRegionColor(regionName as RegionName); - - const textEl = svgObject.createElementNS( - "http://www.w3.org/2000/svg", - "text" - ); - const pathRect = path.getBBox(); - console.log(pathRect, group.querySelector("path")); // il sert à qqch ce - textEl.setAttribute("x", (pathRect.x + pathRect.width / 2).toString()); - textEl.setAttribute("y", (pathRect.y + pathRect.height / 2).toString()); - textEl.setAttribute("dominant-baseline", "middle"); - textEl.setAttribute("text-anchor", "middle"); - textEl.style.userSelect = "none"; - textEl.style.webkitUserSelect = "none"; - textEl.style.pointerEvents = "none"; - // textEl.setAttribute("fill", "black"); - textEl.innerHTML = departmentName; - group.appendChild(textEl); - svgDepTexts.push(textEl); - - - path.style.transition = "fill 0.25s ease"; - - group.addEventListener("mouseenter", () => { - for (const regPath of regionsPaths[regionName]) - regPath.style.fill = regionColor; - path.style.fill = lighten(regionColor); - hovered = { - region: regionName as RegionName, - depID: groupID, - depName: departmentName, - }; - }); - - group.addEventListener("mouseleave", () => { - for (const path of regionsPaths[regionName]) path.style.fill = "#D6D6D6"; - }); - }); -}); - -// Ressources : -// https://www.petercollingridge.co.uk/tutorials/svg/interactive/javascript/ - -// Gérer différents espaces : régions / départements ✓ - -// Gérer les infos liées aux régions <==== - -// Gérer l'affichage d'un point pour les villes - -// Gérer le fait de sélectionner une ville - -// Afficher les infos d'une ville - -// Afficher les routes principales (réseau routier autoroutes, train) - -// Afficher des lieux spéciaux (aéroport...) diff --git a/src/regions.ts b/src/regions.ts deleted file mode 100644 index 3fe1a78..0000000 --- a/src/regions.ts +++ /dev/null @@ -1,42 +0,0 @@ -import regionData_ from "./assets/regions.json"; - -export const regionData = regionData_; - -export type RegionName = keyof typeof regionData; - -export function getRegionPaths( - svg: Document, - region: RegionName -): SVGPathElement[] { - return regionData[region].departments - .map(([id]) => svg.getElementById(String(id))?.querySelector("path")) - .filter((path) => path !== undefined) as SVGPathElement[]; -} - -/** - * Function to get the color of a given region - */ -export function getRegionColor(regionName: RegionName) { - return regionData[regionName].color; -} - -/** - * Returns the name of a department given its ID - */ -export function getDepartmentName(id: number): string { - for (const [, { departments }] of Object.entries(regionData)) - for (const department of departments) - if (department[0] === id) return department[1] as string; - console.error('No department found for id "' + id + '"'); - return ""; -} - -/** - * Function to get the region of a given departement number - */ -export function getRegionByDepartment(id: number) { - for (const [name, { departments }] of Object.entries(regionData)) - if (departments.map((d) => d[0]).includes(id)) return name; - console.error('No region found for department "' + id + '"'); - return ""; -} diff --git a/src/svg-pan-zoom/control-icons.js b/src/svg-pan-zoom/control-icons.js new file mode 100644 index 0000000..a41df0b --- /dev/null +++ b/src/svg-pan-zoom/control-icons.js @@ -0,0 +1,184 @@ +import { svgNS } from "./svg-utilities"; + +export function enable(instance) { + // Select (and create if necessary) defs + var defs = instance.svg.querySelector("defs"); + if (!defs) { + defs = document.createElementNS(svgNS, "defs"); + instance.svg.appendChild(defs); + } + + // Check for style element, and create it if it doesn't exist + var styleEl = defs.querySelector("style#svg-pan-zoom-controls-styles"); + if (!styleEl) { + var style = document.createElementNS(svgNS, "style"); + style.setAttribute("id", "svg-pan-zoom-controls-styles"); + style.setAttribute("type", "text/css"); + style.textContent = + ".svg-pan-zoom-control { cursor: pointer; fill: black; fill-opacity: 0.333; } .svg-pan-zoom-control:hover { fill-opacity: 0.8; } .svg-pan-zoom-control-background { fill: white; fill-opacity: 0.5; } .svg-pan-zoom-control-background { fill-opacity: 0.8; }"; + defs.appendChild(style); + } + + // Zoom Group + var zoomGroup = document.createElementNS(svgNS, "g"); + zoomGroup.setAttribute("id", "svg-pan-zoom-controls"); + zoomGroup.setAttribute( + "transform", + "translate(" + + (instance.width - 70) + + " " + + (instance.height - 76) + + ") scale(0.75)" + ); + zoomGroup.setAttribute("class", "svg-pan-zoom-control"); + + // Control elements + zoomGroup.appendChild(_createZoomIn(instance)); + zoomGroup.appendChild(_createZoomReset(instance)); + zoomGroup.appendChild(_createZoomOut(instance)); + + // Finally append created element + instance.svg.appendChild(zoomGroup); + + // Cache control instance + instance.controlIcons = zoomGroup; +} +export function _createZoomIn(instance) { + var zoomIn = document.createElementNS(svgNS, "g"); + zoomIn.setAttribute("id", "svg-pan-zoom-zoom-in"); + zoomIn.setAttribute("transform", "translate(30.5 5) scale(0.015)"); + zoomIn.setAttribute("class", "svg-pan-zoom-control"); + zoomIn.addEventListener( + "click", + function () { + instance.getPublicInstance().zoomIn(); + }, + false + ); + zoomIn.addEventListener( + "touchstart", + function () { + instance.getPublicInstance().zoomIn(); + }, + false + ); + + var zoomInBackground = document.createElementNS(svgNS, "rect"); // TODO change these background space fillers to rounded rectangles so they look prettier + zoomInBackground.setAttribute("x", "0"); + zoomInBackground.setAttribute("y", "0"); + zoomInBackground.setAttribute("width", "1500"); // larger than expected because the whole group is transformed to scale down + zoomInBackground.setAttribute("height", "1400"); + zoomInBackground.setAttribute("class", "svg-pan-zoom-control-background"); + zoomIn.appendChild(zoomInBackground); + + var zoomInShape = document.createElementNS(svgNS, "path"); + zoomInShape.setAttribute( + "d", + "M1280 576v128q0 26 -19 45t-45 19h-320v320q0 26 -19 45t-45 19h-128q-26 0 -45 -19t-19 -45v-320h-320q-26 0 -45 -19t-19 -45v-128q0 -26 19 -45t45 -19h320v-320q0 -26 19 -45t45 -19h128q26 0 45 19t19 45v320h320q26 0 45 19t19 45zM1536 1120v-960 q0 -119 -84.5 -203.5t-203.5 -84.5h-960q-119 0 -203.5 84.5t-84.5 203.5v960q0 119 84.5 203.5t203.5 84.5h960q119 0 203.5 -84.5t84.5 -203.5z" + ); + zoomInShape.setAttribute("class", "svg-pan-zoom-control-element"); + zoomIn.appendChild(zoomInShape); + + return zoomIn; +} +export function _createZoomReset(instance) { + // reset + var resetPanZoomControl = document.createElementNS(svgNS, "g"); + resetPanZoomControl.setAttribute("id", "svg-pan-zoom-reset-pan-zoom"); + resetPanZoomControl.setAttribute("transform", "translate(5 35) scale(0.4)"); + resetPanZoomControl.setAttribute("class", "svg-pan-zoom-control"); + resetPanZoomControl.addEventListener( + "click", + function () { + instance.getPublicInstance().reset(); + }, + false + ); + resetPanZoomControl.addEventListener( + "touchstart", + function () { + instance.getPublicInstance().reset(); + }, + false + ); + + var resetPanZoomControlBackground = document.createElementNS(svgNS, "rect"); // TODO change these background space fillers to rounded rectangles so they look prettier + resetPanZoomControlBackground.setAttribute("x", "2"); + resetPanZoomControlBackground.setAttribute("y", "2"); + resetPanZoomControlBackground.setAttribute("width", "182"); // larger than expected because the whole group is transformed to scale down + resetPanZoomControlBackground.setAttribute("height", "58"); + resetPanZoomControlBackground.setAttribute( + "class", + "svg-pan-zoom-control-background" + ); + resetPanZoomControl.appendChild(resetPanZoomControlBackground); + + var resetPanZoomControlShape1 = document.createElementNS(svgNS, "path"); + resetPanZoomControlShape1.setAttribute( + "d", + "M33.051,20.632c-0.742-0.406-1.854-0.609-3.338-0.609h-7.969v9.281h7.769c1.543,0,2.701-0.188,3.473-0.562c1.365-0.656,2.048-1.953,2.048-3.891C35.032,22.757,34.372,21.351,33.051,20.632z" + ); + resetPanZoomControlShape1.setAttribute( + "class", + "svg-pan-zoom-control-element" + ); + resetPanZoomControl.appendChild(resetPanZoomControlShape1); + + var resetPanZoomControlShape2 = document.createElementNS(svgNS, "path"); + resetPanZoomControlShape2.setAttribute( + "d", + "M170.231,0.5H15.847C7.102,0.5,0.5,5.708,0.5,11.84v38.861C0.5,56.833,7.102,61.5,15.847,61.5h154.384c8.745,0,15.269-4.667,15.269-10.798V11.84C185.5,5.708,178.976,0.5,170.231,0.5z M42.837,48.569h-7.969c-0.219-0.766-0.375-1.383-0.469-1.852c-0.188-0.969-0.289-1.961-0.305-2.977l-0.047-3.211c-0.03-2.203-0.41-3.672-1.142-4.406c-0.732-0.734-2.103-1.102-4.113-1.102h-7.05v13.547h-7.055V14.022h16.524c2.361,0.047,4.178,0.344,5.45,0.891c1.272,0.547,2.351,1.352,3.234,2.414c0.731,0.875,1.31,1.844,1.737,2.906s0.64,2.273,0.64,3.633c0,1.641-0.414,3.254-1.242,4.84s-2.195,2.707-4.102,3.363c1.594,0.641,2.723,1.551,3.387,2.73s0.996,2.98,0.996,5.402v2.32c0,1.578,0.063,2.648,0.19,3.211c0.19,0.891,0.635,1.547,1.333,1.969V48.569z M75.579,48.569h-26.18V14.022h25.336v6.117H56.454v7.336h16.781v6H56.454v8.883h19.125V48.569z M104.497,46.331c-2.44,2.086-5.887,3.129-10.34,3.129c-4.548,0-8.125-1.027-10.731-3.082s-3.909-4.879-3.909-8.473h6.891c0.224,1.578,0.662,2.758,1.316,3.539c1.196,1.422,3.246,2.133,6.15,2.133c1.739,0,3.151-0.188,4.236-0.562c2.058-0.719,3.087-2.055,3.087-4.008c0-1.141-0.504-2.023-1.512-2.648c-1.008-0.609-2.607-1.148-4.796-1.617l-3.74-0.82c-3.676-0.812-6.201-1.695-7.576-2.648c-2.328-1.594-3.492-4.086-3.492-7.477c0-3.094,1.139-5.664,3.417-7.711s5.623-3.07,10.036-3.07c3.685,0,6.829,0.965,9.431,2.895c2.602,1.93,3.966,4.73,4.093,8.402h-6.938c-0.128-2.078-1.057-3.555-2.787-4.43c-1.154-0.578-2.587-0.867-4.301-0.867c-1.907,0-3.428,0.375-4.565,1.125c-1.138,0.75-1.706,1.797-1.706,3.141c0,1.234,0.561,2.156,1.682,2.766c0.721,0.406,2.25,0.883,4.589,1.43l6.063,1.43c2.657,0.625,4.648,1.461,5.975,2.508c2.059,1.625,3.089,3.977,3.089,7.055C108.157,41.624,106.937,44.245,104.497,46.331z M139.61,48.569h-26.18V14.022h25.336v6.117h-18.281v7.336h16.781v6h-16.781v8.883h19.125V48.569z M170.337,20.14h-10.336v28.43h-7.266V20.14h-10.383v-6.117h27.984V20.14z" + ); + resetPanZoomControlShape2.setAttribute( + "class", + "svg-pan-zoom-control-element" + ); + resetPanZoomControl.appendChild(resetPanZoomControlShape2); + + return resetPanZoomControl; +} +export function _createZoomOut(instance) { + // zoom out + var zoomOut = document.createElementNS(svgNS, "g"); + zoomOut.setAttribute("id", "svg-pan-zoom-zoom-out"); + zoomOut.setAttribute("transform", "translate(30.5 70) scale(0.015)"); + zoomOut.setAttribute("class", "svg-pan-zoom-control"); + zoomOut.addEventListener( + "click", + function () { + instance.getPublicInstance().zoomOut(); + }, + false + ); + zoomOut.addEventListener( + "touchstart", + function () { + instance.getPublicInstance().zoomOut(); + }, + false + ); + + var zoomOutBackground = document.createElementNS(svgNS, "rect"); // TODO change these background space fillers to rounded rectangles so they look prettier + zoomOutBackground.setAttribute("x", "0"); + zoomOutBackground.setAttribute("y", "0"); + zoomOutBackground.setAttribute("width", "1500"); // larger than expected because the whole group is transformed to scale down + zoomOutBackground.setAttribute("height", "1400"); + zoomOutBackground.setAttribute("class", "svg-pan-zoom-control-background"); + zoomOut.appendChild(zoomOutBackground); + + var zoomOutShape = document.createElementNS(svgNS, "path"); + zoomOutShape.setAttribute( + "d", + "M1280 576v128q0 26 -19 45t-45 19h-896q-26 0 -45 -19t-19 -45v-128q0 -26 19 -45t45 -19h896q26 0 45 19t19 45zM1536 1120v-960q0 -119 -84.5 -203.5t-203.5 -84.5h-960q-119 0 -203.5 84.5t-84.5 203.5v960q0 119 84.5 203.5t203.5 84.5h960q119 0 203.5 -84.5 t84.5 -203.5z" + ); + zoomOutShape.setAttribute("class", "svg-pan-zoom-control-element"); + zoomOut.appendChild(zoomOutShape); + + return zoomOut; +} +export function disable(instance) { + if (instance.controlIcons) { + instance.controlIcons.parentNode.removeChild(instance.controlIcons); + instance.controlIcons = null; + } +} diff --git a/src/svg-pan-zoom/shadow-viewport.js b/src/svg-pan-zoom/shadow-viewport.js new file mode 100644 index 0000000..48f5980 --- /dev/null +++ b/src/svg-pan-zoom/shadow-viewport.js @@ -0,0 +1,372 @@ +import { setCTM } from "./svg-utilities"; +import { + proxy, + createRequestAnimationFrame, + extend, + isObject, + isNumber, +} from "./utilities"; + +var ShadowViewport = function (viewport, options) { + this.init(viewport, options); +}; + +/** + * Initialization + * + * @param {SVGElement} viewport + * @param {Object} options + */ +ShadowViewport.prototype.init = function (viewport, options) { + // DOM Elements + this.viewport = viewport; + this.options = options; + + // State cache + this.originalState = { zoom: 1, x: 0, y: 0 }; + this.activeState = { zoom: 1, x: 0, y: 0 }; + + this.updateCTMCached = proxy(this.updateCTM, this); + + // Create a custom requestAnimationFrame taking in account refreshRate + this.requestAnimationFrame = createRequestAnimationFrame( + this.options.refreshRate + ); + + // ViewBox + this.viewBox = { x: 0, y: 0, width: 0, height: 0 }; + this.cacheViewBox(); + + // Process CTM + var newCTM = this.processCTM(); + + // Update viewport CTM and cache zoom and pan + this.setCTM(newCTM); + + // Update CTM in this frame + this.updateCTM(); +}; + +/** + * Cache initial viewBox value + * If no viewBox is defined, then use viewport size/position instead for viewBox values + */ +ShadowViewport.prototype.cacheViewBox = function () { + var svgViewBox = this.options.svg.getAttribute("viewBox"); + + if (svgViewBox) { + var viewBoxValues = svgViewBox + .split(/[\s\,]/) + .filter(function (v) { + return v; + }) + .map(parseFloat); + + // Cache viewbox x and y offset + this.viewBox.x = viewBoxValues[0]; + this.viewBox.y = viewBoxValues[1]; + this.viewBox.width = viewBoxValues[2]; + this.viewBox.height = viewBoxValues[3]; + + var zoom = Math.min( + this.options.width / this.viewBox.width, + this.options.height / this.viewBox.height + ); + + // Update active state + this.activeState.zoom = zoom; + this.activeState.x = (this.options.width - this.viewBox.width * zoom) / 2; + this.activeState.y = (this.options.height - this.viewBox.height * zoom) / 2; + + // Force updating CTM + this.updateCTMOnNextFrame(); + + this.options.svg.removeAttribute("viewBox"); + } else { + this.simpleViewBoxCache(); + } +}; + +/** + * Recalculate viewport sizes and update viewBox cache + */ +ShadowViewport.prototype.simpleViewBoxCache = function () { + var bBox = this.viewport.getBBox(); + + this.viewBox.x = bBox.x; + this.viewBox.y = bBox.y; + this.viewBox.width = bBox.width; + this.viewBox.height = bBox.height; +}; + +/** + * Returns a viewbox object. Safe to alter + * + * @return {Object} viewbox object + */ +ShadowViewport.prototype.getViewBox = function () { + return extend({}, this.viewBox); +}; + +/** + * Get initial zoom and pan values. Save them into originalState + * Parses viewBox attribute to alter initial sizes + * + * @return {CTM} CTM object based on options + */ +ShadowViewport.prototype.processCTM = function () { + var newCTM = this.getCTM(); + + if (this.options.fit || this.options.contain) { + var newScale; + if (this.options.fit) { + newScale = Math.min( + this.options.width / this.viewBox.width, + this.options.height / this.viewBox.height + ); + } else { + newScale = Math.max( + this.options.width / this.viewBox.width, + this.options.height / this.viewBox.height + ); + } + + newCTM.a = newScale; //x-scale + newCTM.d = newScale; //y-scale + newCTM.e = -this.viewBox.x * newScale; //x-transform + newCTM.f = -this.viewBox.y * newScale; //y-transform + } + + if (this.options.center) { + var offsetX = + (this.options.width - + (this.viewBox.width + this.viewBox.x * 2) * newCTM.a) * + 0.5, + offsetY = + (this.options.height - + (this.viewBox.height + this.viewBox.y * 2) * newCTM.a) * + 0.5; + + newCTM.e = offsetX; + newCTM.f = offsetY; + } + + // Cache initial values. Based on activeState and fix+center opitons + this.originalState.zoom = newCTM.a; + this.originalState.x = newCTM.e; + this.originalState.y = newCTM.f; + + return newCTM; +}; + +/** + * Return originalState object. Safe to alter + * + * @return {Object} + */ +ShadowViewport.prototype.getOriginalState = function () { + return extend({}, this.originalState); +}; + +/** + * Return actualState object. Safe to alter + * + * @return {Object} + */ +ShadowViewport.prototype.getState = function () { + return extend({}, this.activeState); +}; + +/** + * Get zoom scale + * + * @return {Float} zoom scale + */ +ShadowViewport.prototype.getZoom = function () { + return this.activeState.zoom; +}; + +/** + * Get zoom scale for pubilc usage + * + * @return {Float} zoom scale + */ +ShadowViewport.prototype.getRelativeZoom = function () { + return this.activeState.zoom / this.originalState.zoom; +}; + +/** + * Compute zoom scale for pubilc usage + * + * @return {Float} zoom scale + */ +ShadowViewport.prototype.computeRelativeZoom = function (scale) { + return scale / this.originalState.zoom; +}; + +/** + * Get pan + * + * @return {Object} + */ +ShadowViewport.prototype.getPan = function () { + return { x: this.activeState.x, y: this.activeState.y }; +}; + +/** + * Return cached viewport CTM value that can be safely modified + * + * @return {SVGMatrix} + */ +ShadowViewport.prototype.getCTM = function () { + var safeCTM = this.options.svg.createSVGMatrix(); + + // Copy values manually as in FF they are not itterable + safeCTM.a = this.activeState.zoom; + safeCTM.b = 0; + safeCTM.c = 0; + safeCTM.d = this.activeState.zoom; + safeCTM.e = this.activeState.x; + safeCTM.f = this.activeState.y; + + return safeCTM; +}; + +/** + * Set a new CTM + * + * @param {SVGMatrix} newCTM + */ +ShadowViewport.prototype.setCTM = function (newCTM) { + var willZoom = this.isZoomDifferent(newCTM), + willPan = this.isPanDifferent(newCTM); + + if (willZoom || willPan) { + // Before zoom + if (willZoom) { + // If returns false then cancel zooming + if ( + this.options.beforeZoom( + this.getRelativeZoom(), + this.computeRelativeZoom(newCTM.a) + ) === false + ) { + newCTM.a = newCTM.d = this.activeState.zoom; + willZoom = false; + } else { + this.updateCache(newCTM); + this.options.onZoom(this.getRelativeZoom()); + } + } + + // Before pan + if (willPan) { + var preventPan = this.options.beforePan(this.getPan(), { + x: newCTM.e, + y: newCTM.f, + }), + // If prevent pan is an object + preventPanX = false, + preventPanY = false; + + // If prevent pan is Boolean false + if (preventPan === false) { + // Set x and y same as before + newCTM.e = this.getPan().x; + newCTM.f = this.getPan().y; + + preventPanX = preventPanY = true; + } else if (isObject(preventPan)) { + // Check for X axes attribute + if (preventPan.x === false) { + // Prevent panning on x axes + newCTM.e = this.getPan().x; + preventPanX = true; + } else if (isNumber(preventPan.x)) { + // Set a custom pan value + newCTM.e = preventPan.x; + } + + // Check for Y axes attribute + if (preventPan.y === false) { + // Prevent panning on x axes + newCTM.f = this.getPan().y; + preventPanY = true; + } else if (isNumber(preventPan.y)) { + // Set a custom pan value + newCTM.f = preventPan.y; + } + } + + // Update willPan flag + // Check if newCTM is still different + if ((preventPanX && preventPanY) || !this.isPanDifferent(newCTM)) { + willPan = false; + } else { + this.updateCache(newCTM); + this.options.onPan(this.getPan()); + } + } + + // Check again if should zoom or pan + if (willZoom || willPan) { + this.updateCTMOnNextFrame(); + } + } +}; + +ShadowViewport.prototype.isZoomDifferent = function (newCTM) { + return this.activeState.zoom !== newCTM.a; +}; + +ShadowViewport.prototype.isPanDifferent = function (newCTM) { + return this.activeState.x !== newCTM.e || this.activeState.y !== newCTM.f; +}; + +/** + * Update cached CTM and active state + * + * @param {SVGMatrix} newCTM + */ +ShadowViewport.prototype.updateCache = function (newCTM) { + this.activeState.zoom = newCTM.a; + this.activeState.x = newCTM.e; + this.activeState.y = newCTM.f; +}; + +ShadowViewport.prototype.pendingUpdate = false; + +/** + * Place a request to update CTM on next Frame + */ +ShadowViewport.prototype.updateCTMOnNextFrame = function () { + if (!this.pendingUpdate) { + // Lock + this.pendingUpdate = true; + + // Throttle next update + this.requestAnimationFrame.call(window, this.updateCTMCached); + } +}; + +/** + * Update viewport CTM with cached CTM + */ +ShadowViewport.prototype.updateCTM = function () { + var ctm = this.getCTM(); + + // Updates SVG element + setCTM(this.viewport, ctm, this.defs); + + // Free the lock + this.pendingUpdate = false; + + // Notify about the update + if (this.options.onUpdatedCTM) { + this.options.onUpdatedCTM(ctm); + } +}; + +export default function (viewport, options) { + return new ShadowViewport(viewport, options); +} diff --git a/src/svg-pan-zoom/svg-pan-zoom.js b/src/svg-pan-zoom/svg-pan-zoom.js new file mode 100644 index 0000000..4246585 --- /dev/null +++ b/src/svg-pan-zoom/svg-pan-zoom.js @@ -0,0 +1,978 @@ +import { on, off } from "./uniwheel"; +import { enable, disable } from "./control-icons"; +import { + extend, + getType, + mouseAndTouchNormalize, + isDblClick, + proxy, + getSvg, +} from "./utilities"; +import { + setupSvgAttributes, + getBoundingClientRectNormalized, + getOrCreateViewport, + getEventPoint, + getSvgCenterPoint, + createSVGPoint, +} from "./svg-utilities"; +import ShadowViewport from "./shadow-viewport"; + +var SvgPanZoom = function (svg, options) { + this.init(svg, options); +}; + +var optionsDefaults = { + viewportSelector: ".svg-pan-zoom_viewport", // Viewport selector. Can be querySelector string or SVGElement + panEnabled: true, // enable or disable panning (default enabled) + controlIconsEnabled: false, // insert icons to give user an option in addition to mouse events to control pan/zoom (default disabled) + zoomEnabled: true, // enable or disable zooming (default enabled) + dblClickZoomEnabled: true, // enable or disable zooming by double clicking (default enabled) + mouseWheelZoomEnabled: true, // enable or disable zooming by mouse wheel (default enabled) + preventMouseEventsDefault: true, // enable or disable preventDefault for mouse events + zoomScaleSensitivity: 0.1, // Zoom sensitivity + minZoom: 0.5, // Minimum Zoom level + maxZoom: 10, // Maximum Zoom level + fit: true, // enable or disable viewport fit in SVG (default true) + contain: false, // enable or disable viewport contain the svg (default false) + center: true, // enable or disable viewport centering in SVG (default true) + refreshRate: "auto", // Maximum number of frames per second (altering SVG's viewport) + beforeZoom: null, + onZoom: null, + beforePan: null, + onPan: null, + customEventsHandler: null, + eventsListenerElement: null, + onUpdatedCTM: null, +}; + +var passiveListenerOption = { passive: true }; + +SvgPanZoom.prototype.init = function (svg, options) { + var that = this; + + this.svg = svg; + this.defs = svg.querySelector("defs"); + + // Add default attributes to SVG + setupSvgAttributes(this.svg); + + // Set options + this.options = extend(extend({}, optionsDefaults), options); + + // Set default state + this.state = "none"; + + // Get dimensions + var boundingClientRectNormalized = getBoundingClientRectNormalized(svg); + this.width = boundingClientRectNormalized.width; + this.height = boundingClientRectNormalized.height; + + // Init shadow viewport + this.viewport = ShadowViewport( + getOrCreateViewport(this.svg, this.options.viewportSelector), + { + svg: this.svg, + width: this.width, + height: this.height, + fit: this.options.fit, + contain: this.options.contain, + center: this.options.center, + refreshRate: this.options.refreshRate, + // Put callbacks into functions as they can change through time + beforeZoom: function (oldScale, newScale) { + if (that.viewport && that.options.beforeZoom) { + return that.options.beforeZoom(oldScale, newScale); + } + }, + onZoom: function (scale) { + if (that.viewport && that.options.onZoom) { + return that.options.onZoom(scale); + } + }, + beforePan: function (oldPoint, newPoint) { + if (that.viewport && that.options.beforePan) { + return that.options.beforePan(oldPoint, newPoint); + } + }, + onPan: function (point) { + if (that.viewport && that.options.onPan) { + return that.options.onPan(point); + } + }, + onUpdatedCTM: function (ctm) { + if (that.viewport && that.options.onUpdatedCTM) { + return that.options.onUpdatedCTM(ctm); + } + }, + } + ); + + // Wrap callbacks into public API context + var publicInstance = this.getPublicInstance(); + publicInstance.setBeforeZoom(this.options.beforeZoom); + publicInstance.setOnZoom(this.options.onZoom); + publicInstance.setBeforePan(this.options.beforePan); + publicInstance.setOnPan(this.options.onPan); + publicInstance.setOnUpdatedCTM(this.options.onUpdatedCTM); + + if (this.options.controlIconsEnabled) { + enable(this); + } + + // Init events handlers + this.lastMouseWheelEventTime = Date.now(); + this.setupHandlers(); +}; + +/** + * Register event handlers + */ +SvgPanZoom.prototype.setupHandlers = function () { + var that = this, + prevEvt = null; // use for touchstart event to detect double tap + + this.eventListeners = { + // Mouse down group + mousedown: function (evt) { + var result = that.handleMouseDown(evt, prevEvt); + prevEvt = evt; + return result; + }, + touchstart: function (evt) { + var result = that.handleMouseDown(evt, prevEvt); + prevEvt = evt; + return result; + }, + + // Mouse up group + mouseup: function (evt) { + return that.handleMouseUp(evt); + }, + touchend: function (evt) { + return that.handleMouseUp(evt); + }, + + // Mouse move group + mousemove: function (evt) { + return that.handleMouseMove(evt); + }, + touchmove: function (evt) { + return that.handleMouseMove(evt); + }, + + // Mouse leave group + mouseleave: function (evt) { + return that.handleMouseUp(evt); + }, + touchleave: function (evt) { + return that.handleMouseUp(evt); + }, + touchcancel: function (evt) { + return that.handleMouseUp(evt); + }, + }; + + // Init custom events handler if available + // eslint-disable-next-line eqeqeq + if (this.options.customEventsHandler != null) { + this.options.customEventsHandler.init({ + svgElement: this.svg, + eventsListenerElement: this.options.eventsListenerElement, + instance: this.getPublicInstance(), + }); + + // Custom event handler may halt builtin listeners + var haltEventListeners = + this.options.customEventsHandler.haltEventListeners; + if (haltEventListeners && haltEventListeners.length) { + for (var i = haltEventListeners.length - 1; i >= 0; i--) { + if (this.eventListeners.hasOwnProperty(haltEventListeners[i])) { + delete this.eventListeners[haltEventListeners[i]]; + } + } + } + } + + // Bind eventListeners + for (var event in this.eventListeners) { + // Attach event to eventsListenerElement or SVG if not available + (this.options.eventsListenerElement || this.svg).addEventListener( + event, + this.eventListeners[event], + !this.options.preventMouseEventsDefault ? passiveListenerOption : false + ); + } + + // Zoom using mouse wheel + if (this.options.mouseWheelZoomEnabled) { + this.options.mouseWheelZoomEnabled = false; // set to false as enable will set it back to true + this.enableMouseWheelZoom(); + } +}; + +/** + * Enable ability to zoom using mouse wheel + */ +SvgPanZoom.prototype.enableMouseWheelZoom = function () { + if (!this.options.mouseWheelZoomEnabled) { + var that = this; + + // Mouse wheel listener + this.wheelListener = function (evt) { + return that.handleMouseWheel(evt); + }; + + // Bind wheelListener + var isPassiveListener = !this.options.preventMouseEventsDefault; + on( + this.options.eventsListenerElement || this.svg, + this.wheelListener, + isPassiveListener + ); + + this.options.mouseWheelZoomEnabled = true; + } +}; + +/** + * Disable ability to zoom using mouse wheel + */ +SvgPanZoom.prototype.disableMouseWheelZoom = function () { + if (this.options.mouseWheelZoomEnabled) { + var isPassiveListener = !this.options.preventMouseEventsDefault; + off( + this.options.eventsListenerElement || this.svg, + this.wheelListener, + isPassiveListener + ); + this.options.mouseWheelZoomEnabled = false; + } +}; + +/** + * Handle mouse wheel event + * + * @param {Event} evt + */ +SvgPanZoom.prototype.handleMouseWheel = function (evt) { + if (!this.options.zoomEnabled || this.state !== "none") { + return; + } + + if (this.options.preventMouseEventsDefault) { + if (evt.preventDefault) { + evt.preventDefault(); + } else { + evt.returnValue = false; + } + } + + // Default delta in case that deltaY is not available + var delta = evt.deltaY || 1, + timeDelta = Date.now() - this.lastMouseWheelEventTime, + divider = 3 + Math.max(0, 30 - timeDelta); + + // Update cache + this.lastMouseWheelEventTime = Date.now(); + + // Make empirical adjustments for browsers that give deltaY in pixels (deltaMode=0) + if ("deltaMode" in evt && evt.deltaMode === 0 && evt.wheelDelta) { + delta = evt.deltaY === 0 ? 0 : Math.abs(evt.wheelDelta) / evt.deltaY; + } + + delta = + -0.3 < delta && delta < 0.3 + ? delta + : ((delta > 0 ? 1 : -1) * Math.log(Math.abs(delta) + 10)) / divider; + + var inversedScreenCTM = this.svg.getScreenCTM().inverse(), + relativeMousePoint = getEventPoint(evt, this.svg).matrixTransform( + inversedScreenCTM + ), + zoom = Math.pow(1 + this.options.zoomScaleSensitivity, -1 * delta); // multiplying by neg. 1 so as to make zoom in/out behavior match Google maps behavior + + this.zoomAtPoint(zoom, relativeMousePoint); +}; + +/** + * Zoom in at a SVG point + * + * @param {SVGPoint} point + * @param {Float} zoomScale Number representing how much to zoom + * @param {Boolean} zoomAbsolute Default false. If true, zoomScale is treated as an absolute value. + * Otherwise, zoomScale is treated as a multiplied (e.g. 1.10 would zoom in 10%) + */ +SvgPanZoom.prototype.zoomAtPoint = function (zoomScale, point, zoomAbsolute) { + var originalState = this.viewport.getOriginalState(); + + if (!zoomAbsolute) { + // Fit zoomScale in set bounds + if ( + this.getZoom() * zoomScale < + this.options.minZoom * originalState.zoom + ) { + zoomScale = (this.options.minZoom * originalState.zoom) / this.getZoom(); + } else if ( + this.getZoom() * zoomScale > + this.options.maxZoom * originalState.zoom + ) { + zoomScale = (this.options.maxZoom * originalState.zoom) / this.getZoom(); + } + } else { + // Fit zoomScale in set bounds + zoomScale = Math.max( + this.options.minZoom * originalState.zoom, + Math.min(this.options.maxZoom * originalState.zoom, zoomScale) + ); + // Find relative scale to achieve desired scale + zoomScale = zoomScale / this.getZoom(); + } + + var oldCTM = this.viewport.getCTM(), + relativePoint = point.matrixTransform(oldCTM.inverse()), + modifier = this.svg + .createSVGMatrix() + .translate(relativePoint.x, relativePoint.y) + .scale(zoomScale) + .translate(-relativePoint.x, -relativePoint.y), + newCTM = oldCTM.multiply(modifier); + + if (newCTM.a !== oldCTM.a) { + this.viewport.setCTM(newCTM); + } +}; + +/** + * Zoom at center point + * + * @param {Float} scale + * @param {Boolean} absolute Marks zoom scale as relative or absolute + */ +SvgPanZoom.prototype.zoom = function (scale, absolute) { + this.zoomAtPoint( + scale, + getSvgCenterPoint(this.svg, this.width, this.height), + absolute + ); +}; + +/** + * Zoom used by public instance + * + * @param {Float} scale + * @param {Boolean} absolute Marks zoom scale as relative or absolute + */ +SvgPanZoom.prototype.publicZoom = function (scale, absolute) { + if (absolute) { + scale = this.computeFromRelativeZoom(scale); + } + + this.zoom(scale, absolute); +}; + +/** + * Zoom at point used by public instance + * + * @param {Float} scale + * @param {SVGPoint|Object} point An object that has x and y attributes + * @param {Boolean} absolute Marks zoom scale as relative or absolute + */ +SvgPanZoom.prototype.publicZoomAtPoint = function (scale, point, absolute) { + if (absolute) { + // Transform zoom into a relative value + scale = this.computeFromRelativeZoom(scale); + } + + // If not a SVGPoint but has x and y then create a SVGPoint + if (getType(point) !== "SVGPoint") { + if ("x" in point && "y" in point) { + point = createSVGPoint(this.svg, point.x, point.y); + } else { + throw new Error("Given point is invalid"); + } + } + + this.zoomAtPoint(scale, point, absolute); +}; + +/** + * Get zoom scale + * + * @return {Float} zoom scale + */ +SvgPanZoom.prototype.getZoom = function () { + return this.viewport.getZoom(); +}; + +/** + * Get zoom scale for public usage + * + * @return {Float} zoom scale + */ +SvgPanZoom.prototype.getRelativeZoom = function () { + return this.viewport.getRelativeZoom(); +}; + +/** + * Compute actual zoom from public zoom + * + * @param {Float} zoom + * @return {Float} zoom scale + */ +SvgPanZoom.prototype.computeFromRelativeZoom = function (zoom) { + return zoom * this.viewport.getOriginalState().zoom; +}; + +/** + * Set zoom to initial state + */ +SvgPanZoom.prototype.resetZoom = function () { + var originalState = this.viewport.getOriginalState(); + + this.zoom(originalState.zoom, true); +}; + +/** + * Set pan to initial state + */ +SvgPanZoom.prototype.resetPan = function () { + this.pan(this.viewport.getOriginalState()); +}; + +/** + * Set pan and zoom to initial state + */ +SvgPanZoom.prototype.reset = function () { + this.resetZoom(); + this.resetPan(); +}; + +/** + * Handle double click event + * See handleMouseDown() for alternate detection method + * + * @param {Event} evt + */ +SvgPanZoom.prototype.handleDblClick = function (evt) { + if (this.options.preventMouseEventsDefault) { + if (evt.preventDefault) { + evt.preventDefault(); + } else { + evt.returnValue = false; + } + } + + // Check if target was a control button + if (this.options.controlIconsEnabled) { + var targetClass = evt.target.getAttribute("class") || ""; + if (targetClass.indexOf("svg-pan-zoom-control") > -1) { + return false; + } + } + + var zoomFactor; + + if (evt.shiftKey) { + zoomFactor = 1 / ((1 + this.options.zoomScaleSensitivity) * 2); // zoom out when shift key pressed + } else { + zoomFactor = (1 + this.options.zoomScaleSensitivity) * 2; + } + + var point = getEventPoint(evt, this.svg).matrixTransform( + this.svg.getScreenCTM().inverse() + ); + this.zoomAtPoint(zoomFactor, point); +}; + +/** + * Handle click event + * + * @param {Event} evt + */ +SvgPanZoom.prototype.handleMouseDown = function (evt, prevEvt) { + this.svg.style.cursor = "grabbing"; + if (this.options.preventMouseEventsDefault) { + if (evt.preventDefault) { + evt.preventDefault(); + } else { + evt.returnValue = false; + } + } + + mouseAndTouchNormalize(evt, this.svg); + + // Double click detection; more consistent than ondblclick + if (this.options.dblClickZoomEnabled && isDblClick(evt, prevEvt)) { + this.handleDblClick(evt); + } else { + // Pan mode + this.state = "pan"; + this.firstEventCTM = this.viewport.getCTM(); + this.stateOrigin = getEventPoint(evt, this.svg).matrixTransform( + this.firstEventCTM.inverse() + ); + } +}; + +/** + * Handle mouse move event + * + * @param {Event} evt + */ +SvgPanZoom.prototype.handleMouseMove = function (evt) { + if (this.options.preventMouseEventsDefault) { + if (evt.preventDefault) { + evt.preventDefault(); + } else { + evt.returnValue = false; + } + } + + if (this.state === "pan" && this.options.panEnabled) { + // Pan mode + var point = getEventPoint(evt, this.svg).matrixTransform( + this.firstEventCTM.inverse() + ), + viewportCTM = this.firstEventCTM.translate( + point.x - this.stateOrigin.x, + point.y - this.stateOrigin.y + ); + + this.viewport.setCTM(viewportCTM); + } +}; + +/** + * Handle mouse button release event + * + * @param {Event} evt + */ +SvgPanZoom.prototype.handleMouseUp = function (evt) { + this.svg.style.cursor = "grab"; + if (this.options.preventMouseEventsDefault) { + if (evt.preventDefault) { + evt.preventDefault(); + } else { + evt.returnValue = false; + } + } + + if (this.state === "pan") { + // Quit pan mode + this.state = "none"; + } +}; + +/** + * Adjust viewport size (only) so it will fit in SVG + * Does not center image + */ +SvgPanZoom.prototype.fit = function () { + var viewBox = this.viewport.getViewBox(), + newScale = Math.min( + this.width / viewBox.width, + this.height / viewBox.height + ); + + this.zoom(newScale, true); +}; + +/** + * Adjust viewport size (only) so it will contain the SVG + * Does not center image + */ +SvgPanZoom.prototype.contain = function () { + var viewBox = this.viewport.getViewBox(), + newScale = Math.max( + this.width / viewBox.width, + this.height / viewBox.height + ); + + this.zoom(newScale, true); +}; + +/** + * Adjust viewport pan (only) so it will be centered in SVG + * Does not zoom/fit/contain image + */ +SvgPanZoom.prototype.center = function () { + var viewBox = this.viewport.getViewBox(), + offsetX = + (this.width - (viewBox.width + viewBox.x * 2) * this.getZoom()) * 0.5, + offsetY = + (this.height - (viewBox.height + viewBox.y * 2) * this.getZoom()) * 0.5; + + this.getPublicInstance().pan({ x: offsetX, y: offsetY }); +}; + +/** + * Update content cached BorderBox + * Use when viewport contents change + */ +SvgPanZoom.prototype.updateBBox = function () { + this.viewport.simpleViewBoxCache(); +}; + +/** + * Pan to a rendered position + * + * @param {Object} point {x: 0, y: 0} + */ +SvgPanZoom.prototype.pan = function (point) { + var viewportCTM = this.viewport.getCTM(); + viewportCTM.e = point.x; + viewportCTM.f = point.y; + this.viewport.setCTM(viewportCTM); +}; + +/** + * Relatively pan the graph by a specified rendered position vector + * + * @param {Object} point {x: 0, y: 0} + */ +SvgPanZoom.prototype.panBy = function (point) { + var viewportCTM = this.viewport.getCTM(); + viewportCTM.e += point.x; + viewportCTM.f += point.y; + this.viewport.setCTM(viewportCTM); +}; + +/** + * Get pan vector + * + * @return {Object} {x: 0, y: 0} + */ +SvgPanZoom.prototype.getPan = function () { + var state = this.viewport.getState(); + + return { x: state.x, y: state.y }; +}; + +/** + * Recalculates cached svg dimensions and controls position + */ +SvgPanZoom.prototype.resize = function () { + // Get dimensions + var boundingClientRectNormalized = getBoundingClientRectNormalized(this.svg); + this.width = boundingClientRectNormalized.width; + this.height = boundingClientRectNormalized.height; + + // Recalculate original state + var viewport = this.viewport; + viewport.options.width = this.width; + viewport.options.height = this.height; + viewport.processCTM(); + + // Reposition control icons by re-enabling them + if (this.options.controlIconsEnabled) { + this.getPublicInstance().disableControlIcons(); + this.getPublicInstance().enableControlIcons(); + } +}; + +/** + * Unbind mouse events, free callbacks and destroy public instance + */ +SvgPanZoom.prototype.destroy = function () { + var that = this; + + // Free callbacks + this.beforeZoom = null; + this.onZoom = null; + this.beforePan = null; + this.onPan = null; + this.onUpdatedCTM = null; + + // Destroy custom event handlers + // eslint-disable-next-line eqeqeq + if (this.options.customEventsHandler != null) { + this.options.customEventsHandler.destroy({ + svgElement: this.svg, + eventsListenerElement: this.options.eventsListenerElement, + instance: this.getPublicInstance(), + }); + } + + // Unbind eventListeners + for (var event in this.eventListeners) { + (this.options.eventsListenerElement || this.svg).removeEventListener( + event, + this.eventListeners[event], + !this.options.preventMouseEventsDefault ? passiveListenerOption : false + ); + } + + // Unbind wheelListener + this.disableMouseWheelZoom(); + + // Remove control icons + this.getPublicInstance().disableControlIcons(); + + // Reset zoom and pan + this.reset(); + + // Remove instance from instancesStore + instancesStore = instancesStore.filter(function (instance) { + return instance.svg !== that.svg; + }); + + // Delete options and its contents + delete this.options; + + // Delete viewport to make public shadow viewport functions uncallable + delete this.viewport; + + // Destroy public instance and rewrite getPublicInstance + delete this.publicInstance; + delete this.pi; + this.getPublicInstance = function () { + return null; + }; +}; + +/** + * Returns a public instance object + * + * @return {Object} Public instance object + */ +SvgPanZoom.prototype.getPublicInstance = function () { + var that = this; + + // Create cache + if (!this.publicInstance) { + this.publicInstance = this.pi = { + // Pan + enablePan: function () { + that.options.panEnabled = true; + return that.pi; + }, + disablePan: function () { + that.options.panEnabled = false; + return that.pi; + }, + isPanEnabled: function () { + return !!that.options.panEnabled; + }, + pan: function (point) { + that.pan(point); + return that.pi; + }, + panBy: function (point) { + that.panBy(point); + return that.pi; + }, + getPan: function () { + return that.getPan(); + }, + // Pan event + setBeforePan: function (fn) { + that.options.beforePan = + fn === null ? null : proxy(fn, that.publicInstance); + return that.pi; + }, + setOnPan: function (fn) { + that.options.onPan = + fn === null ? null : proxy(fn, that.publicInstance); + return that.pi; + }, + // Zoom and Control Icons + enableZoom: function () { + that.options.zoomEnabled = true; + return that.pi; + }, + disableZoom: function () { + that.options.zoomEnabled = false; + return that.pi; + }, + isZoomEnabled: function () { + return !!that.options.zoomEnabled; + }, + enableControlIcons: function () { + if (!that.options.controlIconsEnabled) { + that.options.controlIconsEnabled = true; + enable(that); + } + return that.pi; + }, + disableControlIcons: function () { + if (that.options.controlIconsEnabled) { + that.options.controlIconsEnabled = false; + disable(that); + } + return that.pi; + }, + isControlIconsEnabled: function () { + return !!that.options.controlIconsEnabled; + }, + // Double click zoom + enableDblClickZoom: function () { + that.options.dblClickZoomEnabled = true; + return that.pi; + }, + disableDblClickZoom: function () { + that.options.dblClickZoomEnabled = false; + return that.pi; + }, + isDblClickZoomEnabled: function () { + return !!that.options.dblClickZoomEnabled; + }, + // Mouse wheel zoom + enableMouseWheelZoom: function () { + that.enableMouseWheelZoom(); + return that.pi; + }, + disableMouseWheelZoom: function () { + that.disableMouseWheelZoom(); + return that.pi; + }, + isMouseWheelZoomEnabled: function () { + return !!that.options.mouseWheelZoomEnabled; + }, + // Zoom scale and bounds + setZoomScaleSensitivity: function (scale) { + that.options.zoomScaleSensitivity = scale; + return that.pi; + }, + setMinZoom: function (zoom) { + that.options.minZoom = zoom; + return that.pi; + }, + setMaxZoom: function (zoom) { + that.options.maxZoom = zoom; + return that.pi; + }, + // Zoom event + setBeforeZoom: function (fn) { + that.options.beforeZoom = + fn === null ? null : proxy(fn, that.publicInstance); + return that.pi; + }, + setOnZoom: function (fn) { + that.options.onZoom = + fn === null ? null : proxy(fn, that.publicInstance); + return that.pi; + }, + // Zooming + zoom: function (scale) { + that.publicZoom(scale, true); + return that.pi; + }, + zoomBy: function (scale) { + that.publicZoom(scale, false); + return that.pi; + }, + zoomAtPoint: function (scale, point) { + that.publicZoomAtPoint(scale, point, true); + return that.pi; + }, + zoomAtPointBy: function (scale, point) { + that.publicZoomAtPoint(scale, point, false); + return that.pi; + }, + zoomIn: function () { + this.zoomBy(1 + that.options.zoomScaleSensitivity); + return that.pi; + }, + zoomOut: function () { + this.zoomBy(1 / (1 + that.options.zoomScaleSensitivity)); + return that.pi; + }, + getZoom: function () { + return that.getRelativeZoom(); + }, + // CTM update + setOnUpdatedCTM: function (fn) { + that.options.onUpdatedCTM = + fn === null ? null : proxy(fn, that.publicInstance); + return that.pi; + }, + // Reset + resetZoom: function () { + that.resetZoom(); + return that.pi; + }, + resetPan: function () { + that.resetPan(); + return that.pi; + }, + reset: function () { + that.reset(); + return that.pi; + }, + // Fit, Contain and Center + fit: function () { + that.fit(); + return that.pi; + }, + contain: function () { + that.contain(); + return that.pi; + }, + center: function () { + that.center(); + return that.pi; + }, + // Size and Resize + updateBBox: function () { + that.updateBBox(); + return that.pi; + }, + resize: function () { + that.resize(); + return that.pi; + }, + getSizes: function () { + return { + width: that.width, + height: that.height, + realZoom: that.getZoom(), + viewBox: that.viewport.getViewBox(), + }; + }, + // Destroy + destroy: function () { + that.destroy(); + return that.pi; + }, + }; + } + + return this.publicInstance; +}; + +/** + * Stores pairs of instances of SvgPanZoom and SVG + * Each pair is represented by an object {svg: SVGSVGElement, instance: SvgPanZoom} + * + * @type {Array} + */ +var instancesStore = []; + +var svgPanZoom = function (elementOrSelector, options) { + var svg = getSvg(elementOrSelector); + + if (svg === null) { + return null; + } else { + // Look for existent instance + for (var i = instancesStore.length - 1; i >= 0; i--) { + if (instancesStore[i].svg === svg) { + return instancesStore[i].instance.getPublicInstance(); + } + } + + // If instance not found - create one + instancesStore.push({ + svg: svg, + instance: new SvgPanZoom(svg, options), + }); + + // Return just pushed instance + return instancesStore[ + instancesStore.length - 1 + ].instance.getPublicInstance(); + } +}; + +export default svgPanZoom; diff --git a/src/svg-pan-zoom/svg-utilities.js b/src/svg-pan-zoom/svg-utilities.js new file mode 100644 index 0000000..585e5fc --- /dev/null +++ b/src/svg-pan-zoom/svg-utilities.js @@ -0,0 +1,170 @@ +import { isElement, throttle, mouseAndTouchNormalize } from "./utilities"; +var _browser = "unknown"; + +// http://stackoverflow.com/questions/9847580/how-to-detect-safari-chrome-ie-firefox-and-opersa-browser +if (/*@cc_on!@*/ false || !!document.documentMode) { + // internet explorer + _browser = "ie"; +} + +export const svgNS = "http://www.w3.org/2000/svg"; +export const xmlNS = "http://www.w3.org/XML/1998/namespace"; +export const xmlnsNS = "http://www.w3.org/2000/xmlns/"; +export const xlinkNS = "http://www.w3.org/1999/xlink"; +export const evNS = "http://www.w3.org/2001/xml-events"; +export function getBoundingClientRectNormalized(svg) { + if (svg.clientWidth && svg.clientHeight) { + return { width: svg.clientWidth, height: svg.clientHeight }; + } else if (!!svg.getBoundingClientRect()) { + return svg.getBoundingClientRect(); + } else { + throw new Error("Cannot get BoundingClientRect for SVG."); + } +} +export function getOrCreateViewport(svg, selector) { + var viewport = null; + + if (isElement(selector)) { + viewport = selector; + } else { + viewport = svg.querySelector(selector); + } + + // Check if there is just one main group in SVG + if (!viewport) { + var childNodes = Array.prototype.slice + .call(svg.childNodes || svg.children) + .filter(function (el) { + return el.nodeName !== "defs" && el.nodeName !== "#text"; + }); + + // Node name should be SVGGElement and should have no transform attribute + // Groups with transform are not used as viewport because it involves parsing of all transform possibilities + if ( + childNodes.length === 1 && + childNodes[0].nodeName === "g" && + childNodes[0].getAttribute("transform") === null + ) { + viewport = childNodes[0]; + } + } + + // If no favorable group element exists then create one + if (!viewport) { + var viewportId = "viewport-" + new Date().toISOString().replace(/\D/g, ""); + viewport = document.createElementNS(svgNS, "g"); + viewport.setAttribute("id", viewportId); + + // Internet Explorer (all versions?) can't use childNodes, but other browsers prefer (require?) using childNodes + var svgChildren = svg.childNodes || svg.children; + if (!!svgChildren && svgChildren.length > 0) { + for (var i = svgChildren.length; i > 0; i--) { + // Move everything into viewport except defs + if (svgChildren[svgChildren.length - i].nodeName !== "defs") { + viewport.appendChild(svgChildren[svgChildren.length - i]); + } + } + } + svg.appendChild(viewport); + } + + // Parse class names + var classNames = []; + if (viewport.getAttribute("class")) { + classNames = viewport.getAttribute("class").split(" "); + } + + // Set class (if not set already) + if (!~classNames.indexOf("svg-pan-zoom_viewport")) { + classNames.push("svg-pan-zoom_viewport"); + viewport.setAttribute("class", classNames.join(" ")); + } + + return viewport; +} +export function setupSvgAttributes(svg) { + // Setting default attributes + svg.setAttribute("xmlns", svgNS); + svg.setAttributeNS(xmlnsNS, "xmlns:xlink", xlinkNS); + svg.setAttributeNS(xmlnsNS, "xmlns:ev", evNS); + + // Needed for Internet Explorer, otherwise the viewport overflows + if (svg.parentNode !== null) { + var style = svg.getAttribute("style") || ""; + if (style.toLowerCase().indexOf("overflow") === -1) { + svg.setAttribute("style", "overflow: hidden; " + style); + } + } +} +export const internetExplorerRedisplayInterval = 300; +export const refreshDefsGlobal = throttle( + function () { + var allDefs = document.querySelectorAll("defs"); + var allDefsCount = allDefs.length; + for (var i = 0; i < allDefsCount; i++) { + var thisDefs = allDefs[i]; + thisDefs.parentNode.insertBefore(thisDefs, thisDefs); + } + }, + this ? internetExplorerRedisplayInterval : null +); +export function setCTM(element, matrix, defs) { + var that = this, + s = + "matrix(" + + matrix.a + + "," + + matrix.b + + "," + + matrix.c + + "," + + matrix.d + + "," + + matrix.e + + "," + + matrix.f + + ")"; + + element.setAttributeNS(null, "transform", s); + if ("transform" in element.style) { + element.style.transform = s; + } else if ("-ms-transform" in element.style) { + element.style["-ms-transform"] = s; + } else if ("-webkit-transform" in element.style) { + element.style["-webkit-transform"] = s; + } + + // IE has a bug that makes markers disappear on zoom (when the matrix "a" and/or "d" elements change) + // see http://stackoverflow.com/questions/17654578/svg-marker-does-not-work-in-ie9-10 + // and http://srndolha.wordpress.com/2013/11/25/svg-line-markers-may-disappear-in-internet-explorer-11/ + if (_browser === "ie" && !!defs) { + // this refresh is intended for redisplaying the SVG during zooming + defs.parentNode.insertBefore(defs, defs); + // this refresh is intended for redisplaying the other SVGs on a page when panning a given SVG + // it is also needed for the given SVG itself, on zoomEnd, if the SVG contains any markers that + // are located under any other element(s). + window.setTimeout(function () { + that.refreshDefsGlobal(); + }, that.internetExplorerRedisplayInterval); + } +} +export function getEventPoint(evt, svg) { + var point = svg.createSVGPoint(); + + mouseAndTouchNormalize(evt, svg); + + point.x = evt.clientX; + point.y = evt.clientY; + + return point; +} +export function getSvgCenterPoint(svg, width, height) { + return createSVGPoint(svg, width / 2, height / 2); +} +export function createSVGPoint(svg, x, y) { + var point = svg.createSVGPoint(); + point.x = x; + point.y = y; + + return point; +} diff --git a/src/svg-pan-zoom/uniwheel.js b/src/svg-pan-zoom/uniwheel.js new file mode 100644 index 0000000..fb34e46 --- /dev/null +++ b/src/svg-pan-zoom/uniwheel.js @@ -0,0 +1,149 @@ +// uniwheel 0.1.2 (customized) +// A unified cross browser mouse wheel event handler +// https://github.com/teemualap/uniwheel + +//Full details: https://developer.mozilla.org/en-US/docs/Web/Reference/Events/wheel + +var prefix = "", + _addEventListener, + _removeEventListener, + support, + fns = []; +var passiveOption = { passive: true }; + +// detect event model +if (window.addEventListener) { + _addEventListener = "addEventListener"; + _removeEventListener = "removeEventListener"; +} else { + _addEventListener = "attachEvent"; + _removeEventListener = "detachEvent"; + prefix = "on"; +} + +// detect available wheel event +support = + "onwheel" in document.createElement("div") + ? "wheel" // Modern browsers support "wheel" + : document.onmousewheel !== undefined + ? "mousewheel" // Webkit and IE support at least "mousewheel" + : "DOMMouseScroll"; // let's assume that remaining browsers are older Firefox + +function createCallback(element, callback) { + var fn = function (originalEvent) { + !originalEvent && (originalEvent = window.event); + + // create a normalized event object + var event = { + // keep a ref to the original event object + originalEvent: originalEvent, + target: originalEvent.target || originalEvent.srcElement, + type: "wheel", + deltaMode: originalEvent.type == "MozMousePixelScroll" ? 0 : 1, + deltaX: 0, + delatZ: 0, + preventDefault: function () { + originalEvent.preventDefault + ? originalEvent.preventDefault() + : (originalEvent.returnValue = false); + }, + }; + + // calculate deltaY (and deltaX) according to the event + if (support == "mousewheel") { + event.deltaY = (-1 / 40) * originalEvent.wheelDelta; + // Webkit also support wheelDeltaX + originalEvent.wheelDeltaX && + (event.deltaX = (-1 / 40) * originalEvent.wheelDeltaX); + } else { + event.deltaY = originalEvent.detail; + } + + // it's time to fire the callback + return callback(event); + }; + + fns.push({ + element: element, + fn: fn, + }); + + return fn; +} + +function getCallback(element) { + for (var i = 0; i < fns.length; i++) { + if (fns[i].element === element) { + return fns[i].fn; + } + } + return function () {}; +} + +function removeCallback(element) { + for (var i = 0; i < fns.length; i++) { + if (fns[i].element === element) { + return fns.splice(i, 1); + } + } +} + +function _addWheelListener(elem, eventName, callback, isPassiveListener) { + var cb; + + if (support === "wheel") { + cb = callback; + } else { + cb = createCallback(elem, callback); + } + + elem[_addEventListener]( + prefix + eventName, + cb, + isPassiveListener ? passiveOption : false + ); +} + +function _removeWheelListener(elem, eventName, callback, isPassiveListener) { + var cb; + + if (support === "wheel") { + cb = callback; + } else { + cb = getCallback(elem); + } + + elem[_removeEventListener]( + prefix + eventName, + cb, + isPassiveListener ? passiveOption : false + ); + + removeCallback(elem); +} + +function addWheelListener(elem, callback, isPassiveListener) { + _addWheelListener(elem, support, callback, isPassiveListener); + + // handle MozMousePixelScroll in older Firefox + if (support == "DOMMouseScroll") { + _addWheelListener(elem, "MozMousePixelScroll", callback, isPassiveListener); + } +} + +function removeWheelListener(elem, callback, isPassiveListener) { + _removeWheelListener(elem, support, callback, isPassiveListener); + + // handle MozMousePixelScroll in older Firefox + if (support == "DOMMouseScroll") { + _removeWheelListener( + elem, + "MozMousePixelScroll", + callback, + isPassiveListener + ); + } +} + +export const on = addWheelListener; +export const off = removeWheelListener; diff --git a/src/svg-pan-zoom/utilities.js b/src/svg-pan-zoom/utilities.js new file mode 100644 index 0000000..4785805 --- /dev/null +++ b/src/svg-pan-zoom/utilities.js @@ -0,0 +1,207 @@ +export function extend(target, source) { + target = target || {}; + for (var prop in source) { + // Go recursively + if (isObject(source[prop])) { + target[prop] = extend(target[prop], source[prop]); + } else { + target[prop] = source[prop]; + } + } + return target; +} +export function isElement(o) { + return ( + o instanceof HTMLElement || + o instanceof SVGElement || + o instanceof SVGSVGElement || //DOM2 + (o && + typeof o === "object" && + o !== null && + o.nodeType === 1 && + typeof o.nodeName === "string") + ); +} +export function isObject(o) { + return Object.prototype.toString.call(o) === "[object Object]"; +} +export function isNumber(n) { + return !isNaN(parseFloat(n)) && isFinite(n); +} +export function getSvg(elementOrSelector) { + var element, svg; + + if (!isElement(elementOrSelector)) { + // If selector provided + if ( + typeof elementOrSelector === "string" || + elementOrSelector instanceof String + ) { + // Try to find the element + element = document.querySelector(elementOrSelector); + + if (!element) { + throw new Error( + "Provided selector did not find any elements. Selector: " + + elementOrSelector + ); + return null; + } + } else { + throw new Error("Provided selector is not an HTML object nor String"); + return null; + } + } else { + element = elementOrSelector; + } + + if (element.tagName.toLowerCase() === "svg") { + svg = element; + } else { + if (element.tagName.toLowerCase() === "object") { + svg = element.contentDocument.documentElement; + } else { + if (element.tagName.toLowerCase() === "embed") { + svg = element.getSVGDocument().documentElement; + } else { + if (element.tagName.toLowerCase() === "img") { + throw new Error( + 'Cannot script an SVG in an "img" element. Please use an "object" element or an in-line SVG.' + ); + } else { + throw new Error("Cannot get SVG."); + } + return null; + } + } + } + + return svg; +} +export function proxy(fn, context) { + return function () { + return fn.apply(context, arguments); + }; +} +export function getType(o) { + return Object.prototype.toString + .apply(o) + .replace(/^\[object\s/, "") + .replace(/\]$/, ""); +} +export function mouseAndTouchNormalize(evt, svg) { + // If no clientX then fallback + if (evt.clientX === void 0 || evt.clientX === null) { + // Fallback + evt.clientX = 0; + evt.clientY = 0; + + // If it is a touch event + if (evt.touches !== void 0 && evt.touches.length) { + if (evt.touches[0].clientX !== void 0) { + evt.clientX = evt.touches[0].clientX; + evt.clientY = evt.touches[0].clientY; + } else if (evt.touches[0].pageX !== void 0) { + var rect = svg.getBoundingClientRect(); + + evt.clientX = evt.touches[0].pageX - rect.left; + evt.clientY = evt.touches[0].pageY - rect.top; + } + // If it is a custom event + } else if (evt.originalEvent !== void 0) { + if (evt.originalEvent.clientX !== void 0) { + evt.clientX = evt.originalEvent.clientX; + evt.clientY = evt.originalEvent.clientY; + } + } + } +} +export function isDblClick(evt, prevEvt) { + // Double click detected by browser + if (evt.detail === 2) { + return true; + } + + // Try to compare events + else if (prevEvt !== void 0 && prevEvt !== null) { + var timeStampDiff = evt.timeStamp - prevEvt.timeStamp, // should be lower than 250 ms + touchesDistance = Math.sqrt( + Math.pow(evt.clientX - prevEvt.clientX, 2) + + Math.pow(evt.clientY - prevEvt.clientY, 2) + ); + + return timeStampDiff < 250 && touchesDistance < 10; + } + + // Nothing found + return false; +} +export const now = + Date.now || + function () { + return new Date().getTime(); + }; +export function throttle(func, wait, options) { + var that = this; + var context, args, result; + var timeout = null; + var previous = 0; + if (!options) { + options = {}; + } + var later = function () { + previous = options.leading === false ? 0 : that.now(); + timeout = null; + result = func.apply(context, args); + if (!timeout) { + context = args = null; + } + }; + return function () { + var now = that.now(); + if (!previous && options.leading === false) { + previous = now; + } + var remaining = wait - (now - previous); + context = this; // eslint-disable-line consistent-this + args = arguments; + if (remaining <= 0 || remaining > wait) { + clearTimeout(timeout); + timeout = null; + previous = now; + result = func.apply(context, args); + if (!timeout) { + context = args = null; + } + } else if (!timeout && options.trailing !== false) { + timeout = setTimeout(later, remaining); + } + return result; + }; +} +export function createRequestAnimationFrame(refreshRate) { + var timeout = null; + + // Convert refreshRate to timeout + if (refreshRate !== "auto" && refreshRate < 60 && refreshRate > 1) { + timeout = Math.floor(1000 / refreshRate); + } + + if (timeout === null) { + return window.requestAnimationFrame || requestTimeout(33); + } else { + return requestTimeout(timeout); + } +} + +/** + * Create a callback that will execute after a given timeout + * + * @param {Function} timeout + * @return {Function} + */ +function requestTimeout(timeout) { + return function (callback) { + window.setTimeout(callback, timeout); + }; +} diff --git a/src/tooltip.ts b/src/tooltip.ts index 63f616a..dc4ff58 100644 --- a/src/tooltip.ts +++ b/src/tooltip.ts @@ -1,24 +1,25 @@ export default function Tooltip(svg: HTMLObjectElement, element: HTMLElement) { - function setTooltip(e: MouseEvent, content: string) { - element.innerHTML = content; - element.style.display = "block"; + element.addEventListener("mouseover", () => (element.style.display = "none")); + function setTooltip(e: MouseEvent, content: string) { + element.innerHTML = content; + element.style.display = "block"; - element.style.left = (e.pageX + 10) + "px"; + element.style.left = e.pageX + 10 + "px"; - if ( - element.getBoundingClientRect().right > - svg.getBoundingClientRect().right - ) { - element.style.left = (e.pageX - element.clientWidth) + "px"; - element.style.top = (e.pageY - element.clientHeight - 10) + "px"; - } else { - element.style.top = (e.pageY - (element.clientHeight / 2)) + "px"; - } - } + if ( + element.getBoundingClientRect().right > svg.getBoundingClientRect().right + ) { + element.style.left = e.pageX - element.clientWidth + "px"; + element.style.top = e.pageY - element.clientHeight - 10 + "px"; + } else { + element.style.top = e.pageY - element.clientHeight / 2 + "px"; + } + } - function hideTooltip() { - element.style.display = "none"; - } + function hideTooltip() { + element.style.display = "none"; + element.innerHTML = ""; + } - return { setTooltip, hideTooltip }; + return { setTooltip, hideTooltip }; } diff --git a/tsconfig.json b/tsconfig.json index eac16d1..b65fb5e 100644 --- a/tsconfig.json +++ b/tsconfig.json @@ -1,19 +1,21 @@ { - "compilerOptions": { - "target": "ESNext", - "useDefineForClassFields": true, - "module": "ESNext", - "lib": ["ESNext", "DOM"], - "moduleResolution": "Node", - "strict": true, - "resolveJsonModule": true, - "isolatedModules": true, - "esModuleInterop": true, - "noEmit": true, - "noUnusedLocals": true, - "noUnusedParameters": true, - "noImplicitReturns": true, - "skipLibCheck": true - }, - "include": ["src"] + "compilerOptions": { + "target": "ESNext", + "useDefineForClassFields": true, + "module": "ESNext", + "lib": ["ESNext", "DOM"], + "moduleResolution": "Node", + "strict": true, + "resolveJsonModule": true, + "isolatedModules": true, + "esModuleInterop": true, + "noEmit": true, + "noUnusedLocals": true, + "noUnusedParameters": true, + "noImplicitReturns": true, + "skipLibCheck": true, + "allowJs": true, + "checkJs": false + }, + "include": ["src"] } diff --git a/yarn.lock b/yarn.lock new file mode 100644 index 0000000..c1c5704 --- /dev/null +++ b/yarn.lock @@ -0,0 +1,300 @@ +# THIS IS AN AUTOGENERATED FILE. DO NOT EDIT THIS FILE DIRECTLY. +# yarn lockfile v1 + + +"@babel/helper-module-imports@^7.18.6": + version "7.18.6" + resolved "https://registry.yarnpkg.com/@babel/helper-module-imports/-/helper-module-imports-7.18.6.tgz#1e3ebdbbd08aad1437b428c50204db13c5a3ca6e" + integrity sha512-0NFvs3VkuSYbFi1x2Vd6tKrywq+z/cLeYC/RJNFrIX/30Bf5aiGYbtvGXolEktzJH8o5E5KJ3tT+nkxuuZFVlA== + dependencies: + "@babel/types" "^7.18.6" + +"@babel/helper-string-parser@^7.19.4": + version "7.19.4" + resolved "https://registry.yarnpkg.com/@babel/helper-string-parser/-/helper-string-parser-7.19.4.tgz#38d3acb654b4701a9b77fb0615a96f775c3a9e63" + integrity sha512-nHtDoQcuqFmwYNYPz3Rah5ph2p8PFeFCsZk9A/48dPc/rGocJ5J3hAAZ7pb76VWX3fZKu+uEr/FhH5jLx7umrw== + +"@babel/helper-validator-identifier@^7.19.1": + version "7.19.1" + resolved "https://registry.yarnpkg.com/@babel/helper-validator-identifier/-/helper-validator-identifier-7.19.1.tgz#7eea834cf32901ffdc1a7ee555e2f9c27e249ca2" + integrity sha512-awrNfaMtnHUr653GgGEs++LlAvW6w+DcPrOliSMXWCKo597CwL5Acf/wWdNkf/tfEQE3mjkeD1YOVZOUV/od1w== + +"@babel/types@^7.18.6": + version "7.20.2" + resolved "https://registry.yarnpkg.com/@babel/types/-/types-7.20.2.tgz#67ac09266606190f496322dbaff360fdaa5e7842" + integrity sha512-FnnvsNWgZCr232sqtXggapvlkk/tuwR/qhGzcmxI0GXLCjmPYQPzio2FbdlWuY6y1sHFfQKk+rRbUZ9VStQMog== + dependencies: + "@babel/helper-string-parser" "^7.19.4" + "@babel/helper-validator-identifier" "^7.19.1" + to-fast-properties "^2.0.0" + +"@esbuild/android-arm@0.15.13": + version "0.15.13" + resolved "https://registry.yarnpkg.com/@esbuild/android-arm/-/android-arm-0.15.13.tgz#ce11237a13ee76d5eae3908e47ba4ddd380af86a" + integrity sha512-RY2fVI8O0iFUNvZirXaQ1vMvK0xhCcl0gqRj74Z6yEiO1zAUa7hbsdwZM1kzqbxHK7LFyMizipfXT3JME+12Hw== + +"@esbuild/linux-loong64@0.15.13": + version "0.15.13" + resolved "https://registry.yarnpkg.com/@esbuild/linux-loong64/-/linux-loong64-0.15.13.tgz#64e8825bf0ce769dac94ee39d92ebe6272020dfc" + integrity sha512-+BoyIm4I8uJmH/QDIH0fu7MG0AEx9OXEDXnqptXCwKOlOqZiS4iraH1Nr7/ObLMokW3sOCeBNyD68ATcV9b9Ag== + +"@rollup/plugin-babel@^6.0.2": + version "6.0.2" + resolved "https://registry.yarnpkg.com/@rollup/plugin-babel/-/plugin-babel-6.0.2.tgz#92ad7a00cc0e4a6b59e1498cda9f907a9c0d2db3" + integrity sha512-Vnt8XIWYwCf3MD7qhBWYlP9pjSZvcE++nlPXhQYw6YNehl5742AzFbrV6h4BHb20VAOVUlIksVLymQCTwVCGDg== + dependencies: + "@babel/helper-module-imports" "^7.18.6" + "@rollup/pluginutils" "^5.0.1" + +"@rollup/pluginutils@^5.0.1": + version "5.0.2" + resolved "https://registry.yarnpkg.com/@rollup/pluginutils/-/pluginutils-5.0.2.tgz#012b8f53c71e4f6f9cb317e311df1404f56e7a33" + integrity sha512-pTd9rIsP92h+B6wWwFbW8RkZv4hiR/xKsqre4SIuAOaOEQRxi0lqLke9k2/7WegC85GgUs9pjmOjCUi3In4vwA== + dependencies: + "@types/estree" "^1.0.0" + estree-walker "^2.0.2" + picomatch "^2.3.1" + +"@types/estree@^1.0.0": + version "1.0.0" + resolved "https://registry.yarnpkg.com/@types/estree/-/estree-1.0.0.tgz#5fb2e536c1ae9bf35366eed879e827fa59ca41c2" + integrity sha512-WulqXMDUTYAXCjZnk6JtIHPigp55cVtDgDrO2gHRwhyJto21+1zbVCtOYB2L1F9w4qCQ0rOGWBnBe0FNTiEJIQ== + +"@types/node@^18.11.9": + version "18.11.9" + resolved "https://registry.yarnpkg.com/@types/node/-/node-18.11.9.tgz#02d013de7058cea16d36168ef2fc653464cfbad4" + integrity sha512-CRpX21/kGdzjOpFsZSkcrXMGIBWMGNIHXXBVFSH+ggkftxg+XYP20TESbh+zFvFj3EQOl5byk0HTRn1IL6hbqg== + +esbuild-android-64@0.15.13: + version "0.15.13" + resolved "https://registry.yarnpkg.com/esbuild-android-64/-/esbuild-android-64-0.15.13.tgz#5f25864055dbd62e250f360b38b4c382224063af" + integrity sha512-yRorukXBlokwTip+Sy4MYskLhJsO0Kn0/Fj43s1krVblfwP+hMD37a4Wmg139GEsMLl+vh8WXp2mq/cTA9J97g== + +esbuild-android-arm64@0.15.13: + version "0.15.13" + resolved "https://registry.yarnpkg.com/esbuild-android-arm64/-/esbuild-android-arm64-0.15.13.tgz#d8820f999314efbe8e0f050653a99ff2da632b0f" + integrity sha512-TKzyymLD6PiVeyYa4c5wdPw87BeAiTXNtK6amWUcXZxkV51gOk5u5qzmDaYSwiWeecSNHamFsaFjLoi32QR5/w== + +esbuild-darwin-64@0.15.13: + version "0.15.13" + resolved "https://registry.yarnpkg.com/esbuild-darwin-64/-/esbuild-darwin-64-0.15.13.tgz#99ae7fdaa43947b06cd9d1a1c3c2c9f245d81fd0" + integrity sha512-WAx7c2DaOS6CrRcoYCgXgkXDliLnFv3pQLV6GeW1YcGEZq2Gnl8s9Pg7ahValZkpOa0iE/ojRVQ87sbUhF1Cbg== + +esbuild-darwin-arm64@0.15.13: + version "0.15.13" + resolved "https://registry.yarnpkg.com/esbuild-darwin-arm64/-/esbuild-darwin-arm64-0.15.13.tgz#bafa1814354ad1a47adcad73de416130ef7f55e3" + integrity sha512-U6jFsPfSSxC3V1CLiQqwvDuj3GGrtQNB3P3nNC3+q99EKf94UGpsG9l4CQ83zBs1NHrk1rtCSYT0+KfK5LsD8A== + +esbuild-freebsd-64@0.15.13: + version "0.15.13" + resolved "https://registry.yarnpkg.com/esbuild-freebsd-64/-/esbuild-freebsd-64-0.15.13.tgz#84ef85535c5cc38b627d1c5115623b088d1de161" + integrity sha512-whItJgDiOXaDG/idy75qqevIpZjnReZkMGCgQaBWZuKHoElDJC1rh7MpoUgupMcdfOd+PgdEwNQW9DAE6i8wyA== + +esbuild-freebsd-arm64@0.15.13: + version "0.15.13" + resolved "https://registry.yarnpkg.com/esbuild-freebsd-arm64/-/esbuild-freebsd-arm64-0.15.13.tgz#033f21de434ec8e0c478054b119af8056763c2d8" + integrity sha512-6pCSWt8mLUbPtygv7cufV0sZLeylaMwS5Fznj6Rsx9G2AJJsAjQ9ifA+0rQEIg7DwJmi9it+WjzNTEAzzdoM3Q== + +esbuild-linux-32@0.15.13: + version "0.15.13" + resolved "https://registry.yarnpkg.com/esbuild-linux-32/-/esbuild-linux-32-0.15.13.tgz#54290ea8035cba0faf1791ce9ae6693005512535" + integrity sha512-VbZdWOEdrJiYApm2kkxoTOgsoCO1krBZ3quHdYk3g3ivWaMwNIVPIfEE0f0XQQ0u5pJtBsnk2/7OPiCFIPOe/w== + +esbuild-linux-64@0.15.13: + version "0.15.13" + resolved "https://registry.yarnpkg.com/esbuild-linux-64/-/esbuild-linux-64-0.15.13.tgz#4264249281ea388ead948614b57fb1ddf7779a2c" + integrity sha512-rXmnArVNio6yANSqDQlIO4WiP+Cv7+9EuAHNnag7rByAqFVuRusLbGi2697A5dFPNXoO//IiogVwi3AdcfPC6A== + +esbuild-linux-arm64@0.15.13: + version "0.15.13" + resolved "https://registry.yarnpkg.com/esbuild-linux-arm64/-/esbuild-linux-arm64-0.15.13.tgz#9323c333924f97a02bdd2ae8912b36298acb312d" + integrity sha512-alEMGU4Z+d17U7KQQw2IV8tQycO6T+rOrgW8OS22Ua25x6kHxoG6Ngry6Aq6uranC+pNWNMB6aHFPh7aTQdORQ== + +esbuild-linux-arm@0.15.13: + version "0.15.13" + resolved "https://registry.yarnpkg.com/esbuild-linux-arm/-/esbuild-linux-arm-0.15.13.tgz#b407f47b3ae721fe4e00e19e9f19289bef87a111" + integrity sha512-Ac6LpfmJO8WhCMQmO253xX2IU2B3wPDbl4IvR0hnqcPrdfCaUa2j/lLMGTjmQ4W5JsJIdHEdW12dG8lFS0MbxQ== + +esbuild-linux-mips64le@0.15.13: + version "0.15.13" + resolved "https://registry.yarnpkg.com/esbuild-linux-mips64le/-/esbuild-linux-mips64le-0.15.13.tgz#bdf905aae5c0bcaa8f83567fe4c4c1bdc1f14447" + integrity sha512-47PgmyYEu+yN5rD/MbwS6DxP2FSGPo4Uxg5LwIdxTiyGC2XKwHhHyW7YYEDlSuXLQXEdTO7mYe8zQ74czP7W8A== + +esbuild-linux-ppc64le@0.15.13: + version "0.15.13" + resolved "https://registry.yarnpkg.com/esbuild-linux-ppc64le/-/esbuild-linux-ppc64le-0.15.13.tgz#2911eae1c90ff58a3bd3259cb557235df25aa3b4" + integrity sha512-z6n28h2+PC1Ayle9DjKoBRcx/4cxHoOa2e689e2aDJSaKug3jXcQw7mM+GLg+9ydYoNzj8QxNL8ihOv/OnezhA== + +esbuild-linux-riscv64@0.15.13: + version "0.15.13" + resolved "https://registry.yarnpkg.com/esbuild-linux-riscv64/-/esbuild-linux-riscv64-0.15.13.tgz#1837c660be12b1d20d2a29c7189ea703f93e9265" + integrity sha512-+Lu4zuuXuQhgLUGyZloWCqTslcCAjMZH1k3Xc9MSEJEpEFdpsSU0sRDXAnk18FKOfEjhu4YMGaykx9xjtpA6ow== + +esbuild-linux-s390x@0.15.13: + version "0.15.13" + resolved "https://registry.yarnpkg.com/esbuild-linux-s390x/-/esbuild-linux-s390x-0.15.13.tgz#d52880ece229d1bd10b2d936b792914ffb07c7fc" + integrity sha512-BMeXRljruf7J0TMxD5CIXS65y7puiZkAh+s4XFV9qy16SxOuMhxhVIXYLnbdfLrsYGFzx7U9mcdpFWkkvy/Uag== + +esbuild-netbsd-64@0.15.13: + version "0.15.13" + resolved "https://registry.yarnpkg.com/esbuild-netbsd-64/-/esbuild-netbsd-64-0.15.13.tgz#de14da46f1d20352b43e15d97a80a8788275e6ed" + integrity sha512-EHj9QZOTel581JPj7UO3xYbltFTYnHy+SIqJVq6yd3KkCrsHRbapiPb0Lx3EOOtybBEE9EyqbmfW1NlSDsSzvQ== + +esbuild-openbsd-64@0.15.13: + version "0.15.13" + resolved "https://registry.yarnpkg.com/esbuild-openbsd-64/-/esbuild-openbsd-64-0.15.13.tgz#45e8a5fd74d92ad8f732c43582369c7990f5a0ac" + integrity sha512-nkuDlIjF/sfUhfx8SKq0+U+Fgx5K9JcPq1mUodnxI0x4kBdCv46rOGWbuJ6eof2n3wdoCLccOoJAbg9ba/bT2w== + +esbuild-sunos-64@0.15.13: + version "0.15.13" + resolved "https://registry.yarnpkg.com/esbuild-sunos-64/-/esbuild-sunos-64-0.15.13.tgz#f646ac3da7aac521ee0fdbc192750c87da697806" + integrity sha512-jVeu2GfxZQ++6lRdY43CS0Tm/r4WuQQ0Pdsrxbw+aOrHQPHV0+LNOLnvbN28M7BSUGnJnHkHm2HozGgNGyeIRw== + +esbuild-windows-32@0.15.13: + version "0.15.13" + resolved "https://registry.yarnpkg.com/esbuild-windows-32/-/esbuild-windows-32-0.15.13.tgz#fb4fe77c7591418880b3c9b5900adc4c094f2401" + integrity sha512-XoF2iBf0wnqo16SDq+aDGi/+QbaLFpkiRarPVssMh9KYbFNCqPLlGAWwDvxEVz+ywX6Si37J2AKm+AXq1kC0JA== + +esbuild-windows-64@0.15.13: + version "0.15.13" + resolved "https://registry.yarnpkg.com/esbuild-windows-64/-/esbuild-windows-64-0.15.13.tgz#1fca8c654392c0c31bdaaed168becfea80e20660" + integrity sha512-Et6htEfGycjDrtqb2ng6nT+baesZPYQIW+HUEHK4D1ncggNrDNk3yoboYQ5KtiVrw/JaDMNttz8rrPubV/fvPQ== + +esbuild-windows-arm64@0.15.13: + version "0.15.13" + resolved "https://registry.yarnpkg.com/esbuild-windows-arm64/-/esbuild-windows-arm64-0.15.13.tgz#4ffd01b6b2888603f1584a2fe96b1f6a6f2b3dd8" + integrity sha512-3bv7tqntThQC9SWLRouMDmZnlOukBhOCTlkzNqzGCmrkCJI7io5LLjwJBOVY6kOUlIvdxbooNZwjtBvj+7uuVg== + +esbuild@^0.15.9: + version "0.15.13" + resolved "https://registry.yarnpkg.com/esbuild/-/esbuild-0.15.13.tgz#7293480038feb2bafa91d3f6a20edab3ba6c108a" + integrity sha512-Cu3SC84oyzzhrK/YyN4iEVy2jZu5t2fz66HEOShHURcjSkOSAVL8C/gfUT+lDJxkVHpg8GZ10DD0rMHRPqMFaQ== + optionalDependencies: + "@esbuild/android-arm" "0.15.13" + "@esbuild/linux-loong64" "0.15.13" + esbuild-android-64 "0.15.13" + esbuild-android-arm64 "0.15.13" + esbuild-darwin-64 "0.15.13" + esbuild-darwin-arm64 "0.15.13" + esbuild-freebsd-64 "0.15.13" + esbuild-freebsd-arm64 "0.15.13" + esbuild-linux-32 "0.15.13" + esbuild-linux-64 "0.15.13" + esbuild-linux-arm "0.15.13" + esbuild-linux-arm64 "0.15.13" + esbuild-linux-mips64le "0.15.13" + esbuild-linux-ppc64le "0.15.13" + esbuild-linux-riscv64 "0.15.13" + esbuild-linux-s390x "0.15.13" + esbuild-netbsd-64 "0.15.13" + esbuild-openbsd-64 "0.15.13" + esbuild-sunos-64 "0.15.13" + esbuild-windows-32 "0.15.13" + esbuild-windows-64 "0.15.13" + esbuild-windows-arm64 "0.15.13" + +estree-walker@^2.0.2: + version "2.0.2" + resolved "https://registry.yarnpkg.com/estree-walker/-/estree-walker-2.0.2.tgz#52f010178c2a4c117a7757cfe942adb7d2da4cac" + integrity sha512-Rfkk/Mp/DL7JVje3u18FxFujQlTNR2q6QfMSMB7AvCBx91NGj/ba3kCfza0f6dVDbw7YlRf/nDrn7pQrCCyQ/w== + +fsevents@~2.3.2: + version "2.3.2" + resolved "https://registry.yarnpkg.com/fsevents/-/fsevents-2.3.2.tgz#8a526f78b8fdf4623b709e0b975c52c24c02fd1a" + integrity sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA== + +function-bind@^1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/function-bind/-/function-bind-1.1.1.tgz#a56899d3ea3c9bab874bb9773b7c5ede92f4895d" + integrity sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A== + +has@^1.0.3: + version "1.0.3" + resolved "https://registry.yarnpkg.com/has/-/has-1.0.3.tgz#722d7cbfc1f6aa8241f16dd814e011e1f41e8796" + integrity sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw== + dependencies: + function-bind "^1.1.1" + +is-core-module@^2.9.0: + version "2.11.0" + resolved "https://registry.yarnpkg.com/is-core-module/-/is-core-module-2.11.0.tgz#ad4cb3e3863e814523c96f3f58d26cc570ff0144" + integrity sha512-RRjxlvLDkD1YJwDbroBHMb+cukurkDWNyHx7D3oNB5x9rb5ogcksMC5wHCadcXoo67gVr/+3GFySh3134zi6rw== + dependencies: + has "^1.0.3" + +nanoid@^3.3.4: + version "3.3.4" + resolved "https://registry.yarnpkg.com/nanoid/-/nanoid-3.3.4.tgz#730b67e3cd09e2deacf03c027c81c9d9dbc5e8ab" + integrity sha512-MqBkQh/OHTS2egovRtLk45wEyNXwF+cokD+1YPf9u5VfJiRdAiRwB2froX5Co9Rh20xs4siNPm8naNotSD6RBw== + +path-parse@^1.0.7: + version "1.0.7" + resolved "https://registry.yarnpkg.com/path-parse/-/path-parse-1.0.7.tgz#fbc114b60ca42b30d9daf5858e4bd68bbedb6735" + integrity sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw== + +picocolors@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/picocolors/-/picocolors-1.0.0.tgz#cb5bdc74ff3f51892236eaf79d68bc44564ab81c" + integrity sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ== + +picomatch@^2.3.1: + version "2.3.1" + resolved "https://registry.yarnpkg.com/picomatch/-/picomatch-2.3.1.tgz#3ba3833733646d9d3e4995946c1365a67fb07a42" + integrity sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA== + +postcss@^8.4.18: + version "8.4.18" + resolved "https://registry.yarnpkg.com/postcss/-/postcss-8.4.18.tgz#6d50046ea7d3d66a85e0e782074e7203bc7fbca2" + integrity sha512-Wi8mWhncLJm11GATDaQKobXSNEYGUHeQLiQqDFG1qQ5UTDPTEvKw0Xt5NsTpktGTwLps3ByrWsBrG0rB8YQ9oA== + dependencies: + nanoid "^3.3.4" + picocolors "^1.0.0" + source-map-js "^1.0.2" + +resolve@^1.22.1: + version "1.22.1" + resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.22.1.tgz#27cb2ebb53f91abb49470a928bba7558066ac177" + integrity sha512-nBpuuYuY5jFsli/JIs1oldw6fOQCBioohqWZg/2hiaOybXOft4lonv85uDOKXdf8rhyK159cxU5cDcK/NKk8zw== + dependencies: + is-core-module "^2.9.0" + path-parse "^1.0.7" + supports-preserve-symlinks-flag "^1.0.0" + +rollup@^2.79.1: + version "2.79.1" + resolved "https://registry.yarnpkg.com/rollup/-/rollup-2.79.1.tgz#bedee8faef7c9f93a2647ac0108748f497f081c7" + integrity sha512-uKxbd0IhMZOhjAiD5oAFp7BqvkA4Dv47qpOCtaNvng4HBwdbWtdOh8f5nZNuk2rp51PMGk3bzfWu5oayNEuYnw== + optionalDependencies: + fsevents "~2.3.2" + +source-map-js@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/source-map-js/-/source-map-js-1.0.2.tgz#adbc361d9c62df380125e7f161f71c826f1e490c" + integrity sha512-R0XvVJ9WusLiqTCEiGCmICCMplcCkIwwR11mOSD9CR5u+IXYdiseeEuXCVAjS54zqwkLcPNnmU4OeJ6tUrWhDw== + +supports-preserve-symlinks-flag@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz#6eda4bd344a3c94aea376d4cc31bc77311039e09" + integrity sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w== + +to-fast-properties@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/to-fast-properties/-/to-fast-properties-2.0.0.tgz#dc5e698cbd079265bc73e0377681a4e4e83f616e" + integrity sha512-/OaKK0xYrs3DmxRYqL/yDc+FxFUVYhDlXMhRmv3z915w2HF1tnN1omB354j8VUGO/hbRzyD6Y3sA7v7GS/ceog== + +typescript@^4.6.4: + version "4.8.4" + resolved "https://registry.yarnpkg.com/typescript/-/typescript-4.8.4.tgz#c464abca159669597be5f96b8943500b238e60e6" + integrity sha512-QCh+85mCy+h0IGff8r5XWzOVSbBO+KfeYrMQh7NJ58QujwcE22u+NUSmUxqF+un70P9GXKxa2HCNiTTMJknyjQ== + +vite@^3.2.0: + version "3.2.3" + resolved "https://registry.yarnpkg.com/vite/-/vite-3.2.3.tgz#7a68d9ef73eff7ee6dc0718ad3507adfc86944a7" + integrity sha512-h8jl1TZ76eGs3o2dIBSsvXDLb1m/Ec1iej8ZMdz+PsaFUsftZeWe2CZOI3qogEsMNaywc17gu0q6cQDzh/weCQ== + dependencies: + esbuild "^0.15.9" + postcss "^8.4.18" + resolve "^1.22.1" + rollup "^2.79.1" + optionalDependencies: + fsevents "~2.3.2" From ff3fe159586da651036e4d70c1a584da4ca615d0 Mon Sep 17 00:00:00 2001 From: nonozgytb Date: Fri, 18 Nov 2022 12:46:14 +0100 Subject: [PATCH 5/7] Add text when zoom-in --- src/assets/map_monochrome.svg | 14 +++++++++++++- src/index.ts | 25 +++++++++++++++++++++++-- src/svg-pan-zoom/svg-pan-zoom.js | 10 ++++++++++ 3 files changed, 46 insertions(+), 3 deletions(-) diff --git a/src/assets/map_monochrome.svg b/src/assets/map_monochrome.svg index 924f0fb..24667d6 100644 --- a/src/assets/map_monochrome.svg +++ b/src/assets/map_monochrome.svg @@ -3,9 +3,13 @@ xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px" viewBox="0 0 1000 900" style="enable-background:new 0 0 1000 900;" xml:space="preserve"> - diff --git a/src/index.ts b/src/index.ts index e86613f..23bc782 100644 --- a/src/index.ts +++ b/src/index.ts @@ -16,8 +16,28 @@ window.addEventListener("load", async () => { await sleep(150); - const SVG_ELEM = SVG_OBJECT.contentDocument - ?.documentElement as unknown as SVGSVGElement; + const SVG_ELEM = SVG_OBJECT.contentDocument!.documentElement as unknown as SVGSVGElement; + + SVG_ELEM.querySelectorAll("g.depart").forEach((group) => { + const textEl = document.createElementNS( + 'http://www.w3.org/2000/svg', + 'text' + ); + const path = group.querySelector("path") as SVGPathElement; + const pathRect = path.getBBox(); + textEl.setAttribute('x', (pathRect.x + pathRect.width / 2).toString()); + textEl.setAttribute('y', (pathRect.y + pathRect.height / 2).toString()); + textEl.setAttribute('dominant-baseline', 'middle'); + textEl.setAttribute('text-anchor', 'middle'); + textEl.classList.add("depart-text"); + textEl.style.userSelect = 'none'; + textEl.style.webkitUserSelect = 'none'; + textEl.style.pointerEvents = 'none'; + const departName = group.getAttribute("data-depart-name")!; + const regionName = group.parentElement!.getAttribute("data-region-name")!; + textEl.innerHTML = `${departName} (${regionName})`;; + group.appendChild(textEl); + }) await sleep(50); const { setTooltip, hideTooltip } = Tooltip( SVG_OBJECT, @@ -51,6 +71,7 @@ window.addEventListener("load", async () => { map.resize(); map.fit(); map.center(); + window.map = map; window.addEventListener("resize", () => { resizeHeight(); map.resize(); diff --git a/src/svg-pan-zoom/svg-pan-zoom.js b/src/svg-pan-zoom/svg-pan-zoom.js index 4246585..855dd19 100644 --- a/src/svg-pan-zoom/svg-pan-zoom.js +++ b/src/svg-pan-zoom/svg-pan-zoom.js @@ -339,6 +339,16 @@ SvgPanZoom.prototype.zoomAtPoint = function (zoomScale, point, zoomAbsolute) { newCTM = oldCTM.multiply(modifier); if (newCTM.a !== oldCTM.a) { + const TEXT_ZOOM = 1.25 + const tempZoom = this.getZoom() + this.svg.style.setProperty("--map-zoom", ((20/(tempZoom)))+"px") + if((tempZoom < TEXT_ZOOM) && this.svg.classList.contains("txt-visible")) { + this.svg.classList.remove("txt-visible"); + document.querySelector("#tooltip").style.opacity="1" + }else if((tempZoom > TEXT_ZOOM) && !this.svg.classList.contains("txt-visible")) { + this.svg.classList.add("txt-visible"); + document.querySelector("#tooltip").style.opacity="0" + } this.viewport.setCTM(newCTM); } }; From d4de53dde9732f1f960c92722bbb65af6b37707c Mon Sep 17 00:00:00 2001 From: nonozgytb Date: Sat, 19 Nov 2022 18:19:33 +0100 Subject: [PATCH 6/7] Add cities --- public/css/design-system.css | 194 ++++++++++++++-------------- public/css/layout-outil-1.css | 208 +++++++++++++++---------------- public/css/listenmap.css | 56 ++++----- public/css/listenmap.scss | 2 +- public/css/theme.css | 46 +++---- src/assets/map_monochrome.svg | 136 +++++++++++++++++++- src/index.ts | 24 +++- src/svg-pan-zoom/svg-pan-zoom.js | 11 +- 8 files changed, 414 insertions(+), 263 deletions(-) diff --git a/public/css/design-system.css b/public/css/design-system.css index 44a14e7..76c0dd4 100644 --- a/public/css/design-system.css +++ b/public/css/design-system.css @@ -1,155 +1,153 @@ html, body { - scroll-behavior: smooth; - width: 100%; - margin: 0; - padding: 0; - display: flex; - font-family: var(--font-listen); - color: var(--clr-text); - flex-direction: column; + scroll-behavior: smooth; + width: 100%; + margin: 0; + padding: 0; + display: flex; + font-family: var(--font-listen); + color: var(--clr-text); + flex-direction: column; } * { - box-sizing: border-box; + box-sizing: border-box; } a { - color: var(--clr-blue); + color: var(--clr-blue); } a:hover { - color: var(--clr-blue-alt); + color: var(--clr-blue-alt); } button { - padding: 7px 12px; - --clr-btn: var(--clr-red); - --border-width: 2px; - background-color: var(--clr-btn); - outline: var(--border-width) solid var(--clr-btn); - outline-offset: -1px; /*to avoid white space due to the radius*/ - border: none; - margin: var(--border-width); - color: #fff; - font-weight: 500; - border-radius: var(--border-radius); - font-family: var(--font-listen); - font-size: 18px; - display: flex; - justify-content: center; - align-items: center; + padding: 7px 12px; + --clr-btn: var(--clr-red); + --border-width: 2px; + background-color: var(--clr-btn); + outline: var(--border-width) solid var(--clr-btn); + outline-offset: -1px; /*to avoid white space due to the radius*/ + border: none; + margin: var(--border-width); + color: #fff; + font-weight: 500; + border-radius: var(--border-radius); + font-family: var(--font-listen); + font-size: 18px; + display: flex; + justify-content: center; + align-items: center; } button.outline-only { - color: var(--clr-text); - background-color: transparent; + color: var(--clr-text); + background-color: transparent; } button.disabled { - cursor: not-allowed; - opacity: 50%; - pointer-events: none; + cursor: not-allowed; + opacity: 50%; + pointer-events: none; } button:hover { - --clr-btn: var(--clr-red-alt); - cursor: pointer; + --clr-btn: var(--clr-red-alt); + cursor: pointer; } button span { - margin-right: 10px; - margin-top: -3px; - color: inherit; + margin-right: 10px; + margin-top: -3px; + color: inherit; } form, .form { - margin-bottom: 20px; + margin-bottom: 20px; } form label, .form label { - font-weight: 600; - font-size: 14px; - color: var(--clr-text-alt); - text-transform: uppercase; - letter-spacing: 1px; - border-radius: var(--border-radius); + font-weight: 600; + font-size: 14px; + color: var(--clr-text-alt); + text-transform: uppercase; + letter-spacing: 1px; + border-radius: var(--border-radius); } form select, .form select { - width: 100%; - height: 40px; - cursor: pointer; - background: none; - background: var(--clr-bg-alt); - border-radius: var(--border-radius); - -webkit-appearance: none; - -moz-appearance: none; - appearance: none; + width: 100%; + height: 40px; + cursor: pointer; + background: none; + background: var(--clr-bg-alt); + border-radius: var(--border-radius); + -webkit-appearance: none; + -moz-appearance: none; + appearance: none; } form .selector, .form .selector { - position: relative; + position: relative; } form .selector:after, .form .selector:after { - content: ">"; - position: absolute; - right: 2em; - margin: auto 0; - top: 25%; - color: var(--clr-text-alt); - transform: rotate(90deg) scaleY(1.5); - transition: all 0.2s ease-out; + content: ">"; + position: absolute; + right: 2em; + margin: auto 0; + top: 25%; + color: var(--clr-text-alt); + transform: rotate(90deg) scaleY(1.5); + transition: all 0.2s ease-out; } form .selector:focus-within:after, .form .selector:focus-within:after { - transform: rotate(-90deg) scaleY(1.5); - transition: all 0.2s ease-out; + transform: rotate(-90deg) scaleY(1.5); + transition: all 0.2s ease-out; } form .buttons, .form .buttons { - display: flex; - justify-content: space-between; - align-items: center; - gap: 10px; + display: flex; + justify-content: space-between; + align-items: center; + gap: 10px; } form button, .form button { - width: 100%; - margin-top: 10px; - font-size: 16px; + width: 100%; + margin-top: 10px; + font-size: 16px; } -form input, -form select, +form input, form select, .form input, .form select { - display: block; - margin: 3px 0 15px 0; - padding: 8px 14px; - border-radius: var(--border-radius); - background: var(--clr-bg-alt); - color: var(--clr-text-alt); - font-weight: 500; - font-size: 18px; - width: 100%; - border: none; - color-scheme: var(--input-scheme); -} -form input:focus, -form select:focus, + display: block; + margin: 3px 0 15px 0; + padding: 8px 14px; + border-radius: var(--border-radius); + background: var(--clr-bg-alt); + color: var(--clr-text-alt); + font-weight: 500; + font-size: 18px; + width: 100%; + border: none; + color-scheme: var(--input-scheme); +} +form input:focus, form select:focus, .form input:focus, .form select:focus { - outline: 2px solid var(--clr-blue); + outline: 2px solid var(--clr-blue); } hr { - width: 100%; - border: solid 1px var(--clr-border); - margin: 1rem 0; + width: 100%; + border: solid 1px var(--clr-border); + margin: 1rem 0; } footer { - display: block; - color: var(--clr-text-alt); - font-weight: 500; - margin-top: auto; - padding-top: 20px; - font-size: smaller; -} + display: block; + color: var(--clr-text-alt); + font-weight: 500; + margin-top: auto; + padding-top: 20px; + font-size: smaller; +} \ No newline at end of file diff --git a/public/css/layout-outil-1.css b/public/css/layout-outil-1.css index 0ddb23a..249e427 100644 --- a/public/css/layout-outil-1.css +++ b/public/css/layout-outil-1.css @@ -1,165 +1,165 @@ html, body { - height: 100%; + height: 100%; } body { - background-color: var(--clr-bg-alt); + background-color: var(--clr-bg-alt); } body > * { - padding: 24px 16px; + padding: 24px 16px; } * { - transition: all 0.2s ease-in-out; + transition: all 0.2s ease-in-out; } .header { - background-color: var(--clr-bg); - display: flex; - justify-content: space-between; - flex-wrap: wrap; - box-shadow: 0px 2px 4px rgba(0, 0, 0, 0.1); - border-bottom: 1px solid var(--clr-border); - letter-spacing: -0.045em; + background-color: var(--clr-bg); + display: flex; + justify-content: space-between; + flex-wrap: wrap; + box-shadow: 0px 2px 4px rgba(0, 0, 0, 0.1); + border-bottom: 1px solid var(--clr-border); + letter-spacing: -0.045em; } .header .header-logo { - flex: 1 1 auto; - background-image: var(--logo); - background-repeat: no-repeat; - background-size: contain; - width: auto; - height: 32px; + flex: 1 1 auto; + background-image: var(--logo); + background-repeat: no-repeat; + background-size: contain; + width: auto; + height: 32px; } .header nav { - flex: 0 1 auto; - display: flex; - gap: 10px; - align-items: center; + flex: 0 1 auto; + display: flex; + gap: 10px; + align-items: center; } .header nav .nav-btn { - font-size: 17px; - text-decoration: none; + font-size: 17px; + text-decoration: none; } .header nav .nav-btn.current { - text-decoration: underline; + text-decoration: underline; } .header nav .nav-btn.important { - color: var(--clr-red); + color: var(--clr-red); } .header nav .nav-btn.important:hover { - color: var(--clr-red-alt); + color: var(--clr-red-alt); } .main { - display: flex; - flex-direction: column; - gap: 10px; + display: flex; + flex-direction: column; + gap: 10px; } .main .card { - display: flex; - flex-direction: column; - align-items: flex-start; - padding: 0px; - background: var(--clr-bg); - box-shadow: 0px 2px 4px rgba(0, 0, 0, 0.25); - border-radius: var(--border-radius); - font-family: "HK Grotesk"; - font-size: 17px; + display: flex; + flex-direction: column; + align-items: flex-start; + padding: 0px; + background: var(--clr-bg); + box-shadow: 0px 2px 4px rgba(0, 0, 0, 0.25); + border-radius: var(--border-radius); + font-family: "HK Grotesk"; + font-size: 17px; } .main .card .card-header { - width: 100%; - display: flex; - padding: 0px 20px; - gap: 20px; - border-bottom: 1px solid var(--clr-border); - align-items: center; - justify-content: space-between; - font-weight: 700; - position: relative; + width: 100%; + display: flex; + padding: 0px 20px; + gap: 20px; + border-bottom: 1px solid var(--clr-border); + align-items: center; + justify-content: space-between; + font-weight: 700; + position: relative; } .main .card .card-header .card-title { - gap: 20px; - padding: 10px 0; - align-items: center; + gap: 20px; + padding: 10px 0; + align-items: center; } .main .card .card-header .card-tabs { - gap: 20px; - display: flex; + gap: 20px; + display: flex; } .main .card .card-header .card-tabs .card-tab { - padding: 10px 0; + padding: 10px 0; } .main .card .card-header .card-tabs .card-tab.active { - padding-bottom: 8px; - border-bottom: 2px solid var(--clr-red); + padding-bottom: 8px; + border-bottom: 2px solid var(--clr-red); } .main .card .loading.visible { - height: 2px; - position: absolute; - bottom: 0; - overflow: hidden; - left: 0; - right: 0; - transition: opacity 0.2s; + height: 2px; + position: absolute; + bottom: 0; + overflow: hidden; + left: 0; + right: 0; + transition: opacity 0.2s; } .main .card .loading.visible > div { - background-color: var(--clr-red); - width: 20%; - height: 100%; - -webkit-animation: loading 0.8s infinite; - animation: loading 0.8s infinite; + background-color: var(--clr-red); + width: 20%; + height: 100%; + -webkit-animation: loading 0.8s infinite; + animation: loading 0.8s infinite; } .main .card .card-content { - width: 100%; - padding: 20px; - gap: 10px; - display: flex; - flex-direction: column; - border-radius: 0 0 var(--border-radius) var(--border-radius); + width: 100%; + padding: 20px; + gap: 10px; + display: flex; + flex-direction: column; + border-radius: 0 0 var(--border-radius) var(--border-radius); } .main .row { - display: flex; - flex-direction: column; - gap: 10px; + display: flex; + flex-direction: column; + gap: 10px; } .main .part-title { - padding-top: 30px; - color: var(--clr-text-alt); - font-weight: bold; + padding-top: 30px; + color: var(--clr-text-alt); + font-weight: bold; } @media screen and (min-width: 768px) { - .main .row { - flex-direction: row; - } - body > * { - padding: 24px 64px; - } + .main .row { + flex-direction: row; + } + body > * { + padding: 24px 64px; + } } .footer { - color: var(--clr-text-alt); - margin-top: auto; + color: var(--clr-text-alt); + margin-top: auto; } @-webkit-keyframes loading { - 0% { - width: 20%; - transform: translateX(-100%); - } - 100% { - width: 100%; - transform: translateX(100%); - } + 0% { + width: 20%; + transform: translateX(-100%); + } + 100% { + width: 100%; + transform: translateX(100%); + } } @keyframes loading { - 0% { - width: 20%; - transform: translateX(-100%); - } - 100% { - width: 100%; - transform: translateX(100%); - } -} + 0% { + width: 20%; + transform: translateX(-100%); + } + 100% { + width: 100%; + transform: translateX(100%); + } +} \ No newline at end of file diff --git a/public/css/listenmap.css b/public/css/listenmap.css index 790e997..464748a 100644 --- a/public/css/listenmap.css +++ b/public/css/listenmap.css @@ -1,50 +1,50 @@ :root { - --logo: url("../assets/logo.svg"); + --logo: url("../assets/logo.svg"); } @media (prefers-color-scheme: dark) { - :root { - --logo: url("../assets/logo_dark.svg"); - } + :root { + --logo: url("../assets/logo_dark.svg"); + } } #tooltip { - display: none; - position: absolute; - background-color: var(--clr-bg-alt); - padding: 8px; - color: white; - border-radius: var(--border-radius); - border: 1px solid var(--clr-border); - transition-duration: 0s; + display: none; + position: absolute; + background-color: var(--clr-bg-alt); + padding: 8px; + color: var(--clr-text); + border-radius: var(--border-radius); + border: 1px solid var(--clr-border); + transition-duration: 0s; } main { - padding: 0; - gap: 0 !important; - border-bottom: 1px solid var(--clr-border); + padding: 0; + gap: 0 !important; + border-bottom: 1px solid var(--clr-border); } .header .header-logo { - height: 64px; + height: 64px; } body { - position: relative; - display: block; + position: relative; + display: block; } body > *:not(main) { - padding: 8px 16px; + padding: 8px 16px; } body > main { - position: relative; - padding: 0px; + position: relative; + padding: 0px; } @media screen and (min-width: 768px) { - body > *:not(main) { - padding: 8px 64px; - } - body > main { - padding: 0px; - } -} + body > *:not(main) { + padding: 8px 64px; + } + body > main { + padding: 0px; + } +} \ No newline at end of file diff --git a/public/css/listenmap.scss b/public/css/listenmap.scss index cb4e3c0..e03a582 100644 --- a/public/css/listenmap.scss +++ b/public/css/listenmap.scss @@ -13,7 +13,7 @@ position: absolute; background-color: var(--clr-bg-alt); padding: 8px; - color: white; + color: var(--clr-text); border-radius: var(--border-radius); border: 1px solid var(--clr-border); transition-duration: 0s; diff --git a/public/css/theme.css b/public/css/theme.css index 85f60a5..fddf8c6 100644 --- a/public/css/theme.css +++ b/public/css/theme.css @@ -1,28 +1,28 @@ @import url("https://fonts.cdnfonts.com/css/hk-groteks"); :root { - --font-listen: "HK Grotesk", sans-serif; - --clr-bg: #ffffff; - --clr-bg-alt: #e3e3e3; - --clr-border: #b5b5b5; - --clr-text: #212121; - --clr-text-alt: #999999; - --clr-red: #db0000; - --clr-red-alt: #fe2a2a; - --clr-blue: #0066ff; - --clr-blue-alt: #3785fb; - --clr-green: #12ca86; - --clr-orange: #ec6a13; - --border-radius: 8px; - --input-scheme: light; + --font-listen: "HK Grotesk", sans-serif; + --clr-bg: #ffffff; + --clr-bg-alt: #e3e3e3; + --clr-border: #b5b5b5; + --clr-text: #212121; + --clr-text-alt: #999999; + --clr-red: #db0000; + --clr-red-alt: #fe2a2a; + --clr-blue: #0066ff; + --clr-blue-alt: #3785fb; + --clr-green: #12ca86; + --clr-orange: #ec6a13; + --border-radius: 8px; + --input-scheme: light; } @media (prefers-color-scheme: dark) { - :root { - --clr-bg: hsl(255, 7%, 11%); - --clr-bg-alt: hsl(255, 5%, 16%); - --clr-border: hsl(240, 3%, 23%); - --clr-text: hsl(0, 0%, 100%); - --clr-text-alt: hsl(150, 1%, 56%); - --input-scheme: dark; - } -} + :root { + --clr-bg: hsl(255, 7%, 11%); + --clr-bg-alt: hsl(255, 5%, 16%); + --clr-border: hsl(240, 3%, 23%); + --clr-text: hsl(0, 0%, 100%); + --clr-text-alt: hsl(150, 1%, 56%); + --input-scheme: dark; + } +} \ No newline at end of file diff --git a/src/assets/map_monochrome.svg b/src/assets/map_monochrome.svg index 24667d6..beb1c35 100644 --- a/src/assets/map_monochrome.svg +++ b/src/assets/map_monochrome.svg @@ -1,11 +1,13 @@ + xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px" viewBox="0 0 1000 900" style="enable-background:new 0 0 1000 900;" class="txt-hide" xml:space="preserve"> @@ -365,4 +388,111 @@ C538.7,287.4,536.4,287.1,528.2,287.9z" /> + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/src/index.ts b/src/index.ts index 23bc782..ff03b6b 100644 --- a/src/index.ts +++ b/src/index.ts @@ -38,6 +38,29 @@ window.addEventListener("load", async () => { textEl.innerHTML = `${departName} (${regionName})`;; group.appendChild(textEl); }) + + + +SVG_ELEM.querySelectorAll("g.city").forEach((group) => { + const textEl = document.createElementNS( + 'http://www.w3.org/2000/svg', + 'text' + ); + const path = group.querySelector("circle") as SVGCircleElement; + const pathRect = path.getBBox(); + textEl.setAttribute('x', (pathRect.x + pathRect.width / 2).toString()); + textEl.setAttribute('y', (pathRect.y + pathRect.height / 2).toString()); + textEl.setAttribute('dominant-baseline', 'middle'); + textEl.setAttribute('text-anchor', 'middle'); + textEl.style.userSelect = 'none'; + textEl.style.webkitUserSelect = 'none'; + textEl.style.pointerEvents = 'none'; + textEl.innerHTML = group.attributes.getNamedItem("data-city-name")!.value; + textEl.classList.add("city-text"); + group.appendChild(textEl); +}) + + await sleep(50); const { setTooltip, hideTooltip } = Tooltip( SVG_OBJECT, @@ -71,7 +94,6 @@ window.addEventListener("load", async () => { map.resize(); map.fit(); map.center(); - window.map = map; window.addEventListener("resize", () => { resizeHeight(); map.resize(); diff --git a/src/svg-pan-zoom/svg-pan-zoom.js b/src/svg-pan-zoom/svg-pan-zoom.js index 855dd19..d0890ee 100644 --- a/src/svg-pan-zoom/svg-pan-zoom.js +++ b/src/svg-pan-zoom/svg-pan-zoom.js @@ -341,12 +341,13 @@ SvgPanZoom.prototype.zoomAtPoint = function (zoomScale, point, zoomAbsolute) { if (newCTM.a !== oldCTM.a) { const TEXT_ZOOM = 1.25 const tempZoom = this.getZoom() - this.svg.style.setProperty("--map-zoom", ((20/(tempZoom)))+"px") - if((tempZoom < TEXT_ZOOM) && this.svg.classList.contains("txt-visible")) { - this.svg.classList.remove("txt-visible"); + this.svg.style.setProperty("--map-zoom",tempZoom) + this.svg.style.setProperty("--map-font-zoom", ((20/(tempZoom)))+"px") + if((tempZoom < TEXT_ZOOM) && !this.svg.classList.contains("txt-hide")) { + this.svg.classList.add("txt-hide"); document.querySelector("#tooltip").style.opacity="1" - }else if((tempZoom > TEXT_ZOOM) && !this.svg.classList.contains("txt-visible")) { - this.svg.classList.add("txt-visible"); + }else if((tempZoom > TEXT_ZOOM) && this.svg.classList.contains("txt-hide")) { + this.svg.classList.remove("txt-hide"); document.querySelector("#tooltip").style.opacity="0" } this.viewport.setCTM(newCTM); From 2b96d5a70404d68c7ae1a18fd7a0628be1a02b75 Mon Sep 17 00:00:00 2001 From: nonozgytb Date: Sat, 19 Nov 2022 18:32:20 +0100 Subject: [PATCH 7/7] Adapt zoom --- src/assets/map_monochrome.svg | 18 +++++++++--------- 1 file changed, 9 insertions(+), 9 deletions(-) diff --git a/src/assets/map_monochrome.svg b/src/assets/map_monochrome.svg index beb1c35..1272fca 100644 --- a/src/assets/map_monochrome.svg +++ b/src/assets/map_monochrome.svg @@ -40,14 +40,14 @@ font-size: calc(0.8 * var(--map-font-zoom, 1em)); font-weight: bold; fill: #444; - transform: translateY(calc(var(--map-font-zoom, 1) * -0.5)); + transform: translateY(calc(calc(var(--map-font-zoom, 1) * -0.5) * calc(var(--city-zoom, 1)))); } svg.txt-hide .city-text { display: none; opacity: 0; } .city circle { - r: calc(3 / var(--map-zoom, 1)); + r: calc(calc(3 / var(--map-zoom, 1)) * calc(var(--city-zoom, 0.5) * 2)); } svg { @@ -56,7 +56,7 @@ } - + - + - + - + - + - - + +
-

Listenbourg Maps

+

ListenMaps

@@ -33,12 +33,14 @@ app.innerHTML = /* html */ ` window.addEventListener("load", () => { const svgObject = document.querySelector("object")!.contentDocument!; + const svgEl = svgObject.querySelector("svg")!; const { setTooltip, hideTooltip } = Tooltip( document.querySelector("object")!, app.querySelector(".region-name")! ); const groups = svgObject.querySelectorAll("g"); const paths = svgObject.querySelectorAll("path"); + const svgDepTexts: SVGTextElement[] = []; const regionsPaths = Object.fromEntries( Object.keys(regionData).map((name) => [ @@ -53,20 +55,74 @@ window.addEventListener("load", () => { depName: string; } | null; + const minZoom = 0.9; + let hovered: Hovered = null; + let zoom = minZoom; + let offsetX = 0; + let offsetY = 0; + let dragging = false; + + function updateTransform() { + svgEl.style.transform = `translate(${offsetX * zoom}px, ${ + offsetY * zoom + }px) scale(${zoom})`; + } + + updateTransform(); + + svgObject.addEventListener( + "wheel", + (e: WheelEvent) => { + const oldZoom = zoom; + zoom = Math.max(minZoom, zoom - e.deltaY * 0.01); + updateTransform(); + svgEl.style.cursor = zoom === minZoom ? "pointer" : "grab"; + + if (zoom > 1.5 && oldZoom <= 1.5) { + svgEl.style.setProperty('--text-display', 'block'); + hideTooltip(); + } else if (zoom <= 1.5 && oldZoom > 1.5) { + svgEl.style.setProperty('--text-display', 'none'); + } + + svgEl.style.setProperty('--text-fz', `${Math.min(1, 1 / zoom * 2)}rem`); + + e.preventDefault(); + }, + { passive: false } + ); + + svgObject.addEventListener("mousedown", () => { + dragging = true; + svgEl.style.cursor = "grabbing"; + }); + svgObject.addEventListener("mouseup", () => { + dragging = false; + svgEl.style.cursor = zoom === minZoom ? "pointer" : "grab"; + }); svgObject.addEventListener("mousemove", (e) => { let isHovered = false; - paths.forEach((d) => { + groups.forEach((d) => { if (d.matches(":hover")) isHovered = true; }); if (!isHovered) { hideTooltip(); - } else if (hovered) { + } else if (hovered && zoom < 1.5) { setTooltip(e, `${hovered.depID} ${hovered.depName} (${hovered.region})`); } + + if (dragging) { + offsetX += e.movementX / zoom; + offsetY += e.movementY / zoom; + updateTransform(); + } }); + svgEl.style.overflow = "hidden"; + svgEl.style.cursor = "pointer"; + groups.forEach((group) => { const path = group.querySelector("path")!; const groupID = Number(group.id); @@ -74,11 +130,30 @@ window.addEventListener("load", () => { const regionName = getRegionByDepartment(groupID)!; const regionColor = getRegionColor(regionName as RegionName); + const textEl = svgObject.createElementNS( + "http://www.w3.org/2000/svg", + "text" + ); + const pathRect = path.getBBox(); + console.log(pathRect, group.querySelector("path")); // il sert à qqch ce + textEl.setAttribute("x", (pathRect.x + pathRect.width / 2).toString()); + textEl.setAttribute("y", (pathRect.y + pathRect.height / 2).toString()); + textEl.setAttribute("dominant-baseline", "middle"); + textEl.setAttribute("text-anchor", "middle"); + textEl.style.userSelect = "none"; + textEl.style.webkitUserSelect = "none"; + textEl.style.pointerEvents = "none"; + // textEl.setAttribute("fill", "black"); + textEl.innerHTML = departmentName; + group.appendChild(textEl); + svgDepTexts.push(textEl); + + path.style.transition = "fill 0.25s ease"; - path.addEventListener("mouseenter", () => { - for (const path of regionsPaths[regionName]) - path.style.fill = regionColor; + group.addEventListener("mouseenter", () => { + for (const regPath of regionsPaths[regionName]) + regPath.style.fill = regionColor; path.style.fill = lighten(regionColor); hovered = { region: regionName as RegionName, @@ -87,7 +162,7 @@ window.addEventListener("load", () => { }; }); - path.addEventListener("mouseleave", () => { + group.addEventListener("mouseleave", () => { for (const path of regionsPaths[regionName]) path.style.fill = "#D6D6D6"; }); }); diff --git a/src/tooltip.ts b/src/tooltip.ts index 7c301e8..63f616a 100644 --- a/src/tooltip.ts +++ b/src/tooltip.ts @@ -3,16 +3,16 @@ export default function Tooltip(svg: HTMLObjectElement, element: HTMLElement) { element.innerHTML = content; element.style.display = "block"; - element.style.left = e.pageX + 25 + "px"; + element.style.left = (e.pageX + 10) + "px"; if ( element.getBoundingClientRect().right > svg.getBoundingClientRect().right ) { - element.style.left = e.pageX - element.clientWidth + "px"; - element.style.top = e.pageY + 25 + "px"; + element.style.left = (e.pageX - element.clientWidth) + "px"; + element.style.top = (e.pageY - element.clientHeight - 10) + "px"; } else { - element.style.top = e.pageY + "px"; + element.style.top = (e.pageY - (element.clientHeight / 2)) + "px"; } } From 2f1e18b39b50460f69f45afaf846959b45aeba99 Mon Sep 17 00:00:00 2001 From: nonozgytb Date: Fri, 11 Nov 2022 01:45:19 +0100 Subject: [PATCH 4/7] Change 100% Style + JS Change to Outil 1 Layout Use (a fork) of svg-pan-zoom for the project TODO : Depart. name in the middle if zoom > n TODO 2 : Add cities --- README.md | 1 + index.html | 96 +- package-lock.json | 4110 +++++++++++++-------------- package.json | 33 +- public/SourceSerif4-Regular.ttf | Bin 328836 -> 0 bytes public/assets/logo.svg | 18 + public/assets/logo_dark.svg | 18 + public/css/design-system.css | 155 + public/css/design-system.scss | 149 + public/css/layout-outil-1.css | 165 ++ public/css/layout-outil-1.scss | 157 + public/css/listenmap.css | 50 + public/css/listenmap.scss | 49 + public/css/theme.css | 28 + public/css/theme.scss | 38 + public/favicon.png | Bin 0 -> 1694 bytes public/listenbourg.ico | Bin 270398 -> 0 bytes src/assets/map_monochrome.svg | 572 ++-- src/assets/regions.json | 62 - src/assets/style.css | 93 - src/color.ts | 22 - src/index.ts | 62 + src/main.ts | 186 -- src/regions.ts | 42 - src/svg-pan-zoom/control-icons.js | 184 ++ src/svg-pan-zoom/shadow-viewport.js | 372 +++ src/svg-pan-zoom/svg-pan-zoom.js | 978 +++++++ src/svg-pan-zoom/svg-utilities.js | 170 ++ src/svg-pan-zoom/uniwheel.js | 149 + src/svg-pan-zoom/utilities.js | 207 ++ src/tooltip.ts | 37 +- tsconfig.json | 36 +- yarn.lock | 300 ++ 33 files changed, 5728 insertions(+), 2811 deletions(-) delete mode 100644 public/SourceSerif4-Regular.ttf create mode 100644 public/assets/logo.svg create mode 100644 public/assets/logo_dark.svg create mode 100644 public/css/design-system.css create mode 100644 public/css/design-system.scss create mode 100644 public/css/layout-outil-1.css create mode 100644 public/css/layout-outil-1.scss create mode 100644 public/css/listenmap.css create mode 100644 public/css/listenmap.scss create mode 100644 public/css/theme.css create mode 100644 public/css/theme.scss create mode 100644 public/favicon.png delete mode 100644 public/listenbourg.ico delete mode 100644 src/assets/regions.json delete mode 100644 src/assets/style.css delete mode 100644 src/color.ts create mode 100644 src/index.ts delete mode 100644 src/main.ts delete mode 100644 src/regions.ts create mode 100644 src/svg-pan-zoom/control-icons.js create mode 100644 src/svg-pan-zoom/shadow-viewport.js create mode 100644 src/svg-pan-zoom/svg-pan-zoom.js create mode 100644 src/svg-pan-zoom/svg-utilities.js create mode 100644 src/svg-pan-zoom/uniwheel.js create mode 100644 src/svg-pan-zoom/utilities.js create mode 100644 yarn.lock diff --git a/README.md b/README.md index 7b54da5..df60910 100644 --- a/README.md +++ b/README.md @@ -15,6 +15,7 @@ npm run dev ``` ## Build for production + ```bash npm run build ``` diff --git a/index.html b/index.html index a2f59be..75a8de5 100644 --- a/index.html +++ b/index.html @@ -1,22 +1,86 @@ + + + + + + + + ListenMap + + + - - - - ListenMaps + + + + - - - - - - - + + + - -
- - + + - \ No newline at end of file + + + + + + + + + + + + + +
+ + +
+
+ + Your browser does not support SVG + +
+
+ + + + + diff --git a/package-lock.json b/package-lock.json index 60122da..ba2f80d 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,2057 +1,2057 @@ { - "name": "listenbourgmap", - "version": "0.0.0", - "lockfileVersion": 2, - "requires": true, - "packages": { - "": { - "name": "listenbourgmap", - "version": "0.0.0", - "dependencies": { - "@rollup/plugin-babel": "^6.0.2" - }, - "devDependencies": { - "typescript": "^4.6.4", - "vite": "^3.2.0" - } - }, - "node_modules/@ampproject/remapping": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/@ampproject/remapping/-/remapping-2.2.0.tgz", - "integrity": "sha512-qRmjj8nj9qmLTQXXmaR1cck3UXSRMPrbsLJAasZpF+t3riI71BXed5ebIOYwQntykeZuhjsdweEc9BxH5Jc26w==", - "peer": true, - "dependencies": { - "@jridgewell/gen-mapping": "^0.1.0", - "@jridgewell/trace-mapping": "^0.3.9" - }, - "engines": { - "node": ">=6.0.0" - } - }, - "node_modules/@babel/code-frame": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.18.6.tgz", - "integrity": "sha512-TDCmlK5eOvH+eH7cdAFlNXeVJqWIQ7gW9tY1GJIpUtFb6CmjVyq2VM3u71bOyR8CRihcCgMUYoDNyLXao3+70Q==", - "peer": true, - "dependencies": { - "@babel/highlight": "^7.18.6" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/compat-data": { - "version": "7.20.1", - "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.20.1.tgz", - "integrity": "sha512-EWZ4mE2diW3QALKvDMiXnbZpRvlj+nayZ112nK93SnhqOtpdsbVD4W+2tEoT3YNBAG9RBR0ISY758ZkOgsn6pQ==", - "peer": true, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/core": { - "version": "7.19.6", - "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.19.6.tgz", - "integrity": "sha512-D2Ue4KHpc6Ys2+AxpIx1BZ8+UegLLLE2p3KJEuJRKmokHOtl49jQ5ny1773KsGLZs8MQvBidAF6yWUJxRqtKtg==", - "peer": true, - "dependencies": { - "@ampproject/remapping": "^2.1.0", - "@babel/code-frame": "^7.18.6", - "@babel/generator": "^7.19.6", - "@babel/helper-compilation-targets": "^7.19.3", - "@babel/helper-module-transforms": "^7.19.6", - "@babel/helpers": "^7.19.4", - "@babel/parser": "^7.19.6", - "@babel/template": "^7.18.10", - "@babel/traverse": "^7.19.6", - "@babel/types": "^7.19.4", - "convert-source-map": "^1.7.0", - "debug": "^4.1.0", - "gensync": "^1.0.0-beta.2", - "json5": "^2.2.1", - "semver": "^6.3.0" - }, - "engines": { - "node": ">=6.9.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/babel" - } - }, - "node_modules/@babel/generator": { - "version": "7.20.1", - "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.20.1.tgz", - "integrity": "sha512-u1dMdBUmA7Z0rBB97xh8pIhviK7oItYOkjbsCxTWMknyvbQRBwX7/gn4JXurRdirWMFh+ZtYARqkA6ydogVZpg==", - "peer": true, - "dependencies": { - "@babel/types": "^7.20.0", - "@jridgewell/gen-mapping": "^0.3.2", - "jsesc": "^2.5.1" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/generator/node_modules/@jridgewell/gen-mapping": { - "version": "0.3.2", - "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.2.tgz", - "integrity": "sha512-mh65xKQAzI6iBcFzwv28KVWSmCkdRBWoOh+bYQGW3+6OZvbbN3TqMGo5hqYxQniRcH9F2VZIoJCm4pa3BPDK/A==", - "peer": true, - "dependencies": { - "@jridgewell/set-array": "^1.0.1", - "@jridgewell/sourcemap-codec": "^1.4.10", - "@jridgewell/trace-mapping": "^0.3.9" - }, - "engines": { - "node": ">=6.0.0" - } - }, - "node_modules/@babel/helper-compilation-targets": { - "version": "7.20.0", - "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.20.0.tgz", - "integrity": "sha512-0jp//vDGp9e8hZzBc6N/KwA5ZK3Wsm/pfm4CrY7vzegkVxc65SgSn6wYOnwHe9Js9HRQ1YTCKLGPzDtaS3RoLQ==", - "peer": true, - "dependencies": { - "@babel/compat-data": "^7.20.0", - "@babel/helper-validator-option": "^7.18.6", - "browserslist": "^4.21.3", - "semver": "^6.3.0" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0" - } - }, - "node_modules/@babel/helper-environment-visitor": { - "version": "7.18.9", - "resolved": "https://registry.npmjs.org/@babel/helper-environment-visitor/-/helper-environment-visitor-7.18.9.tgz", - "integrity": "sha512-3r/aACDJ3fhQ/EVgFy0hpj8oHyHpQc+LPtJoY9SzTThAsStm4Ptegq92vqKoE3vD706ZVFWITnMnxucw+S9Ipg==", - "peer": true, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-function-name": { - "version": "7.19.0", - "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.19.0.tgz", - "integrity": "sha512-WAwHBINyrpqywkUH0nTnNgI5ina5TFn85HKS0pbPDfxFfhyR/aNQEn4hGi1P1JyT//I0t4OgXUlofzWILRvS5w==", - "peer": true, - "dependencies": { - "@babel/template": "^7.18.10", - "@babel/types": "^7.19.0" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-hoist-variables": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/helper-hoist-variables/-/helper-hoist-variables-7.18.6.tgz", - "integrity": "sha512-UlJQPkFqFULIcyW5sbzgbkxn2FKRgwWiRexcuaR8RNJRy8+LLveqPjwZV/bwrLZCN0eUHD/x8D0heK1ozuoo6Q==", - "peer": true, - "dependencies": { - "@babel/types": "^7.18.6" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-module-imports": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.18.6.tgz", - "integrity": "sha512-0NFvs3VkuSYbFi1x2Vd6tKrywq+z/cLeYC/RJNFrIX/30Bf5aiGYbtvGXolEktzJH8o5E5KJ3tT+nkxuuZFVlA==", - "dependencies": { - "@babel/types": "^7.18.6" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-module-transforms": { - "version": "7.19.6", - "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.19.6.tgz", - "integrity": "sha512-fCmcfQo/KYr/VXXDIyd3CBGZ6AFhPFy1TfSEJ+PilGVlQT6jcbqtHAM4C1EciRqMza7/TpOUZliuSH+U6HAhJw==", - "peer": true, - "dependencies": { - "@babel/helper-environment-visitor": "^7.18.9", - "@babel/helper-module-imports": "^7.18.6", - "@babel/helper-simple-access": "^7.19.4", - "@babel/helper-split-export-declaration": "^7.18.6", - "@babel/helper-validator-identifier": "^7.19.1", - "@babel/template": "^7.18.10", - "@babel/traverse": "^7.19.6", - "@babel/types": "^7.19.4" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-simple-access": { - "version": "7.19.4", - "resolved": "https://registry.npmjs.org/@babel/helper-simple-access/-/helper-simple-access-7.19.4.tgz", - "integrity": "sha512-f9Xq6WqBFqaDfbCzn2w85hwklswz5qsKlh7f08w4Y9yhJHpnNC0QemtSkK5YyOY8kPGvyiwdzZksGUhnGdaUIg==", - "peer": true, - "dependencies": { - "@babel/types": "^7.19.4" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-split-export-declaration": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.18.6.tgz", - "integrity": "sha512-bde1etTx6ZyTmobl9LLMMQsaizFVZrquTEHOqKeQESMKo4PlObf+8+JA25ZsIpZhT/WEd39+vOdLXAFG/nELpA==", - "peer": true, - "dependencies": { - "@babel/types": "^7.18.6" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-string-parser": { - "version": "7.19.4", - "resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.19.4.tgz", - "integrity": "sha512-nHtDoQcuqFmwYNYPz3Rah5ph2p8PFeFCsZk9A/48dPc/rGocJ5J3hAAZ7pb76VWX3fZKu+uEr/FhH5jLx7umrw==", - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-validator-identifier": { - "version": "7.19.1", - "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.19.1.tgz", - "integrity": "sha512-awrNfaMtnHUr653GgGEs++LlAvW6w+DcPrOliSMXWCKo597CwL5Acf/wWdNkf/tfEQE3mjkeD1YOVZOUV/od1w==", - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-validator-option": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.18.6.tgz", - "integrity": "sha512-XO7gESt5ouv/LRJdrVjkShckw6STTaB7l9BrpBaAHDeF5YZT+01PCwmR0SJHnkW6i8OwW/EVWRShfi4j2x+KQw==", - "peer": true, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helpers": { - "version": "7.20.1", - "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.20.1.tgz", - "integrity": "sha512-J77mUVaDTUJFZ5BpP6mMn6OIl3rEWymk2ZxDBQJUG3P+PbmyMcF3bYWvz0ma69Af1oobDqT/iAsvzhB58xhQUg==", - "peer": true, - "dependencies": { - "@babel/template": "^7.18.10", - "@babel/traverse": "^7.20.1", - "@babel/types": "^7.20.0" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/highlight": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.18.6.tgz", - "integrity": "sha512-u7stbOuYjaPezCuLj29hNW1v64M2Md2qupEKP1fHc7WdOA3DgLh37suiSrZYY7haUB7iBeQZ9P1uiRF359do3g==", - "peer": true, - "dependencies": { - "@babel/helper-validator-identifier": "^7.18.6", - "chalk": "^2.0.0", - "js-tokens": "^4.0.0" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/parser": { - "version": "7.20.1", - "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.20.1.tgz", - "integrity": "sha512-hp0AYxaZJhxULfM1zyp7Wgr+pSUKBcP3M+PHnSzWGdXOzg/kHWIgiUWARvubhUKGOEw3xqY4x+lyZ9ytBVcELw==", - "peer": true, - "bin": { - "parser": "bin/babel-parser.js" - }, - "engines": { - "node": ">=6.0.0" - } - }, - "node_modules/@babel/template": { - "version": "7.18.10", - "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.18.10.tgz", - "integrity": "sha512-TI+rCtooWHr3QJ27kJxfjutghu44DLnasDMwpDqCXVTal9RLp3RSYNh4NdBrRP2cQAoG9A8juOQl6P6oZG4JxA==", - "peer": true, - "dependencies": { - "@babel/code-frame": "^7.18.6", - "@babel/parser": "^7.18.10", - "@babel/types": "^7.18.10" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/traverse": { - "version": "7.20.1", - "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.20.1.tgz", - "integrity": "sha512-d3tN8fkVJwFLkHkBN479SOsw4DMZnz8cdbL/gvuDuzy3TS6Nfw80HuQqhw1pITbIruHyh7d1fMA47kWzmcUEGA==", - "peer": true, - "dependencies": { - "@babel/code-frame": "^7.18.6", - "@babel/generator": "^7.20.1", - "@babel/helper-environment-visitor": "^7.18.9", - "@babel/helper-function-name": "^7.19.0", - "@babel/helper-hoist-variables": "^7.18.6", - "@babel/helper-split-export-declaration": "^7.18.6", - "@babel/parser": "^7.20.1", - "@babel/types": "^7.20.0", - "debug": "^4.1.0", - "globals": "^11.1.0" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/types": { - "version": "7.20.0", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.20.0.tgz", - "integrity": "sha512-Jlgt3H0TajCW164wkTOTzHkZb075tMQMULzrLUoUeKmO7eFL96GgDxf7/Axhc5CAuKE3KFyVW1p6ysKsi2oXAg==", - "dependencies": { - "@babel/helper-string-parser": "^7.19.4", - "@babel/helper-validator-identifier": "^7.19.1", - "to-fast-properties": "^2.0.0" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@esbuild/android-arm": { - "version": "0.15.12", - "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.15.12.tgz", - "integrity": "sha512-IC7TqIqiyE0MmvAhWkl/8AEzpOtbhRNDo7aph47We1NbE5w2bt/Q+giAhe0YYeVpYnIhGMcuZY92qDK6dQauvA==", - "cpu": [ - "arm" - ], - "dev": true, - "optional": true, - "os": [ - "android" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/@esbuild/linux-loong64": { - "version": "0.15.12", - "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.15.12.tgz", - "integrity": "sha512-tZEowDjvU7O7I04GYvWQOS4yyP9E/7YlsB0jjw1Ycukgr2ycEzKyIk5tms5WnLBymaewc6VmRKnn5IJWgK4eFw==", - "cpu": [ - "loong64" - ], - "dev": true, - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/@jridgewell/gen-mapping": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.1.1.tgz", - "integrity": "sha512-sQXCasFk+U8lWYEe66WxRDOE9PjVz4vSM51fTu3Hw+ClTpUSQb718772vH3pyS5pShp6lvQM7SxgIDXXXmOX7w==", - "peer": true, - "dependencies": { - "@jridgewell/set-array": "^1.0.0", - "@jridgewell/sourcemap-codec": "^1.4.10" - }, - "engines": { - "node": ">=6.0.0" - } - }, - "node_modules/@jridgewell/resolve-uri": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.0.tgz", - "integrity": "sha512-F2msla3tad+Mfht5cJq7LSXcdudKTWCVYUgw6pLFOOHSTtZlj6SWNYAp+AhuqLmWdBO2X5hPrLcu8cVP8fy28w==", - "peer": true, - "engines": { - "node": ">=6.0.0" - } - }, - "node_modules/@jridgewell/set-array": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/@jridgewell/set-array/-/set-array-1.1.2.tgz", - "integrity": "sha512-xnkseuNADM0gt2bs+BvhO0p78Mk762YnZdsuzFV018NoG1Sj1SCQvpSqa7XUaTam5vAGasABV9qXASMKnFMwMw==", - "peer": true, - "engines": { - "node": ">=6.0.0" - } - }, - "node_modules/@jridgewell/sourcemap-codec": { - "version": "1.4.14", - "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.14.tgz", - "integrity": "sha512-XPSJHWmi394fuUuzDnGz1wiKqWfo1yXecHQMRf2l6hztTO+nPru658AyDngaBe7isIxEkRsPR3FZh+s7iVa4Uw==", - "peer": true - }, - "node_modules/@jridgewell/trace-mapping": { - "version": "0.3.17", - "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.17.tgz", - "integrity": "sha512-MCNzAp77qzKca9+W/+I0+sEpaUnZoeasnghNeVc41VZCEKaCH73Vq3BZZ/SzWIgrqE4H4ceI+p+b6C0mHf9T4g==", - "peer": true, - "dependencies": { - "@jridgewell/resolve-uri": "3.1.0", - "@jridgewell/sourcemap-codec": "1.4.14" - } - }, - "node_modules/@rollup/plugin-babel": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/@rollup/plugin-babel/-/plugin-babel-6.0.2.tgz", - "integrity": "sha512-Vnt8XIWYwCf3MD7qhBWYlP9pjSZvcE++nlPXhQYw6YNehl5742AzFbrV6h4BHb20VAOVUlIksVLymQCTwVCGDg==", - "dependencies": { - "@babel/helper-module-imports": "^7.18.6", - "@rollup/pluginutils": "^5.0.1" - }, - "engines": { - "node": ">=14.0.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0", - "@types/babel__core": "^7.1.9", - "rollup": "^1.20.0||^2.0.0||^3.0.0" - }, - "peerDependenciesMeta": { - "@types/babel__core": { - "optional": true - }, - "rollup": { - "optional": true - } - } - }, - "node_modules/@rollup/pluginutils": { - "version": "5.0.2", - "resolved": "https://registry.npmjs.org/@rollup/pluginutils/-/pluginutils-5.0.2.tgz", - "integrity": "sha512-pTd9rIsP92h+B6wWwFbW8RkZv4hiR/xKsqre4SIuAOaOEQRxi0lqLke9k2/7WegC85GgUs9pjmOjCUi3In4vwA==", - "dependencies": { - "@types/estree": "^1.0.0", - "estree-walker": "^2.0.2", - "picomatch": "^2.3.1" - }, - "engines": { - "node": ">=14.0.0" - }, - "peerDependencies": { - "rollup": "^1.20.0||^2.0.0||^3.0.0" - }, - "peerDependenciesMeta": { - "rollup": { - "optional": true - } - } - }, - "node_modules/@types/estree": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/@types/estree/-/estree-1.0.0.tgz", - "integrity": "sha512-WulqXMDUTYAXCjZnk6JtIHPigp55cVtDgDrO2gHRwhyJto21+1zbVCtOYB2L1F9w4qCQ0rOGWBnBe0FNTiEJIQ==" - }, - "node_modules/ansi-styles": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", - "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", - "peer": true, - "dependencies": { - "color-convert": "^1.9.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/browserslist": { - "version": "4.21.4", - "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.21.4.tgz", - "integrity": "sha512-CBHJJdDmgjl3daYjN5Cp5kbTf1mUhZoS+beLklHIvkOWscs83YAhLlF3Wsh/lciQYAcbBJgTOD44VtG31ZM4Hw==", - "funding": [ - { - "type": "opencollective", - "url": "https://opencollective.com/browserslist" - }, - { - "type": "tidelift", - "url": "https://tidelift.com/funding/github/npm/browserslist" - } - ], - "peer": true, - "dependencies": { - "caniuse-lite": "^1.0.30001400", - "electron-to-chromium": "^1.4.251", - "node-releases": "^2.0.6", - "update-browserslist-db": "^1.0.9" - }, - "bin": { - "browserslist": "cli.js" - }, - "engines": { - "node": "^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7" - } - }, - "node_modules/caniuse-lite": { - "version": "1.0.30001429", - "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001429.tgz", - "integrity": "sha512-511ThLu1hF+5RRRt0zYCf2U2yRr9GPF6m5y90SBCWsvSoYoW7yAGlv/elyPaNfvGCkp6kj/KFZWU0BMA69Prsg==", - "funding": [ - { - "type": "opencollective", - "url": "https://opencollective.com/browserslist" - }, - { - "type": "tidelift", - "url": "https://tidelift.com/funding/github/npm/caniuse-lite" - } - ], - "peer": true - }, - "node_modules/chalk": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", - "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", - "peer": true, - "dependencies": { - "ansi-styles": "^3.2.1", - "escape-string-regexp": "^1.0.5", - "supports-color": "^5.3.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/color-convert": { - "version": "1.9.3", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", - "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", - "peer": true, - "dependencies": { - "color-name": "1.1.3" - } - }, - "node_modules/color-name": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", - "integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==", - "peer": true - }, - "node_modules/convert-source-map": { - "version": "1.9.0", - "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.9.0.tgz", - "integrity": "sha512-ASFBup0Mz1uyiIjANan1jzLQami9z1PoYSZCiiYW2FczPbenXc45FZdBZLzOT+r6+iciuEModtmCti+hjaAk0A==", - "peer": true - }, - "node_modules/debug": { - "version": "4.3.4", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", - "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", - "peer": true, - "dependencies": { - "ms": "2.1.2" - }, - "engines": { - "node": ">=6.0" - }, - "peerDependenciesMeta": { - "supports-color": { - "optional": true - } - } - }, - "node_modules/electron-to-chromium": { - "version": "1.4.284", - "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.284.tgz", - "integrity": "sha512-M8WEXFuKXMYMVr45fo8mq0wUrrJHheiKZf6BArTKk9ZBYCKJEOU5H8cdWgDT+qCVZf7Na4lVUaZsA+h6uA9+PA==", - "peer": true - }, - "node_modules/esbuild": { - "version": "0.15.12", - "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.15.12.tgz", - "integrity": "sha512-PcT+/wyDqJQsRVhaE9uX/Oq4XLrFh0ce/bs2TJh4CSaw9xuvI+xFrH2nAYOADbhQjUgAhNWC5LKoUsakm4dxng==", - "dev": true, - "hasInstallScript": true, - "bin": { - "esbuild": "bin/esbuild" - }, - "engines": { - "node": ">=12" - }, - "optionalDependencies": { - "@esbuild/android-arm": "0.15.12", - "@esbuild/linux-loong64": "0.15.12", - "esbuild-android-64": "0.15.12", - "esbuild-android-arm64": "0.15.12", - "esbuild-darwin-64": "0.15.12", - "esbuild-darwin-arm64": "0.15.12", - "esbuild-freebsd-64": "0.15.12", - "esbuild-freebsd-arm64": "0.15.12", - "esbuild-linux-32": "0.15.12", - "esbuild-linux-64": "0.15.12", - "esbuild-linux-arm": "0.15.12", - "esbuild-linux-arm64": "0.15.12", - "esbuild-linux-mips64le": "0.15.12", - "esbuild-linux-ppc64le": "0.15.12", - "esbuild-linux-riscv64": "0.15.12", - "esbuild-linux-s390x": "0.15.12", - "esbuild-netbsd-64": "0.15.12", - "esbuild-openbsd-64": "0.15.12", - "esbuild-sunos-64": "0.15.12", - "esbuild-windows-32": "0.15.12", - "esbuild-windows-64": "0.15.12", - "esbuild-windows-arm64": "0.15.12" - } - }, - "node_modules/esbuild-android-64": { - "version": "0.15.12", - "resolved": "https://registry.npmjs.org/esbuild-android-64/-/esbuild-android-64-0.15.12.tgz", - "integrity": "sha512-MJKXwvPY9g0rGps0+U65HlTsM1wUs9lbjt5CU19RESqycGFDRijMDQsh68MtbzkqWSRdEtiKS1mtPzKneaAI0Q==", - "cpu": [ - "x64" - ], - "dev": true, - "optional": true, - "os": [ - "android" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/esbuild-android-arm64": { - "version": "0.15.12", - "resolved": "https://registry.npmjs.org/esbuild-android-arm64/-/esbuild-android-arm64-0.15.12.tgz", - "integrity": "sha512-Hc9SEcZbIMhhLcvhr1DH+lrrec9SFTiRzfJ7EGSBZiiw994gfkVV6vG0sLWqQQ6DD7V4+OggB+Hn0IRUdDUqvA==", - "cpu": [ - "arm64" - ], - "dev": true, - "optional": true, - "os": [ - "android" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/esbuild-darwin-64": { - "version": "0.15.12", - "resolved": "https://registry.npmjs.org/esbuild-darwin-64/-/esbuild-darwin-64-0.15.12.tgz", - "integrity": "sha512-qkmqrTVYPFiePt5qFjP8w/S+GIUMbt6k8qmiPraECUWfPptaPJUGkCKrWEfYFRWB7bY23FV95rhvPyh/KARP8Q==", - "cpu": [ - "x64" - ], - "dev": true, - "optional": true, - "os": [ - "darwin" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/esbuild-darwin-arm64": { - "version": "0.15.12", - "resolved": "https://registry.npmjs.org/esbuild-darwin-arm64/-/esbuild-darwin-arm64-0.15.12.tgz", - "integrity": "sha512-z4zPX02tQ41kcXMyN3c/GfZpIjKoI/BzHrdKUwhC/Ki5BAhWv59A9M8H+iqaRbwpzYrYidTybBwiZAIWCLJAkw==", - "cpu": [ - "arm64" - ], - "dev": true, - "optional": true, - "os": [ - "darwin" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/esbuild-freebsd-64": { - "version": "0.15.12", - "resolved": "https://registry.npmjs.org/esbuild-freebsd-64/-/esbuild-freebsd-64-0.15.12.tgz", - "integrity": "sha512-XFL7gKMCKXLDiAiBjhLG0XECliXaRLTZh6hsyzqUqPUf/PY4C6EJDTKIeqqPKXaVJ8+fzNek88285krSz1QECw==", - "cpu": [ - "x64" - ], - "dev": true, - "optional": true, - "os": [ - "freebsd" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/esbuild-freebsd-arm64": { - "version": "0.15.12", - "resolved": "https://registry.npmjs.org/esbuild-freebsd-arm64/-/esbuild-freebsd-arm64-0.15.12.tgz", - "integrity": "sha512-jwEIu5UCUk6TjiG1X+KQnCGISI+ILnXzIzt9yDVrhjug2fkYzlLbl0K43q96Q3KB66v6N1UFF0r5Ks4Xo7i72g==", - "cpu": [ - "arm64" - ], - "dev": true, - "optional": true, - "os": [ - "freebsd" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/esbuild-linux-32": { - "version": "0.15.12", - "resolved": "https://registry.npmjs.org/esbuild-linux-32/-/esbuild-linux-32-0.15.12.tgz", - "integrity": "sha512-uSQuSEyF1kVzGzuIr4XM+v7TPKxHjBnLcwv2yPyCz8riV8VUCnO/C4BF3w5dHiVpCd5Z1cebBtZJNlC4anWpwA==", - "cpu": [ - "ia32" - ], - "dev": true, - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/esbuild-linux-64": { - "version": "0.15.12", - "resolved": "https://registry.npmjs.org/esbuild-linux-64/-/esbuild-linux-64-0.15.12.tgz", - "integrity": "sha512-QcgCKb7zfJxqT9o5z9ZUeGH1k8N6iX1Y7VNsEi5F9+HzN1OIx7ESxtQXDN9jbeUSPiRH1n9cw6gFT3H4qbdvcA==", - "cpu": [ - "x64" - ], - "dev": true, - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/esbuild-linux-arm": { - "version": "0.15.12", - "resolved": "https://registry.npmjs.org/esbuild-linux-arm/-/esbuild-linux-arm-0.15.12.tgz", - "integrity": "sha512-Wf7T0aNylGcLu7hBnzMvsTfEXdEdJY/hY3u36Vla21aY66xR0MS5I1Hw8nVquXjTN0A6fk/vnr32tkC/C2lb0A==", - "cpu": [ - "arm" - ], - "dev": true, - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/esbuild-linux-arm64": { - "version": "0.15.12", - "resolved": "https://registry.npmjs.org/esbuild-linux-arm64/-/esbuild-linux-arm64-0.15.12.tgz", - "integrity": "sha512-HtNq5xm8fUpZKwWKS2/YGwSfTF+339L4aIA8yphNKYJckd5hVdhfdl6GM2P3HwLSCORS++++7++//ApEwXEuAQ==", - "cpu": [ - "arm64" - ], - "dev": true, - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/esbuild-linux-mips64le": { - "version": "0.15.12", - "resolved": "https://registry.npmjs.org/esbuild-linux-mips64le/-/esbuild-linux-mips64le-0.15.12.tgz", - "integrity": "sha512-Qol3+AvivngUZkTVFgLpb0H6DT+N5/zM3V1YgTkryPYFeUvuT5JFNDR3ZiS6LxhyF8EE+fiNtzwlPqMDqVcc6A==", - "cpu": [ - "mips64el" - ], - "dev": true, - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/esbuild-linux-ppc64le": { - "version": "0.15.12", - "resolved": "https://registry.npmjs.org/esbuild-linux-ppc64le/-/esbuild-linux-ppc64le-0.15.12.tgz", - "integrity": "sha512-4D8qUCo+CFKaR0cGXtGyVsOI7w7k93Qxb3KFXWr75An0DHamYzq8lt7TNZKoOq/Gh8c40/aKaxvcZnTgQ0TJNg==", - "cpu": [ - "ppc64" - ], - "dev": true, - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/esbuild-linux-riscv64": { - "version": "0.15.12", - "resolved": "https://registry.npmjs.org/esbuild-linux-riscv64/-/esbuild-linux-riscv64-0.15.12.tgz", - "integrity": "sha512-G9w6NcuuCI6TUUxe6ka0enjZHDnSVK8bO+1qDhMOCtl7Tr78CcZilJj8SGLN00zO5iIlwNRZKHjdMpfFgNn1VA==", - "cpu": [ - "riscv64" - ], - "dev": true, - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/esbuild-linux-s390x": { - "version": "0.15.12", - "resolved": "https://registry.npmjs.org/esbuild-linux-s390x/-/esbuild-linux-s390x-0.15.12.tgz", - "integrity": "sha512-Lt6BDnuXbXeqSlVuuUM5z18GkJAZf3ERskGZbAWjrQoi9xbEIsj/hEzVnSAFLtkfLuy2DE4RwTcX02tZFunXww==", - "cpu": [ - "s390x" - ], - "dev": true, - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/esbuild-netbsd-64": { - "version": "0.15.12", - "resolved": "https://registry.npmjs.org/esbuild-netbsd-64/-/esbuild-netbsd-64-0.15.12.tgz", - "integrity": "sha512-jlUxCiHO1dsqoURZDQts+HK100o0hXfi4t54MNRMCAqKGAV33JCVvMplLAa2FwviSojT/5ZG5HUfG3gstwAG8w==", - "cpu": [ - "x64" - ], - "dev": true, - "optional": true, - "os": [ - "netbsd" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/esbuild-openbsd-64": { - "version": "0.15.12", - "resolved": "https://registry.npmjs.org/esbuild-openbsd-64/-/esbuild-openbsd-64-0.15.12.tgz", - "integrity": "sha512-1o1uAfRTMIWNOmpf8v7iudND0L6zRBYSH45sofCZywrcf7NcZA+c7aFsS1YryU+yN7aRppTqdUK1PgbZVaB1Dw==", - "cpu": [ - "x64" - ], - "dev": true, - "optional": true, - "os": [ - "openbsd" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/esbuild-sunos-64": { - "version": "0.15.12", - "resolved": "https://registry.npmjs.org/esbuild-sunos-64/-/esbuild-sunos-64-0.15.12.tgz", - "integrity": "sha512-nkl251DpoWoBO9Eq9aFdoIt2yYmp4I3kvQjba3jFKlMXuqQ9A4q+JaqdkCouG3DHgAGnzshzaGu6xofGcXyPXg==", - "cpu": [ - "x64" - ], - "dev": true, - "optional": true, - "os": [ - "sunos" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/esbuild-windows-32": { - "version": "0.15.12", - "resolved": "https://registry.npmjs.org/esbuild-windows-32/-/esbuild-windows-32-0.15.12.tgz", - "integrity": "sha512-WlGeBZHgPC00O08luIp5B2SP4cNCp/PcS+3Pcg31kdcJPopHxLkdCXtadLU9J82LCfw4TVls21A6lilQ9mzHrw==", - "cpu": [ - "ia32" - ], - "dev": true, - "optional": true, - "os": [ - "win32" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/esbuild-windows-64": { - "version": "0.15.12", - "resolved": "https://registry.npmjs.org/esbuild-windows-64/-/esbuild-windows-64-0.15.12.tgz", - "integrity": "sha512-VActO3WnWZSN//xjSfbiGOSyC+wkZtI8I4KlgrTo5oHJM6z3MZZBCuFaZHd8hzf/W9KPhF0lY8OqlmWC9HO5AA==", - "cpu": [ - "x64" - ], - "dev": true, - "optional": true, - "os": [ - "win32" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/esbuild-windows-arm64": { - "version": "0.15.12", - "resolved": "https://registry.npmjs.org/esbuild-windows-arm64/-/esbuild-windows-arm64-0.15.12.tgz", - "integrity": "sha512-Of3MIacva1OK/m4zCNIvBfz8VVROBmQT+gRX6pFTLPngFYcj6TFH/12VveAqq1k9VB2l28EoVMNMUCcmsfwyuA==", - "cpu": [ - "arm64" - ], - "dev": true, - "optional": true, - "os": [ - "win32" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/escalade": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.1.1.tgz", - "integrity": "sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==", - "peer": true, - "engines": { - "node": ">=6" - } - }, - "node_modules/escape-string-regexp": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", - "integrity": "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==", - "peer": true, - "engines": { - "node": ">=0.8.0" - } - }, - "node_modules/estree-walker": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/estree-walker/-/estree-walker-2.0.2.tgz", - "integrity": "sha512-Rfkk/Mp/DL7JVje3u18FxFujQlTNR2q6QfMSMB7AvCBx91NGj/ba3kCfza0f6dVDbw7YlRf/nDrn7pQrCCyQ/w==" - }, - "node_modules/fsevents": { - "version": "2.3.2", - "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.2.tgz", - "integrity": "sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==", - "dev": true, - "hasInstallScript": true, - "optional": true, - "os": [ - "darwin" - ], - "engines": { - "node": "^8.16.0 || ^10.6.0 || >=11.0.0" - } - }, - "node_modules/function-bind": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz", - "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==", - "dev": true - }, - "node_modules/gensync": { - "version": "1.0.0-beta.2", - "resolved": "https://registry.npmjs.org/gensync/-/gensync-1.0.0-beta.2.tgz", - "integrity": "sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg==", - "peer": true, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/globals": { - "version": "11.12.0", - "resolved": "https://registry.npmjs.org/globals/-/globals-11.12.0.tgz", - "integrity": "sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==", - "peer": true, - "engines": { - "node": ">=4" - } - }, - "node_modules/has": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz", - "integrity": "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==", - "dev": true, - "dependencies": { - "function-bind": "^1.1.1" - }, - "engines": { - "node": ">= 0.4.0" - } - }, - "node_modules/has-flag": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", - "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==", - "peer": true, - "engines": { - "node": ">=4" - } - }, - "node_modules/is-core-module": { - "version": "2.11.0", - "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.11.0.tgz", - "integrity": "sha512-RRjxlvLDkD1YJwDbroBHMb+cukurkDWNyHx7D3oNB5x9rb5ogcksMC5wHCadcXoo67gVr/+3GFySh3134zi6rw==", - "dev": true, - "dependencies": { - "has": "^1.0.3" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/js-tokens": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz", - "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==", - "peer": true - }, - "node_modules/jsesc": { - "version": "2.5.2", - "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-2.5.2.tgz", - "integrity": "sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA==", - "peer": true, - "bin": { - "jsesc": "bin/jsesc" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/json5": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/json5/-/json5-2.2.1.tgz", - "integrity": "sha512-1hqLFMSrGHRHxav9q9gNjJ5EXznIxGVO09xQRrwplcS8qs28pZ8s8hupZAmqDwZUmVZ2Qb2jnyPOWcDH8m8dlA==", - "peer": true, - "bin": { - "json5": "lib/cli.js" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/ms": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", - "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", - "peer": true - }, - "node_modules/nanoid": { - "version": "3.3.4", - "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.4.tgz", - "integrity": "sha512-MqBkQh/OHTS2egovRtLk45wEyNXwF+cokD+1YPf9u5VfJiRdAiRwB2froX5Co9Rh20xs4siNPm8naNotSD6RBw==", - "dev": true, - "bin": { - "nanoid": "bin/nanoid.cjs" - }, - "engines": { - "node": "^10 || ^12 || ^13.7 || ^14 || >=15.0.1" - } - }, - "node_modules/node-releases": { - "version": "2.0.6", - "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.6.tgz", - "integrity": "sha512-PiVXnNuFm5+iYkLBNeq5211hvO38y63T0i2KKh2KnUs3RpzJ+JtODFjkD8yjLwnDkTYF1eKXheUwdssR+NRZdg==", - "peer": true - }, - "node_modules/path-parse": { - "version": "1.0.7", - "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz", - "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==", - "dev": true - }, - "node_modules/picocolors": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.0.0.tgz", - "integrity": "sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ==" - }, - "node_modules/picomatch": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", - "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", - "engines": { - "node": ">=8.6" - }, - "funding": { - "url": "https://github.com/sponsors/jonschlinkert" - } - }, - "node_modules/postcss": { - "version": "8.4.18", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.18.tgz", - "integrity": "sha512-Wi8mWhncLJm11GATDaQKobXSNEYGUHeQLiQqDFG1qQ5UTDPTEvKw0Xt5NsTpktGTwLps3ByrWsBrG0rB8YQ9oA==", - "dev": true, - "funding": [ - { - "type": "opencollective", - "url": "https://opencollective.com/postcss/" - }, - { - "type": "tidelift", - "url": "https://tidelift.com/funding/github/npm/postcss" - } - ], - "dependencies": { - "nanoid": "^3.3.4", - "picocolors": "^1.0.0", - "source-map-js": "^1.0.2" - }, - "engines": { - "node": "^10 || ^12 || >=14" - } - }, - "node_modules/resolve": { - "version": "1.22.1", - "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.1.tgz", - "integrity": "sha512-nBpuuYuY5jFsli/JIs1oldw6fOQCBioohqWZg/2hiaOybXOft4lonv85uDOKXdf8rhyK159cxU5cDcK/NKk8zw==", - "dev": true, - "dependencies": { - "is-core-module": "^2.9.0", - "path-parse": "^1.0.7", - "supports-preserve-symlinks-flag": "^1.0.0" - }, - "bin": { - "resolve": "bin/resolve" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/rollup": { - "version": "2.79.1", - "resolved": "https://registry.npmjs.org/rollup/-/rollup-2.79.1.tgz", - "integrity": "sha512-uKxbd0IhMZOhjAiD5oAFp7BqvkA4Dv47qpOCtaNvng4HBwdbWtdOh8f5nZNuk2rp51PMGk3bzfWu5oayNEuYnw==", - "devOptional": true, - "bin": { - "rollup": "dist/bin/rollup" - }, - "engines": { - "node": ">=10.0.0" - }, - "optionalDependencies": { - "fsevents": "~2.3.2" - } - }, - "node_modules/semver": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", - "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", - "peer": true, - "bin": { - "semver": "bin/semver.js" - } - }, - "node_modules/source-map-js": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.0.2.tgz", - "integrity": "sha512-R0XvVJ9WusLiqTCEiGCmICCMplcCkIwwR11mOSD9CR5u+IXYdiseeEuXCVAjS54zqwkLcPNnmU4OeJ6tUrWhDw==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/supports-color": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", - "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", - "peer": true, - "dependencies": { - "has-flag": "^3.0.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/supports-preserve-symlinks-flag": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz", - "integrity": "sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==", - "dev": true, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/to-fast-properties": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/to-fast-properties/-/to-fast-properties-2.0.0.tgz", - "integrity": "sha512-/OaKK0xYrs3DmxRYqL/yDc+FxFUVYhDlXMhRmv3z915w2HF1tnN1omB354j8VUGO/hbRzyD6Y3sA7v7GS/ceog==", - "engines": { - "node": ">=4" - } - }, - "node_modules/typescript": { - "version": "4.8.4", - "resolved": "https://registry.npmjs.org/typescript/-/typescript-4.8.4.tgz", - "integrity": "sha512-QCh+85mCy+h0IGff8r5XWzOVSbBO+KfeYrMQh7NJ58QujwcE22u+NUSmUxqF+un70P9GXKxa2HCNiTTMJknyjQ==", - "dev": true, - "bin": { - "tsc": "bin/tsc", - "tsserver": "bin/tsserver" - }, - "engines": { - "node": ">=4.2.0" - } - }, - "node_modules/update-browserslist-db": { - "version": "1.0.10", - "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.0.10.tgz", - "integrity": "sha512-OztqDenkfFkbSG+tRxBeAnCVPckDBcvibKd35yDONx6OU8N7sqgwc7rCbkJ/WcYtVRZ4ba68d6byhC21GFh7sQ==", - "funding": [ - { - "type": "opencollective", - "url": "https://opencollective.com/browserslist" - }, - { - "type": "tidelift", - "url": "https://tidelift.com/funding/github/npm/browserslist" - } - ], - "peer": true, - "dependencies": { - "escalade": "^3.1.1", - "picocolors": "^1.0.0" - }, - "bin": { - "browserslist-lint": "cli.js" - }, - "peerDependencies": { - "browserslist": ">= 4.21.0" - } - }, - "node_modules/vite": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/vite/-/vite-3.2.2.tgz", - "integrity": "sha512-pLrhatFFOWO9kS19bQ658CnRYzv0WLbsPih6R+iFeEEhDOuYgYCX2rztUViMz/uy/V8cLCJvLFeiOK7RJEzHcw==", - "dev": true, - "dependencies": { - "esbuild": "^0.15.9", - "postcss": "^8.4.18", - "resolve": "^1.22.1", - "rollup": "^2.79.1" - }, - "bin": { - "vite": "bin/vite.js" - }, - "engines": { - "node": "^14.18.0 || >=16.0.0" - }, - "optionalDependencies": { - "fsevents": "~2.3.2" - }, - "peerDependencies": { - "less": "*", - "sass": "*", - "stylus": "*", - "sugarss": "*", - "terser": "^5.4.0" - }, - "peerDependenciesMeta": { - "less": { - "optional": true - }, - "sass": { - "optional": true - }, - "stylus": { - "optional": true - }, - "sugarss": { - "optional": true - }, - "terser": { - "optional": true - } - } - } - }, - "dependencies": { - "@ampproject/remapping": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/@ampproject/remapping/-/remapping-2.2.0.tgz", - "integrity": "sha512-qRmjj8nj9qmLTQXXmaR1cck3UXSRMPrbsLJAasZpF+t3riI71BXed5ebIOYwQntykeZuhjsdweEc9BxH5Jc26w==", - "peer": true, - "requires": { - "@jridgewell/gen-mapping": "^0.1.0", - "@jridgewell/trace-mapping": "^0.3.9" - } - }, - "@babel/code-frame": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.18.6.tgz", - "integrity": "sha512-TDCmlK5eOvH+eH7cdAFlNXeVJqWIQ7gW9tY1GJIpUtFb6CmjVyq2VM3u71bOyR8CRihcCgMUYoDNyLXao3+70Q==", - "peer": true, - "requires": { - "@babel/highlight": "^7.18.6" - } - }, - "@babel/compat-data": { - "version": "7.20.1", - "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.20.1.tgz", - "integrity": "sha512-EWZ4mE2diW3QALKvDMiXnbZpRvlj+nayZ112nK93SnhqOtpdsbVD4W+2tEoT3YNBAG9RBR0ISY758ZkOgsn6pQ==", - "peer": true - }, - "@babel/core": { - "version": "7.19.6", - "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.19.6.tgz", - "integrity": "sha512-D2Ue4KHpc6Ys2+AxpIx1BZ8+UegLLLE2p3KJEuJRKmokHOtl49jQ5ny1773KsGLZs8MQvBidAF6yWUJxRqtKtg==", - "peer": true, - "requires": { - "@ampproject/remapping": "^2.1.0", - "@babel/code-frame": "^7.18.6", - "@babel/generator": "^7.19.6", - "@babel/helper-compilation-targets": "^7.19.3", - "@babel/helper-module-transforms": "^7.19.6", - "@babel/helpers": "^7.19.4", - "@babel/parser": "^7.19.6", - "@babel/template": "^7.18.10", - "@babel/traverse": "^7.19.6", - "@babel/types": "^7.19.4", - "convert-source-map": "^1.7.0", - "debug": "^4.1.0", - "gensync": "^1.0.0-beta.2", - "json5": "^2.2.1", - "semver": "^6.3.0" - } - }, - "@babel/generator": { - "version": "7.20.1", - "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.20.1.tgz", - "integrity": "sha512-u1dMdBUmA7Z0rBB97xh8pIhviK7oItYOkjbsCxTWMknyvbQRBwX7/gn4JXurRdirWMFh+ZtYARqkA6ydogVZpg==", - "peer": true, - "requires": { - "@babel/types": "^7.20.0", - "@jridgewell/gen-mapping": "^0.3.2", - "jsesc": "^2.5.1" - }, - "dependencies": { - "@jridgewell/gen-mapping": { - "version": "0.3.2", - "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.2.tgz", - "integrity": "sha512-mh65xKQAzI6iBcFzwv28KVWSmCkdRBWoOh+bYQGW3+6OZvbbN3TqMGo5hqYxQniRcH9F2VZIoJCm4pa3BPDK/A==", - "peer": true, - "requires": { - "@jridgewell/set-array": "^1.0.1", - "@jridgewell/sourcemap-codec": "^1.4.10", - "@jridgewell/trace-mapping": "^0.3.9" - } - } - } - }, - "@babel/helper-compilation-targets": { - "version": "7.20.0", - "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.20.0.tgz", - "integrity": "sha512-0jp//vDGp9e8hZzBc6N/KwA5ZK3Wsm/pfm4CrY7vzegkVxc65SgSn6wYOnwHe9Js9HRQ1YTCKLGPzDtaS3RoLQ==", - "peer": true, - "requires": { - "@babel/compat-data": "^7.20.0", - "@babel/helper-validator-option": "^7.18.6", - "browserslist": "^4.21.3", - "semver": "^6.3.0" - } - }, - "@babel/helper-environment-visitor": { - "version": "7.18.9", - "resolved": "https://registry.npmjs.org/@babel/helper-environment-visitor/-/helper-environment-visitor-7.18.9.tgz", - "integrity": "sha512-3r/aACDJ3fhQ/EVgFy0hpj8oHyHpQc+LPtJoY9SzTThAsStm4Ptegq92vqKoE3vD706ZVFWITnMnxucw+S9Ipg==", - "peer": true - }, - "@babel/helper-function-name": { - "version": "7.19.0", - "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.19.0.tgz", - "integrity": "sha512-WAwHBINyrpqywkUH0nTnNgI5ina5TFn85HKS0pbPDfxFfhyR/aNQEn4hGi1P1JyT//I0t4OgXUlofzWILRvS5w==", - "peer": true, - "requires": { - "@babel/template": "^7.18.10", - "@babel/types": "^7.19.0" - } - }, - "@babel/helper-hoist-variables": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/helper-hoist-variables/-/helper-hoist-variables-7.18.6.tgz", - "integrity": "sha512-UlJQPkFqFULIcyW5sbzgbkxn2FKRgwWiRexcuaR8RNJRy8+LLveqPjwZV/bwrLZCN0eUHD/x8D0heK1ozuoo6Q==", - "peer": true, - "requires": { - "@babel/types": "^7.18.6" - } - }, - "@babel/helper-module-imports": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.18.6.tgz", - "integrity": "sha512-0NFvs3VkuSYbFi1x2Vd6tKrywq+z/cLeYC/RJNFrIX/30Bf5aiGYbtvGXolEktzJH8o5E5KJ3tT+nkxuuZFVlA==", - "requires": { - "@babel/types": "^7.18.6" - } - }, - "@babel/helper-module-transforms": { - "version": "7.19.6", - "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.19.6.tgz", - "integrity": "sha512-fCmcfQo/KYr/VXXDIyd3CBGZ6AFhPFy1TfSEJ+PilGVlQT6jcbqtHAM4C1EciRqMza7/TpOUZliuSH+U6HAhJw==", - "peer": true, - "requires": { - "@babel/helper-environment-visitor": "^7.18.9", - "@babel/helper-module-imports": "^7.18.6", - "@babel/helper-simple-access": "^7.19.4", - "@babel/helper-split-export-declaration": "^7.18.6", - "@babel/helper-validator-identifier": "^7.19.1", - "@babel/template": "^7.18.10", - "@babel/traverse": "^7.19.6", - "@babel/types": "^7.19.4" - } - }, - "@babel/helper-simple-access": { - "version": "7.19.4", - "resolved": "https://registry.npmjs.org/@babel/helper-simple-access/-/helper-simple-access-7.19.4.tgz", - "integrity": "sha512-f9Xq6WqBFqaDfbCzn2w85hwklswz5qsKlh7f08w4Y9yhJHpnNC0QemtSkK5YyOY8kPGvyiwdzZksGUhnGdaUIg==", - "peer": true, - "requires": { - "@babel/types": "^7.19.4" - } - }, - "@babel/helper-split-export-declaration": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.18.6.tgz", - "integrity": "sha512-bde1etTx6ZyTmobl9LLMMQsaizFVZrquTEHOqKeQESMKo4PlObf+8+JA25ZsIpZhT/WEd39+vOdLXAFG/nELpA==", - "peer": true, - "requires": { - "@babel/types": "^7.18.6" - } - }, - "@babel/helper-string-parser": { - "version": "7.19.4", - "resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.19.4.tgz", - "integrity": "sha512-nHtDoQcuqFmwYNYPz3Rah5ph2p8PFeFCsZk9A/48dPc/rGocJ5J3hAAZ7pb76VWX3fZKu+uEr/FhH5jLx7umrw==" - }, - "@babel/helper-validator-identifier": { - "version": "7.19.1", - "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.19.1.tgz", - "integrity": "sha512-awrNfaMtnHUr653GgGEs++LlAvW6w+DcPrOliSMXWCKo597CwL5Acf/wWdNkf/tfEQE3mjkeD1YOVZOUV/od1w==" - }, - "@babel/helper-validator-option": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.18.6.tgz", - "integrity": "sha512-XO7gESt5ouv/LRJdrVjkShckw6STTaB7l9BrpBaAHDeF5YZT+01PCwmR0SJHnkW6i8OwW/EVWRShfi4j2x+KQw==", - "peer": true - }, - "@babel/helpers": { - "version": "7.20.1", - "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.20.1.tgz", - "integrity": "sha512-J77mUVaDTUJFZ5BpP6mMn6OIl3rEWymk2ZxDBQJUG3P+PbmyMcF3bYWvz0ma69Af1oobDqT/iAsvzhB58xhQUg==", - "peer": true, - "requires": { - "@babel/template": "^7.18.10", - "@babel/traverse": "^7.20.1", - "@babel/types": "^7.20.0" - } - }, - "@babel/highlight": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.18.6.tgz", - "integrity": "sha512-u7stbOuYjaPezCuLj29hNW1v64M2Md2qupEKP1fHc7WdOA3DgLh37suiSrZYY7haUB7iBeQZ9P1uiRF359do3g==", - "peer": true, - "requires": { - "@babel/helper-validator-identifier": "^7.18.6", - "chalk": "^2.0.0", - "js-tokens": "^4.0.0" - } - }, - "@babel/parser": { - "version": "7.20.1", - "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.20.1.tgz", - "integrity": "sha512-hp0AYxaZJhxULfM1zyp7Wgr+pSUKBcP3M+PHnSzWGdXOzg/kHWIgiUWARvubhUKGOEw3xqY4x+lyZ9ytBVcELw==", - "peer": true - }, - "@babel/template": { - "version": "7.18.10", - "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.18.10.tgz", - "integrity": "sha512-TI+rCtooWHr3QJ27kJxfjutghu44DLnasDMwpDqCXVTal9RLp3RSYNh4NdBrRP2cQAoG9A8juOQl6P6oZG4JxA==", - "peer": true, - "requires": { - "@babel/code-frame": "^7.18.6", - "@babel/parser": "^7.18.10", - "@babel/types": "^7.18.10" - } - }, - "@babel/traverse": { - "version": "7.20.1", - "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.20.1.tgz", - "integrity": "sha512-d3tN8fkVJwFLkHkBN479SOsw4DMZnz8cdbL/gvuDuzy3TS6Nfw80HuQqhw1pITbIruHyh7d1fMA47kWzmcUEGA==", - "peer": true, - "requires": { - "@babel/code-frame": "^7.18.6", - "@babel/generator": "^7.20.1", - "@babel/helper-environment-visitor": "^7.18.9", - "@babel/helper-function-name": "^7.19.0", - "@babel/helper-hoist-variables": "^7.18.6", - "@babel/helper-split-export-declaration": "^7.18.6", - "@babel/parser": "^7.20.1", - "@babel/types": "^7.20.0", - "debug": "^4.1.0", - "globals": "^11.1.0" - } - }, - "@babel/types": { - "version": "7.20.0", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.20.0.tgz", - "integrity": "sha512-Jlgt3H0TajCW164wkTOTzHkZb075tMQMULzrLUoUeKmO7eFL96GgDxf7/Axhc5CAuKE3KFyVW1p6ysKsi2oXAg==", - "requires": { - "@babel/helper-string-parser": "^7.19.4", - "@babel/helper-validator-identifier": "^7.19.1", - "to-fast-properties": "^2.0.0" - } - }, - "@esbuild/android-arm": { - "version": "0.15.12", - "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.15.12.tgz", - "integrity": "sha512-IC7TqIqiyE0MmvAhWkl/8AEzpOtbhRNDo7aph47We1NbE5w2bt/Q+giAhe0YYeVpYnIhGMcuZY92qDK6dQauvA==", - "dev": true, - "optional": true - }, - "@esbuild/linux-loong64": { - "version": "0.15.12", - "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.15.12.tgz", - "integrity": "sha512-tZEowDjvU7O7I04GYvWQOS4yyP9E/7YlsB0jjw1Ycukgr2ycEzKyIk5tms5WnLBymaewc6VmRKnn5IJWgK4eFw==", - "dev": true, - "optional": true - }, - "@jridgewell/gen-mapping": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.1.1.tgz", - "integrity": "sha512-sQXCasFk+U8lWYEe66WxRDOE9PjVz4vSM51fTu3Hw+ClTpUSQb718772vH3pyS5pShp6lvQM7SxgIDXXXmOX7w==", - "peer": true, - "requires": { - "@jridgewell/set-array": "^1.0.0", - "@jridgewell/sourcemap-codec": "^1.4.10" - } - }, - "@jridgewell/resolve-uri": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.0.tgz", - "integrity": "sha512-F2msla3tad+Mfht5cJq7LSXcdudKTWCVYUgw6pLFOOHSTtZlj6SWNYAp+AhuqLmWdBO2X5hPrLcu8cVP8fy28w==", - "peer": true - }, - "@jridgewell/set-array": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/@jridgewell/set-array/-/set-array-1.1.2.tgz", - "integrity": "sha512-xnkseuNADM0gt2bs+BvhO0p78Mk762YnZdsuzFV018NoG1Sj1SCQvpSqa7XUaTam5vAGasABV9qXASMKnFMwMw==", - "peer": true - }, - "@jridgewell/sourcemap-codec": { - "version": "1.4.14", - "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.14.tgz", - "integrity": "sha512-XPSJHWmi394fuUuzDnGz1wiKqWfo1yXecHQMRf2l6hztTO+nPru658AyDngaBe7isIxEkRsPR3FZh+s7iVa4Uw==", - "peer": true - }, - "@jridgewell/trace-mapping": { - "version": "0.3.17", - "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.17.tgz", - "integrity": "sha512-MCNzAp77qzKca9+W/+I0+sEpaUnZoeasnghNeVc41VZCEKaCH73Vq3BZZ/SzWIgrqE4H4ceI+p+b6C0mHf9T4g==", - "peer": true, - "requires": { - "@jridgewell/resolve-uri": "3.1.0", - "@jridgewell/sourcemap-codec": "1.4.14" - } - }, - "@rollup/plugin-babel": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/@rollup/plugin-babel/-/plugin-babel-6.0.2.tgz", - "integrity": "sha512-Vnt8XIWYwCf3MD7qhBWYlP9pjSZvcE++nlPXhQYw6YNehl5742AzFbrV6h4BHb20VAOVUlIksVLymQCTwVCGDg==", - "requires": { - "@babel/helper-module-imports": "^7.18.6", - "@rollup/pluginutils": "^5.0.1" - } - }, - "@rollup/pluginutils": { - "version": "5.0.2", - "resolved": "https://registry.npmjs.org/@rollup/pluginutils/-/pluginutils-5.0.2.tgz", - "integrity": "sha512-pTd9rIsP92h+B6wWwFbW8RkZv4hiR/xKsqre4SIuAOaOEQRxi0lqLke9k2/7WegC85GgUs9pjmOjCUi3In4vwA==", - "requires": { - "@types/estree": "^1.0.0", - "estree-walker": "^2.0.2", - "picomatch": "^2.3.1" - } - }, - "@types/estree": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/@types/estree/-/estree-1.0.0.tgz", - "integrity": "sha512-WulqXMDUTYAXCjZnk6JtIHPigp55cVtDgDrO2gHRwhyJto21+1zbVCtOYB2L1F9w4qCQ0rOGWBnBe0FNTiEJIQ==" - }, - "ansi-styles": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", - "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", - "peer": true, - "requires": { - "color-convert": "^1.9.0" - } - }, - "browserslist": { - "version": "4.21.4", - "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.21.4.tgz", - "integrity": "sha512-CBHJJdDmgjl3daYjN5Cp5kbTf1mUhZoS+beLklHIvkOWscs83YAhLlF3Wsh/lciQYAcbBJgTOD44VtG31ZM4Hw==", - "peer": true, - "requires": { - "caniuse-lite": "^1.0.30001400", - "electron-to-chromium": "^1.4.251", - "node-releases": "^2.0.6", - "update-browserslist-db": "^1.0.9" - } - }, - "caniuse-lite": { - "version": "1.0.30001429", - "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001429.tgz", - "integrity": "sha512-511ThLu1hF+5RRRt0zYCf2U2yRr9GPF6m5y90SBCWsvSoYoW7yAGlv/elyPaNfvGCkp6kj/KFZWU0BMA69Prsg==", - "peer": true - }, - "chalk": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", - "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", - "peer": true, - "requires": { - "ansi-styles": "^3.2.1", - "escape-string-regexp": "^1.0.5", - "supports-color": "^5.3.0" - } - }, - "color-convert": { - "version": "1.9.3", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", - "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", - "peer": true, - "requires": { - "color-name": "1.1.3" - } - }, - "color-name": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", - "integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==", - "peer": true - }, - "convert-source-map": { - "version": "1.9.0", - "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.9.0.tgz", - "integrity": "sha512-ASFBup0Mz1uyiIjANan1jzLQami9z1PoYSZCiiYW2FczPbenXc45FZdBZLzOT+r6+iciuEModtmCti+hjaAk0A==", - "peer": true - }, - "debug": { - "version": "4.3.4", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", - "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", - "peer": true, - "requires": { - "ms": "2.1.2" - } - }, - "electron-to-chromium": { - "version": "1.4.284", - "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.284.tgz", - "integrity": "sha512-M8WEXFuKXMYMVr45fo8mq0wUrrJHheiKZf6BArTKk9ZBYCKJEOU5H8cdWgDT+qCVZf7Na4lVUaZsA+h6uA9+PA==", - "peer": true - }, - "esbuild": { - "version": "0.15.12", - "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.15.12.tgz", - "integrity": "sha512-PcT+/wyDqJQsRVhaE9uX/Oq4XLrFh0ce/bs2TJh4CSaw9xuvI+xFrH2nAYOADbhQjUgAhNWC5LKoUsakm4dxng==", - "dev": true, - "requires": { - "@esbuild/android-arm": "0.15.12", - "@esbuild/linux-loong64": "0.15.12", - "esbuild-android-64": "0.15.12", - "esbuild-android-arm64": "0.15.12", - "esbuild-darwin-64": "0.15.12", - "esbuild-darwin-arm64": "0.15.12", - "esbuild-freebsd-64": "0.15.12", - "esbuild-freebsd-arm64": "0.15.12", - "esbuild-linux-32": "0.15.12", - "esbuild-linux-64": "0.15.12", - "esbuild-linux-arm": "0.15.12", - "esbuild-linux-arm64": "0.15.12", - "esbuild-linux-mips64le": "0.15.12", - "esbuild-linux-ppc64le": "0.15.12", - "esbuild-linux-riscv64": "0.15.12", - "esbuild-linux-s390x": "0.15.12", - "esbuild-netbsd-64": "0.15.12", - "esbuild-openbsd-64": "0.15.12", - "esbuild-sunos-64": "0.15.12", - "esbuild-windows-32": "0.15.12", - "esbuild-windows-64": "0.15.12", - "esbuild-windows-arm64": "0.15.12" - } - }, - "esbuild-android-64": { - "version": "0.15.12", - "resolved": "https://registry.npmjs.org/esbuild-android-64/-/esbuild-android-64-0.15.12.tgz", - "integrity": "sha512-MJKXwvPY9g0rGps0+U65HlTsM1wUs9lbjt5CU19RESqycGFDRijMDQsh68MtbzkqWSRdEtiKS1mtPzKneaAI0Q==", - "dev": true, - "optional": true - }, - "esbuild-android-arm64": { - "version": "0.15.12", - "resolved": "https://registry.npmjs.org/esbuild-android-arm64/-/esbuild-android-arm64-0.15.12.tgz", - "integrity": "sha512-Hc9SEcZbIMhhLcvhr1DH+lrrec9SFTiRzfJ7EGSBZiiw994gfkVV6vG0sLWqQQ6DD7V4+OggB+Hn0IRUdDUqvA==", - "dev": true, - "optional": true - }, - "esbuild-darwin-64": { - "version": "0.15.12", - "resolved": "https://registry.npmjs.org/esbuild-darwin-64/-/esbuild-darwin-64-0.15.12.tgz", - "integrity": "sha512-qkmqrTVYPFiePt5qFjP8w/S+GIUMbt6k8qmiPraECUWfPptaPJUGkCKrWEfYFRWB7bY23FV95rhvPyh/KARP8Q==", - "dev": true, - "optional": true - }, - "esbuild-darwin-arm64": { - "version": "0.15.12", - "resolved": "https://registry.npmjs.org/esbuild-darwin-arm64/-/esbuild-darwin-arm64-0.15.12.tgz", - "integrity": "sha512-z4zPX02tQ41kcXMyN3c/GfZpIjKoI/BzHrdKUwhC/Ki5BAhWv59A9M8H+iqaRbwpzYrYidTybBwiZAIWCLJAkw==", - "dev": true, - "optional": true - }, - "esbuild-freebsd-64": { - "version": "0.15.12", - "resolved": "https://registry.npmjs.org/esbuild-freebsd-64/-/esbuild-freebsd-64-0.15.12.tgz", - "integrity": "sha512-XFL7gKMCKXLDiAiBjhLG0XECliXaRLTZh6hsyzqUqPUf/PY4C6EJDTKIeqqPKXaVJ8+fzNek88285krSz1QECw==", - "dev": true, - "optional": true - }, - "esbuild-freebsd-arm64": { - "version": "0.15.12", - "resolved": "https://registry.npmjs.org/esbuild-freebsd-arm64/-/esbuild-freebsd-arm64-0.15.12.tgz", - "integrity": "sha512-jwEIu5UCUk6TjiG1X+KQnCGISI+ILnXzIzt9yDVrhjug2fkYzlLbl0K43q96Q3KB66v6N1UFF0r5Ks4Xo7i72g==", - "dev": true, - "optional": true - }, - "esbuild-linux-32": { - "version": "0.15.12", - "resolved": "https://registry.npmjs.org/esbuild-linux-32/-/esbuild-linux-32-0.15.12.tgz", - "integrity": "sha512-uSQuSEyF1kVzGzuIr4XM+v7TPKxHjBnLcwv2yPyCz8riV8VUCnO/C4BF3w5dHiVpCd5Z1cebBtZJNlC4anWpwA==", - "dev": true, - "optional": true - }, - "esbuild-linux-64": { - "version": "0.15.12", - "resolved": "https://registry.npmjs.org/esbuild-linux-64/-/esbuild-linux-64-0.15.12.tgz", - "integrity": "sha512-QcgCKb7zfJxqT9o5z9ZUeGH1k8N6iX1Y7VNsEi5F9+HzN1OIx7ESxtQXDN9jbeUSPiRH1n9cw6gFT3H4qbdvcA==", - "dev": true, - "optional": true - }, - "esbuild-linux-arm": { - "version": "0.15.12", - "resolved": "https://registry.npmjs.org/esbuild-linux-arm/-/esbuild-linux-arm-0.15.12.tgz", - "integrity": "sha512-Wf7T0aNylGcLu7hBnzMvsTfEXdEdJY/hY3u36Vla21aY66xR0MS5I1Hw8nVquXjTN0A6fk/vnr32tkC/C2lb0A==", - "dev": true, - "optional": true - }, - "esbuild-linux-arm64": { - "version": "0.15.12", - "resolved": "https://registry.npmjs.org/esbuild-linux-arm64/-/esbuild-linux-arm64-0.15.12.tgz", - "integrity": "sha512-HtNq5xm8fUpZKwWKS2/YGwSfTF+339L4aIA8yphNKYJckd5hVdhfdl6GM2P3HwLSCORS++++7++//ApEwXEuAQ==", - "dev": true, - "optional": true - }, - "esbuild-linux-mips64le": { - "version": "0.15.12", - "resolved": "https://registry.npmjs.org/esbuild-linux-mips64le/-/esbuild-linux-mips64le-0.15.12.tgz", - "integrity": "sha512-Qol3+AvivngUZkTVFgLpb0H6DT+N5/zM3V1YgTkryPYFeUvuT5JFNDR3ZiS6LxhyF8EE+fiNtzwlPqMDqVcc6A==", - "dev": true, - "optional": true - }, - "esbuild-linux-ppc64le": { - "version": "0.15.12", - "resolved": "https://registry.npmjs.org/esbuild-linux-ppc64le/-/esbuild-linux-ppc64le-0.15.12.tgz", - "integrity": "sha512-4D8qUCo+CFKaR0cGXtGyVsOI7w7k93Qxb3KFXWr75An0DHamYzq8lt7TNZKoOq/Gh8c40/aKaxvcZnTgQ0TJNg==", - "dev": true, - "optional": true - }, - "esbuild-linux-riscv64": { - "version": "0.15.12", - "resolved": "https://registry.npmjs.org/esbuild-linux-riscv64/-/esbuild-linux-riscv64-0.15.12.tgz", - "integrity": "sha512-G9w6NcuuCI6TUUxe6ka0enjZHDnSVK8bO+1qDhMOCtl7Tr78CcZilJj8SGLN00zO5iIlwNRZKHjdMpfFgNn1VA==", - "dev": true, - "optional": true - }, - "esbuild-linux-s390x": { - "version": "0.15.12", - "resolved": "https://registry.npmjs.org/esbuild-linux-s390x/-/esbuild-linux-s390x-0.15.12.tgz", - "integrity": "sha512-Lt6BDnuXbXeqSlVuuUM5z18GkJAZf3ERskGZbAWjrQoi9xbEIsj/hEzVnSAFLtkfLuy2DE4RwTcX02tZFunXww==", - "dev": true, - "optional": true - }, - "esbuild-netbsd-64": { - "version": "0.15.12", - "resolved": "https://registry.npmjs.org/esbuild-netbsd-64/-/esbuild-netbsd-64-0.15.12.tgz", - "integrity": "sha512-jlUxCiHO1dsqoURZDQts+HK100o0hXfi4t54MNRMCAqKGAV33JCVvMplLAa2FwviSojT/5ZG5HUfG3gstwAG8w==", - "dev": true, - "optional": true - }, - "esbuild-openbsd-64": { - "version": "0.15.12", - "resolved": "https://registry.npmjs.org/esbuild-openbsd-64/-/esbuild-openbsd-64-0.15.12.tgz", - "integrity": "sha512-1o1uAfRTMIWNOmpf8v7iudND0L6zRBYSH45sofCZywrcf7NcZA+c7aFsS1YryU+yN7aRppTqdUK1PgbZVaB1Dw==", - "dev": true, - "optional": true - }, - "esbuild-sunos-64": { - "version": "0.15.12", - "resolved": "https://registry.npmjs.org/esbuild-sunos-64/-/esbuild-sunos-64-0.15.12.tgz", - "integrity": "sha512-nkl251DpoWoBO9Eq9aFdoIt2yYmp4I3kvQjba3jFKlMXuqQ9A4q+JaqdkCouG3DHgAGnzshzaGu6xofGcXyPXg==", - "dev": true, - "optional": true - }, - "esbuild-windows-32": { - "version": "0.15.12", - "resolved": "https://registry.npmjs.org/esbuild-windows-32/-/esbuild-windows-32-0.15.12.tgz", - "integrity": "sha512-WlGeBZHgPC00O08luIp5B2SP4cNCp/PcS+3Pcg31kdcJPopHxLkdCXtadLU9J82LCfw4TVls21A6lilQ9mzHrw==", - "dev": true, - "optional": true - }, - "esbuild-windows-64": { - "version": "0.15.12", - "resolved": "https://registry.npmjs.org/esbuild-windows-64/-/esbuild-windows-64-0.15.12.tgz", - "integrity": "sha512-VActO3WnWZSN//xjSfbiGOSyC+wkZtI8I4KlgrTo5oHJM6z3MZZBCuFaZHd8hzf/W9KPhF0lY8OqlmWC9HO5AA==", - "dev": true, - "optional": true - }, - "esbuild-windows-arm64": { - "version": "0.15.12", - "resolved": "https://registry.npmjs.org/esbuild-windows-arm64/-/esbuild-windows-arm64-0.15.12.tgz", - "integrity": "sha512-Of3MIacva1OK/m4zCNIvBfz8VVROBmQT+gRX6pFTLPngFYcj6TFH/12VveAqq1k9VB2l28EoVMNMUCcmsfwyuA==", - "dev": true, - "optional": true - }, - "escalade": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.1.1.tgz", - "integrity": "sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==", - "peer": true - }, - "escape-string-regexp": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", - "integrity": "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==", - "peer": true - }, - "estree-walker": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/estree-walker/-/estree-walker-2.0.2.tgz", - "integrity": "sha512-Rfkk/Mp/DL7JVje3u18FxFujQlTNR2q6QfMSMB7AvCBx91NGj/ba3kCfza0f6dVDbw7YlRf/nDrn7pQrCCyQ/w==" - }, - "fsevents": { - "version": "2.3.2", - "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.2.tgz", - "integrity": "sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==", - "dev": true, - "optional": true - }, - "function-bind": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz", - "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==", - "dev": true - }, - "gensync": { - "version": "1.0.0-beta.2", - "resolved": "https://registry.npmjs.org/gensync/-/gensync-1.0.0-beta.2.tgz", - "integrity": "sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg==", - "peer": true - }, - "globals": { - "version": "11.12.0", - "resolved": "https://registry.npmjs.org/globals/-/globals-11.12.0.tgz", - "integrity": "sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==", - "peer": true - }, - "has": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz", - "integrity": "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==", - "dev": true, - "requires": { - "function-bind": "^1.1.1" - } - }, - "has-flag": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", - "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==", - "peer": true - }, - "is-core-module": { - "version": "2.11.0", - "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.11.0.tgz", - "integrity": "sha512-RRjxlvLDkD1YJwDbroBHMb+cukurkDWNyHx7D3oNB5x9rb5ogcksMC5wHCadcXoo67gVr/+3GFySh3134zi6rw==", - "dev": true, - "requires": { - "has": "^1.0.3" - } - }, - "js-tokens": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz", - "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==", - "peer": true - }, - "jsesc": { - "version": "2.5.2", - "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-2.5.2.tgz", - "integrity": "sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA==", - "peer": true - }, - "json5": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/json5/-/json5-2.2.1.tgz", - "integrity": "sha512-1hqLFMSrGHRHxav9q9gNjJ5EXznIxGVO09xQRrwplcS8qs28pZ8s8hupZAmqDwZUmVZ2Qb2jnyPOWcDH8m8dlA==", - "peer": true - }, - "ms": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", - "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", - "peer": true - }, - "nanoid": { - "version": "3.3.4", - "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.4.tgz", - "integrity": "sha512-MqBkQh/OHTS2egovRtLk45wEyNXwF+cokD+1YPf9u5VfJiRdAiRwB2froX5Co9Rh20xs4siNPm8naNotSD6RBw==", - "dev": true - }, - "node-releases": { - "version": "2.0.6", - "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.6.tgz", - "integrity": "sha512-PiVXnNuFm5+iYkLBNeq5211hvO38y63T0i2KKh2KnUs3RpzJ+JtODFjkD8yjLwnDkTYF1eKXheUwdssR+NRZdg==", - "peer": true - }, - "path-parse": { - "version": "1.0.7", - "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz", - "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==", - "dev": true - }, - "picocolors": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.0.0.tgz", - "integrity": "sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ==" - }, - "picomatch": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", - "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==" - }, - "postcss": { - "version": "8.4.18", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.18.tgz", - "integrity": "sha512-Wi8mWhncLJm11GATDaQKobXSNEYGUHeQLiQqDFG1qQ5UTDPTEvKw0Xt5NsTpktGTwLps3ByrWsBrG0rB8YQ9oA==", - "dev": true, - "requires": { - "nanoid": "^3.3.4", - "picocolors": "^1.0.0", - "source-map-js": "^1.0.2" - } - }, - "resolve": { - "version": "1.22.1", - "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.1.tgz", - "integrity": "sha512-nBpuuYuY5jFsli/JIs1oldw6fOQCBioohqWZg/2hiaOybXOft4lonv85uDOKXdf8rhyK159cxU5cDcK/NKk8zw==", - "dev": true, - "requires": { - "is-core-module": "^2.9.0", - "path-parse": "^1.0.7", - "supports-preserve-symlinks-flag": "^1.0.0" - } - }, - "rollup": { - "version": "2.79.1", - "resolved": "https://registry.npmjs.org/rollup/-/rollup-2.79.1.tgz", - "integrity": "sha512-uKxbd0IhMZOhjAiD5oAFp7BqvkA4Dv47qpOCtaNvng4HBwdbWtdOh8f5nZNuk2rp51PMGk3bzfWu5oayNEuYnw==", - "devOptional": true, - "requires": { - "fsevents": "~2.3.2" - } - }, - "semver": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", - "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", - "peer": true - }, - "source-map-js": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.0.2.tgz", - "integrity": "sha512-R0XvVJ9WusLiqTCEiGCmICCMplcCkIwwR11mOSD9CR5u+IXYdiseeEuXCVAjS54zqwkLcPNnmU4OeJ6tUrWhDw==", - "dev": true - }, - "supports-color": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", - "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", - "peer": true, - "requires": { - "has-flag": "^3.0.0" - } - }, - "supports-preserve-symlinks-flag": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz", - "integrity": "sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==", - "dev": true - }, - "to-fast-properties": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/to-fast-properties/-/to-fast-properties-2.0.0.tgz", - "integrity": "sha512-/OaKK0xYrs3DmxRYqL/yDc+FxFUVYhDlXMhRmv3z915w2HF1tnN1omB354j8VUGO/hbRzyD6Y3sA7v7GS/ceog==" - }, - "typescript": { - "version": "4.8.4", - "resolved": "https://registry.npmjs.org/typescript/-/typescript-4.8.4.tgz", - "integrity": "sha512-QCh+85mCy+h0IGff8r5XWzOVSbBO+KfeYrMQh7NJ58QujwcE22u+NUSmUxqF+un70P9GXKxa2HCNiTTMJknyjQ==", - "dev": true - }, - "update-browserslist-db": { - "version": "1.0.10", - "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.0.10.tgz", - "integrity": "sha512-OztqDenkfFkbSG+tRxBeAnCVPckDBcvibKd35yDONx6OU8N7sqgwc7rCbkJ/WcYtVRZ4ba68d6byhC21GFh7sQ==", - "peer": true, - "requires": { - "escalade": "^3.1.1", - "picocolors": "^1.0.0" - } - }, - "vite": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/vite/-/vite-3.2.2.tgz", - "integrity": "sha512-pLrhatFFOWO9kS19bQ658CnRYzv0WLbsPih6R+iFeEEhDOuYgYCX2rztUViMz/uy/V8cLCJvLFeiOK7RJEzHcw==", - "dev": true, - "requires": { - "esbuild": "^0.15.9", - "fsevents": "~2.3.2", - "postcss": "^8.4.18", - "resolve": "^1.22.1", - "rollup": "^2.79.1" - } - } - } + "name": "listenbourgmap", + "version": "0.0.0", + "lockfileVersion": 2, + "requires": true, + "packages": { + "": { + "name": "listenbourgmap", + "version": "0.0.0", + "dependencies": { + "@rollup/plugin-babel": "^6.0.2" + }, + "devDependencies": { + "typescript": "^4.6.4", + "vite": "^3.2.0" + } + }, + "node_modules/@ampproject/remapping": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/@ampproject/remapping/-/remapping-2.2.0.tgz", + "integrity": "sha512-qRmjj8nj9qmLTQXXmaR1cck3UXSRMPrbsLJAasZpF+t3riI71BXed5ebIOYwQntykeZuhjsdweEc9BxH5Jc26w==", + "peer": true, + "dependencies": { + "@jridgewell/gen-mapping": "^0.1.0", + "@jridgewell/trace-mapping": "^0.3.9" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@babel/code-frame": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.18.6.tgz", + "integrity": "sha512-TDCmlK5eOvH+eH7cdAFlNXeVJqWIQ7gW9tY1GJIpUtFb6CmjVyq2VM3u71bOyR8CRihcCgMUYoDNyLXao3+70Q==", + "peer": true, + "dependencies": { + "@babel/highlight": "^7.18.6" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/compat-data": { + "version": "7.20.1", + "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.20.1.tgz", + "integrity": "sha512-EWZ4mE2diW3QALKvDMiXnbZpRvlj+nayZ112nK93SnhqOtpdsbVD4W+2tEoT3YNBAG9RBR0ISY758ZkOgsn6pQ==", + "peer": true, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/core": { + "version": "7.19.6", + "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.19.6.tgz", + "integrity": "sha512-D2Ue4KHpc6Ys2+AxpIx1BZ8+UegLLLE2p3KJEuJRKmokHOtl49jQ5ny1773KsGLZs8MQvBidAF6yWUJxRqtKtg==", + "peer": true, + "dependencies": { + "@ampproject/remapping": "^2.1.0", + "@babel/code-frame": "^7.18.6", + "@babel/generator": "^7.19.6", + "@babel/helper-compilation-targets": "^7.19.3", + "@babel/helper-module-transforms": "^7.19.6", + "@babel/helpers": "^7.19.4", + "@babel/parser": "^7.19.6", + "@babel/template": "^7.18.10", + "@babel/traverse": "^7.19.6", + "@babel/types": "^7.19.4", + "convert-source-map": "^1.7.0", + "debug": "^4.1.0", + "gensync": "^1.0.0-beta.2", + "json5": "^2.2.1", + "semver": "^6.3.0" + }, + "engines": { + "node": ">=6.9.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/babel" + } + }, + "node_modules/@babel/generator": { + "version": "7.20.1", + "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.20.1.tgz", + "integrity": "sha512-u1dMdBUmA7Z0rBB97xh8pIhviK7oItYOkjbsCxTWMknyvbQRBwX7/gn4JXurRdirWMFh+ZtYARqkA6ydogVZpg==", + "peer": true, + "dependencies": { + "@babel/types": "^7.20.0", + "@jridgewell/gen-mapping": "^0.3.2", + "jsesc": "^2.5.1" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/generator/node_modules/@jridgewell/gen-mapping": { + "version": "0.3.2", + "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.2.tgz", + "integrity": "sha512-mh65xKQAzI6iBcFzwv28KVWSmCkdRBWoOh+bYQGW3+6OZvbbN3TqMGo5hqYxQniRcH9F2VZIoJCm4pa3BPDK/A==", + "peer": true, + "dependencies": { + "@jridgewell/set-array": "^1.0.1", + "@jridgewell/sourcemap-codec": "^1.4.10", + "@jridgewell/trace-mapping": "^0.3.9" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@babel/helper-compilation-targets": { + "version": "7.20.0", + "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.20.0.tgz", + "integrity": "sha512-0jp//vDGp9e8hZzBc6N/KwA5ZK3Wsm/pfm4CrY7vzegkVxc65SgSn6wYOnwHe9Js9HRQ1YTCKLGPzDtaS3RoLQ==", + "peer": true, + "dependencies": { + "@babel/compat-data": "^7.20.0", + "@babel/helper-validator-option": "^7.18.6", + "browserslist": "^4.21.3", + "semver": "^6.3.0" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, + "node_modules/@babel/helper-environment-visitor": { + "version": "7.18.9", + "resolved": "https://registry.npmjs.org/@babel/helper-environment-visitor/-/helper-environment-visitor-7.18.9.tgz", + "integrity": "sha512-3r/aACDJ3fhQ/EVgFy0hpj8oHyHpQc+LPtJoY9SzTThAsStm4Ptegq92vqKoE3vD706ZVFWITnMnxucw+S9Ipg==", + "peer": true, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-function-name": { + "version": "7.19.0", + "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.19.0.tgz", + "integrity": "sha512-WAwHBINyrpqywkUH0nTnNgI5ina5TFn85HKS0pbPDfxFfhyR/aNQEn4hGi1P1JyT//I0t4OgXUlofzWILRvS5w==", + "peer": true, + "dependencies": { + "@babel/template": "^7.18.10", + "@babel/types": "^7.19.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-hoist-variables": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/helper-hoist-variables/-/helper-hoist-variables-7.18.6.tgz", + "integrity": "sha512-UlJQPkFqFULIcyW5sbzgbkxn2FKRgwWiRexcuaR8RNJRy8+LLveqPjwZV/bwrLZCN0eUHD/x8D0heK1ozuoo6Q==", + "peer": true, + "dependencies": { + "@babel/types": "^7.18.6" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-module-imports": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.18.6.tgz", + "integrity": "sha512-0NFvs3VkuSYbFi1x2Vd6tKrywq+z/cLeYC/RJNFrIX/30Bf5aiGYbtvGXolEktzJH8o5E5KJ3tT+nkxuuZFVlA==", + "dependencies": { + "@babel/types": "^7.18.6" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-module-transforms": { + "version": "7.19.6", + "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.19.6.tgz", + "integrity": "sha512-fCmcfQo/KYr/VXXDIyd3CBGZ6AFhPFy1TfSEJ+PilGVlQT6jcbqtHAM4C1EciRqMza7/TpOUZliuSH+U6HAhJw==", + "peer": true, + "dependencies": { + "@babel/helper-environment-visitor": "^7.18.9", + "@babel/helper-module-imports": "^7.18.6", + "@babel/helper-simple-access": "^7.19.4", + "@babel/helper-split-export-declaration": "^7.18.6", + "@babel/helper-validator-identifier": "^7.19.1", + "@babel/template": "^7.18.10", + "@babel/traverse": "^7.19.6", + "@babel/types": "^7.19.4" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-simple-access": { + "version": "7.19.4", + "resolved": "https://registry.npmjs.org/@babel/helper-simple-access/-/helper-simple-access-7.19.4.tgz", + "integrity": "sha512-f9Xq6WqBFqaDfbCzn2w85hwklswz5qsKlh7f08w4Y9yhJHpnNC0QemtSkK5YyOY8kPGvyiwdzZksGUhnGdaUIg==", + "peer": true, + "dependencies": { + "@babel/types": "^7.19.4" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-split-export-declaration": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.18.6.tgz", + "integrity": "sha512-bde1etTx6ZyTmobl9LLMMQsaizFVZrquTEHOqKeQESMKo4PlObf+8+JA25ZsIpZhT/WEd39+vOdLXAFG/nELpA==", + "peer": true, + "dependencies": { + "@babel/types": "^7.18.6" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-string-parser": { + "version": "7.19.4", + "resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.19.4.tgz", + "integrity": "sha512-nHtDoQcuqFmwYNYPz3Rah5ph2p8PFeFCsZk9A/48dPc/rGocJ5J3hAAZ7pb76VWX3fZKu+uEr/FhH5jLx7umrw==", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-validator-identifier": { + "version": "7.19.1", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.19.1.tgz", + "integrity": "sha512-awrNfaMtnHUr653GgGEs++LlAvW6w+DcPrOliSMXWCKo597CwL5Acf/wWdNkf/tfEQE3mjkeD1YOVZOUV/od1w==", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-validator-option": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.18.6.tgz", + "integrity": "sha512-XO7gESt5ouv/LRJdrVjkShckw6STTaB7l9BrpBaAHDeF5YZT+01PCwmR0SJHnkW6i8OwW/EVWRShfi4j2x+KQw==", + "peer": true, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helpers": { + "version": "7.20.1", + "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.20.1.tgz", + "integrity": "sha512-J77mUVaDTUJFZ5BpP6mMn6OIl3rEWymk2ZxDBQJUG3P+PbmyMcF3bYWvz0ma69Af1oobDqT/iAsvzhB58xhQUg==", + "peer": true, + "dependencies": { + "@babel/template": "^7.18.10", + "@babel/traverse": "^7.20.1", + "@babel/types": "^7.20.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/highlight": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.18.6.tgz", + "integrity": "sha512-u7stbOuYjaPezCuLj29hNW1v64M2Md2qupEKP1fHc7WdOA3DgLh37suiSrZYY7haUB7iBeQZ9P1uiRF359do3g==", + "peer": true, + "dependencies": { + "@babel/helper-validator-identifier": "^7.18.6", + "chalk": "^2.0.0", + "js-tokens": "^4.0.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/parser": { + "version": "7.20.1", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.20.1.tgz", + "integrity": "sha512-hp0AYxaZJhxULfM1zyp7Wgr+pSUKBcP3M+PHnSzWGdXOzg/kHWIgiUWARvubhUKGOEw3xqY4x+lyZ9ytBVcELw==", + "peer": true, + "bin": { + "parser": "bin/babel-parser.js" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@babel/template": { + "version": "7.18.10", + "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.18.10.tgz", + "integrity": "sha512-TI+rCtooWHr3QJ27kJxfjutghu44DLnasDMwpDqCXVTal9RLp3RSYNh4NdBrRP2cQAoG9A8juOQl6P6oZG4JxA==", + "peer": true, + "dependencies": { + "@babel/code-frame": "^7.18.6", + "@babel/parser": "^7.18.10", + "@babel/types": "^7.18.10" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/traverse": { + "version": "7.20.1", + "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.20.1.tgz", + "integrity": "sha512-d3tN8fkVJwFLkHkBN479SOsw4DMZnz8cdbL/gvuDuzy3TS6Nfw80HuQqhw1pITbIruHyh7d1fMA47kWzmcUEGA==", + "peer": true, + "dependencies": { + "@babel/code-frame": "^7.18.6", + "@babel/generator": "^7.20.1", + "@babel/helper-environment-visitor": "^7.18.9", + "@babel/helper-function-name": "^7.19.0", + "@babel/helper-hoist-variables": "^7.18.6", + "@babel/helper-split-export-declaration": "^7.18.6", + "@babel/parser": "^7.20.1", + "@babel/types": "^7.20.0", + "debug": "^4.1.0", + "globals": "^11.1.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/types": { + "version": "7.20.0", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.20.0.tgz", + "integrity": "sha512-Jlgt3H0TajCW164wkTOTzHkZb075tMQMULzrLUoUeKmO7eFL96GgDxf7/Axhc5CAuKE3KFyVW1p6ysKsi2oXAg==", + "dependencies": { + "@babel/helper-string-parser": "^7.19.4", + "@babel/helper-validator-identifier": "^7.19.1", + "to-fast-properties": "^2.0.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@esbuild/android-arm": { + "version": "0.15.12", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.15.12.tgz", + "integrity": "sha512-IC7TqIqiyE0MmvAhWkl/8AEzpOtbhRNDo7aph47We1NbE5w2bt/Q+giAhe0YYeVpYnIhGMcuZY92qDK6dQauvA==", + "cpu": [ + "arm" + ], + "dev": true, + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-loong64": { + "version": "0.15.12", + "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.15.12.tgz", + "integrity": "sha512-tZEowDjvU7O7I04GYvWQOS4yyP9E/7YlsB0jjw1Ycukgr2ycEzKyIk5tms5WnLBymaewc6VmRKnn5IJWgK4eFw==", + "cpu": [ + "loong64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@jridgewell/gen-mapping": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.1.1.tgz", + "integrity": "sha512-sQXCasFk+U8lWYEe66WxRDOE9PjVz4vSM51fTu3Hw+ClTpUSQb718772vH3pyS5pShp6lvQM7SxgIDXXXmOX7w==", + "peer": true, + "dependencies": { + "@jridgewell/set-array": "^1.0.0", + "@jridgewell/sourcemap-codec": "^1.4.10" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@jridgewell/resolve-uri": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.0.tgz", + "integrity": "sha512-F2msla3tad+Mfht5cJq7LSXcdudKTWCVYUgw6pLFOOHSTtZlj6SWNYAp+AhuqLmWdBO2X5hPrLcu8cVP8fy28w==", + "peer": true, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@jridgewell/set-array": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/@jridgewell/set-array/-/set-array-1.1.2.tgz", + "integrity": "sha512-xnkseuNADM0gt2bs+BvhO0p78Mk762YnZdsuzFV018NoG1Sj1SCQvpSqa7XUaTam5vAGasABV9qXASMKnFMwMw==", + "peer": true, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@jridgewell/sourcemap-codec": { + "version": "1.4.14", + "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.14.tgz", + "integrity": "sha512-XPSJHWmi394fuUuzDnGz1wiKqWfo1yXecHQMRf2l6hztTO+nPru658AyDngaBe7isIxEkRsPR3FZh+s7iVa4Uw==", + "peer": true + }, + "node_modules/@jridgewell/trace-mapping": { + "version": "0.3.17", + "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.17.tgz", + "integrity": "sha512-MCNzAp77qzKca9+W/+I0+sEpaUnZoeasnghNeVc41VZCEKaCH73Vq3BZZ/SzWIgrqE4H4ceI+p+b6C0mHf9T4g==", + "peer": true, + "dependencies": { + "@jridgewell/resolve-uri": "3.1.0", + "@jridgewell/sourcemap-codec": "1.4.14" + } + }, + "node_modules/@rollup/plugin-babel": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/@rollup/plugin-babel/-/plugin-babel-6.0.2.tgz", + "integrity": "sha512-Vnt8XIWYwCf3MD7qhBWYlP9pjSZvcE++nlPXhQYw6YNehl5742AzFbrV6h4BHb20VAOVUlIksVLymQCTwVCGDg==", + "dependencies": { + "@babel/helper-module-imports": "^7.18.6", + "@rollup/pluginutils": "^5.0.1" + }, + "engines": { + "node": ">=14.0.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0", + "@types/babel__core": "^7.1.9", + "rollup": "^1.20.0||^2.0.0||^3.0.0" + }, + "peerDependenciesMeta": { + "@types/babel__core": { + "optional": true + }, + "rollup": { + "optional": true + } + } + }, + "node_modules/@rollup/pluginutils": { + "version": "5.0.2", + "resolved": "https://registry.npmjs.org/@rollup/pluginutils/-/pluginutils-5.0.2.tgz", + "integrity": "sha512-pTd9rIsP92h+B6wWwFbW8RkZv4hiR/xKsqre4SIuAOaOEQRxi0lqLke9k2/7WegC85GgUs9pjmOjCUi3In4vwA==", + "dependencies": { + "@types/estree": "^1.0.0", + "estree-walker": "^2.0.2", + "picomatch": "^2.3.1" + }, + "engines": { + "node": ">=14.0.0" + }, + "peerDependencies": { + "rollup": "^1.20.0||^2.0.0||^3.0.0" + }, + "peerDependenciesMeta": { + "rollup": { + "optional": true + } + } + }, + "node_modules/@types/estree": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/@types/estree/-/estree-1.0.0.tgz", + "integrity": "sha512-WulqXMDUTYAXCjZnk6JtIHPigp55cVtDgDrO2gHRwhyJto21+1zbVCtOYB2L1F9w4qCQ0rOGWBnBe0FNTiEJIQ==" + }, + "node_modules/ansi-styles": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", + "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", + "peer": true, + "dependencies": { + "color-convert": "^1.9.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/browserslist": { + "version": "4.21.4", + "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.21.4.tgz", + "integrity": "sha512-CBHJJdDmgjl3daYjN5Cp5kbTf1mUhZoS+beLklHIvkOWscs83YAhLlF3Wsh/lciQYAcbBJgTOD44VtG31ZM4Hw==", + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/browserslist" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/browserslist" + } + ], + "peer": true, + "dependencies": { + "caniuse-lite": "^1.0.30001400", + "electron-to-chromium": "^1.4.251", + "node-releases": "^2.0.6", + "update-browserslist-db": "^1.0.9" + }, + "bin": { + "browserslist": "cli.js" + }, + "engines": { + "node": "^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7" + } + }, + "node_modules/caniuse-lite": { + "version": "1.0.30001429", + "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001429.tgz", + "integrity": "sha512-511ThLu1hF+5RRRt0zYCf2U2yRr9GPF6m5y90SBCWsvSoYoW7yAGlv/elyPaNfvGCkp6kj/KFZWU0BMA69Prsg==", + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/browserslist" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/caniuse-lite" + } + ], + "peer": true + }, + "node_modules/chalk": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", + "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", + "peer": true, + "dependencies": { + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/color-convert": { + "version": "1.9.3", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", + "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", + "peer": true, + "dependencies": { + "color-name": "1.1.3" + } + }, + "node_modules/color-name": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", + "integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==", + "peer": true + }, + "node_modules/convert-source-map": { + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.9.0.tgz", + "integrity": "sha512-ASFBup0Mz1uyiIjANan1jzLQami9z1PoYSZCiiYW2FczPbenXc45FZdBZLzOT+r6+iciuEModtmCti+hjaAk0A==", + "peer": true + }, + "node_modules/debug": { + "version": "4.3.4", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", + "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", + "peer": true, + "dependencies": { + "ms": "2.1.2" + }, + "engines": { + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } + } + }, + "node_modules/electron-to-chromium": { + "version": "1.4.284", + "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.284.tgz", + "integrity": "sha512-M8WEXFuKXMYMVr45fo8mq0wUrrJHheiKZf6BArTKk9ZBYCKJEOU5H8cdWgDT+qCVZf7Na4lVUaZsA+h6uA9+PA==", + "peer": true + }, + "node_modules/esbuild": { + "version": "0.15.12", + "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.15.12.tgz", + "integrity": "sha512-PcT+/wyDqJQsRVhaE9uX/Oq4XLrFh0ce/bs2TJh4CSaw9xuvI+xFrH2nAYOADbhQjUgAhNWC5LKoUsakm4dxng==", + "dev": true, + "hasInstallScript": true, + "bin": { + "esbuild": "bin/esbuild" + }, + "engines": { + "node": ">=12" + }, + "optionalDependencies": { + "@esbuild/android-arm": "0.15.12", + "@esbuild/linux-loong64": "0.15.12", + "esbuild-android-64": "0.15.12", + "esbuild-android-arm64": "0.15.12", + "esbuild-darwin-64": "0.15.12", + "esbuild-darwin-arm64": "0.15.12", + "esbuild-freebsd-64": "0.15.12", + "esbuild-freebsd-arm64": "0.15.12", + "esbuild-linux-32": "0.15.12", + "esbuild-linux-64": "0.15.12", + "esbuild-linux-arm": "0.15.12", + "esbuild-linux-arm64": "0.15.12", + "esbuild-linux-mips64le": "0.15.12", + "esbuild-linux-ppc64le": "0.15.12", + "esbuild-linux-riscv64": "0.15.12", + "esbuild-linux-s390x": "0.15.12", + "esbuild-netbsd-64": "0.15.12", + "esbuild-openbsd-64": "0.15.12", + "esbuild-sunos-64": "0.15.12", + "esbuild-windows-32": "0.15.12", + "esbuild-windows-64": "0.15.12", + "esbuild-windows-arm64": "0.15.12" + } + }, + "node_modules/esbuild-android-64": { + "version": "0.15.12", + "resolved": "https://registry.npmjs.org/esbuild-android-64/-/esbuild-android-64-0.15.12.tgz", + "integrity": "sha512-MJKXwvPY9g0rGps0+U65HlTsM1wUs9lbjt5CU19RESqycGFDRijMDQsh68MtbzkqWSRdEtiKS1mtPzKneaAI0Q==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/esbuild-android-arm64": { + "version": "0.15.12", + "resolved": "https://registry.npmjs.org/esbuild-android-arm64/-/esbuild-android-arm64-0.15.12.tgz", + "integrity": "sha512-Hc9SEcZbIMhhLcvhr1DH+lrrec9SFTiRzfJ7EGSBZiiw994gfkVV6vG0sLWqQQ6DD7V4+OggB+Hn0IRUdDUqvA==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/esbuild-darwin-64": { + "version": "0.15.12", + "resolved": "https://registry.npmjs.org/esbuild-darwin-64/-/esbuild-darwin-64-0.15.12.tgz", + "integrity": "sha512-qkmqrTVYPFiePt5qFjP8w/S+GIUMbt6k8qmiPraECUWfPptaPJUGkCKrWEfYFRWB7bY23FV95rhvPyh/KARP8Q==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/esbuild-darwin-arm64": { + "version": "0.15.12", + "resolved": "https://registry.npmjs.org/esbuild-darwin-arm64/-/esbuild-darwin-arm64-0.15.12.tgz", + "integrity": "sha512-z4zPX02tQ41kcXMyN3c/GfZpIjKoI/BzHrdKUwhC/Ki5BAhWv59A9M8H+iqaRbwpzYrYidTybBwiZAIWCLJAkw==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/esbuild-freebsd-64": { + "version": "0.15.12", + "resolved": "https://registry.npmjs.org/esbuild-freebsd-64/-/esbuild-freebsd-64-0.15.12.tgz", + "integrity": "sha512-XFL7gKMCKXLDiAiBjhLG0XECliXaRLTZh6hsyzqUqPUf/PY4C6EJDTKIeqqPKXaVJ8+fzNek88285krSz1QECw==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "freebsd" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/esbuild-freebsd-arm64": { + "version": "0.15.12", + "resolved": "https://registry.npmjs.org/esbuild-freebsd-arm64/-/esbuild-freebsd-arm64-0.15.12.tgz", + "integrity": "sha512-jwEIu5UCUk6TjiG1X+KQnCGISI+ILnXzIzt9yDVrhjug2fkYzlLbl0K43q96Q3KB66v6N1UFF0r5Ks4Xo7i72g==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "freebsd" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/esbuild-linux-32": { + "version": "0.15.12", + "resolved": "https://registry.npmjs.org/esbuild-linux-32/-/esbuild-linux-32-0.15.12.tgz", + "integrity": "sha512-uSQuSEyF1kVzGzuIr4XM+v7TPKxHjBnLcwv2yPyCz8riV8VUCnO/C4BF3w5dHiVpCd5Z1cebBtZJNlC4anWpwA==", + "cpu": [ + "ia32" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/esbuild-linux-64": { + "version": "0.15.12", + "resolved": "https://registry.npmjs.org/esbuild-linux-64/-/esbuild-linux-64-0.15.12.tgz", + "integrity": "sha512-QcgCKb7zfJxqT9o5z9ZUeGH1k8N6iX1Y7VNsEi5F9+HzN1OIx7ESxtQXDN9jbeUSPiRH1n9cw6gFT3H4qbdvcA==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/esbuild-linux-arm": { + "version": "0.15.12", + "resolved": "https://registry.npmjs.org/esbuild-linux-arm/-/esbuild-linux-arm-0.15.12.tgz", + "integrity": "sha512-Wf7T0aNylGcLu7hBnzMvsTfEXdEdJY/hY3u36Vla21aY66xR0MS5I1Hw8nVquXjTN0A6fk/vnr32tkC/C2lb0A==", + "cpu": [ + "arm" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/esbuild-linux-arm64": { + "version": "0.15.12", + "resolved": "https://registry.npmjs.org/esbuild-linux-arm64/-/esbuild-linux-arm64-0.15.12.tgz", + "integrity": "sha512-HtNq5xm8fUpZKwWKS2/YGwSfTF+339L4aIA8yphNKYJckd5hVdhfdl6GM2P3HwLSCORS++++7++//ApEwXEuAQ==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/esbuild-linux-mips64le": { + "version": "0.15.12", + "resolved": "https://registry.npmjs.org/esbuild-linux-mips64le/-/esbuild-linux-mips64le-0.15.12.tgz", + "integrity": "sha512-Qol3+AvivngUZkTVFgLpb0H6DT+N5/zM3V1YgTkryPYFeUvuT5JFNDR3ZiS6LxhyF8EE+fiNtzwlPqMDqVcc6A==", + "cpu": [ + "mips64el" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/esbuild-linux-ppc64le": { + "version": "0.15.12", + "resolved": "https://registry.npmjs.org/esbuild-linux-ppc64le/-/esbuild-linux-ppc64le-0.15.12.tgz", + "integrity": "sha512-4D8qUCo+CFKaR0cGXtGyVsOI7w7k93Qxb3KFXWr75An0DHamYzq8lt7TNZKoOq/Gh8c40/aKaxvcZnTgQ0TJNg==", + "cpu": [ + "ppc64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/esbuild-linux-riscv64": { + "version": "0.15.12", + "resolved": "https://registry.npmjs.org/esbuild-linux-riscv64/-/esbuild-linux-riscv64-0.15.12.tgz", + "integrity": "sha512-G9w6NcuuCI6TUUxe6ka0enjZHDnSVK8bO+1qDhMOCtl7Tr78CcZilJj8SGLN00zO5iIlwNRZKHjdMpfFgNn1VA==", + "cpu": [ + "riscv64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/esbuild-linux-s390x": { + "version": "0.15.12", + "resolved": "https://registry.npmjs.org/esbuild-linux-s390x/-/esbuild-linux-s390x-0.15.12.tgz", + "integrity": "sha512-Lt6BDnuXbXeqSlVuuUM5z18GkJAZf3ERskGZbAWjrQoi9xbEIsj/hEzVnSAFLtkfLuy2DE4RwTcX02tZFunXww==", + "cpu": [ + "s390x" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/esbuild-netbsd-64": { + "version": "0.15.12", + "resolved": "https://registry.npmjs.org/esbuild-netbsd-64/-/esbuild-netbsd-64-0.15.12.tgz", + "integrity": "sha512-jlUxCiHO1dsqoURZDQts+HK100o0hXfi4t54MNRMCAqKGAV33JCVvMplLAa2FwviSojT/5ZG5HUfG3gstwAG8w==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "netbsd" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/esbuild-openbsd-64": { + "version": "0.15.12", + "resolved": "https://registry.npmjs.org/esbuild-openbsd-64/-/esbuild-openbsd-64-0.15.12.tgz", + "integrity": "sha512-1o1uAfRTMIWNOmpf8v7iudND0L6zRBYSH45sofCZywrcf7NcZA+c7aFsS1YryU+yN7aRppTqdUK1PgbZVaB1Dw==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "openbsd" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/esbuild-sunos-64": { + "version": "0.15.12", + "resolved": "https://registry.npmjs.org/esbuild-sunos-64/-/esbuild-sunos-64-0.15.12.tgz", + "integrity": "sha512-nkl251DpoWoBO9Eq9aFdoIt2yYmp4I3kvQjba3jFKlMXuqQ9A4q+JaqdkCouG3DHgAGnzshzaGu6xofGcXyPXg==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "sunos" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/esbuild-windows-32": { + "version": "0.15.12", + "resolved": "https://registry.npmjs.org/esbuild-windows-32/-/esbuild-windows-32-0.15.12.tgz", + "integrity": "sha512-WlGeBZHgPC00O08luIp5B2SP4cNCp/PcS+3Pcg31kdcJPopHxLkdCXtadLU9J82LCfw4TVls21A6lilQ9mzHrw==", + "cpu": [ + "ia32" + ], + "dev": true, + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/esbuild-windows-64": { + "version": "0.15.12", + "resolved": "https://registry.npmjs.org/esbuild-windows-64/-/esbuild-windows-64-0.15.12.tgz", + "integrity": "sha512-VActO3WnWZSN//xjSfbiGOSyC+wkZtI8I4KlgrTo5oHJM6z3MZZBCuFaZHd8hzf/W9KPhF0lY8OqlmWC9HO5AA==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/esbuild-windows-arm64": { + "version": "0.15.12", + "resolved": "https://registry.npmjs.org/esbuild-windows-arm64/-/esbuild-windows-arm64-0.15.12.tgz", + "integrity": "sha512-Of3MIacva1OK/m4zCNIvBfz8VVROBmQT+gRX6pFTLPngFYcj6TFH/12VveAqq1k9VB2l28EoVMNMUCcmsfwyuA==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/escalade": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.1.1.tgz", + "integrity": "sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==", + "peer": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/escape-string-regexp": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", + "integrity": "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==", + "peer": true, + "engines": { + "node": ">=0.8.0" + } + }, + "node_modules/estree-walker": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/estree-walker/-/estree-walker-2.0.2.tgz", + "integrity": "sha512-Rfkk/Mp/DL7JVje3u18FxFujQlTNR2q6QfMSMB7AvCBx91NGj/ba3kCfza0f6dVDbw7YlRf/nDrn7pQrCCyQ/w==" + }, + "node_modules/fsevents": { + "version": "2.3.2", + "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.2.tgz", + "integrity": "sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==", + "dev": true, + "hasInstallScript": true, + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": "^8.16.0 || ^10.6.0 || >=11.0.0" + } + }, + "node_modules/function-bind": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz", + "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==", + "dev": true + }, + "node_modules/gensync": { + "version": "1.0.0-beta.2", + "resolved": "https://registry.npmjs.org/gensync/-/gensync-1.0.0-beta.2.tgz", + "integrity": "sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg==", + "peer": true, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/globals": { + "version": "11.12.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-11.12.0.tgz", + "integrity": "sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==", + "peer": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/has": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz", + "integrity": "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==", + "dev": true, + "dependencies": { + "function-bind": "^1.1.1" + }, + "engines": { + "node": ">= 0.4.0" + } + }, + "node_modules/has-flag": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", + "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==", + "peer": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/is-core-module": { + "version": "2.11.0", + "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.11.0.tgz", + "integrity": "sha512-RRjxlvLDkD1YJwDbroBHMb+cukurkDWNyHx7D3oNB5x9rb5ogcksMC5wHCadcXoo67gVr/+3GFySh3134zi6rw==", + "dev": true, + "dependencies": { + "has": "^1.0.3" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/js-tokens": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz", + "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==", + "peer": true + }, + "node_modules/jsesc": { + "version": "2.5.2", + "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-2.5.2.tgz", + "integrity": "sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA==", + "peer": true, + "bin": { + "jsesc": "bin/jsesc" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/json5": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/json5/-/json5-2.2.1.tgz", + "integrity": "sha512-1hqLFMSrGHRHxav9q9gNjJ5EXznIxGVO09xQRrwplcS8qs28pZ8s8hupZAmqDwZUmVZ2Qb2jnyPOWcDH8m8dlA==", + "peer": true, + "bin": { + "json5": "lib/cli.js" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/ms": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", + "peer": true + }, + "node_modules/nanoid": { + "version": "3.3.4", + "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.4.tgz", + "integrity": "sha512-MqBkQh/OHTS2egovRtLk45wEyNXwF+cokD+1YPf9u5VfJiRdAiRwB2froX5Co9Rh20xs4siNPm8naNotSD6RBw==", + "dev": true, + "bin": { + "nanoid": "bin/nanoid.cjs" + }, + "engines": { + "node": "^10 || ^12 || ^13.7 || ^14 || >=15.0.1" + } + }, + "node_modules/node-releases": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.6.tgz", + "integrity": "sha512-PiVXnNuFm5+iYkLBNeq5211hvO38y63T0i2KKh2KnUs3RpzJ+JtODFjkD8yjLwnDkTYF1eKXheUwdssR+NRZdg==", + "peer": true + }, + "node_modules/path-parse": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz", + "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==", + "dev": true + }, + "node_modules/picocolors": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.0.0.tgz", + "integrity": "sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ==" + }, + "node_modules/picomatch": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", + "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", + "engines": { + "node": ">=8.6" + }, + "funding": { + "url": "https://github.com/sponsors/jonschlinkert" + } + }, + "node_modules/postcss": { + "version": "8.4.18", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.18.tgz", + "integrity": "sha512-Wi8mWhncLJm11GATDaQKobXSNEYGUHeQLiQqDFG1qQ5UTDPTEvKw0Xt5NsTpktGTwLps3ByrWsBrG0rB8YQ9oA==", + "dev": true, + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/postcss/" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/postcss" + } + ], + "dependencies": { + "nanoid": "^3.3.4", + "picocolors": "^1.0.0", + "source-map-js": "^1.0.2" + }, + "engines": { + "node": "^10 || ^12 || >=14" + } + }, + "node_modules/resolve": { + "version": "1.22.1", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.1.tgz", + "integrity": "sha512-nBpuuYuY5jFsli/JIs1oldw6fOQCBioohqWZg/2hiaOybXOft4lonv85uDOKXdf8rhyK159cxU5cDcK/NKk8zw==", + "dev": true, + "dependencies": { + "is-core-module": "^2.9.0", + "path-parse": "^1.0.7", + "supports-preserve-symlinks-flag": "^1.0.0" + }, + "bin": { + "resolve": "bin/resolve" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/rollup": { + "version": "2.79.1", + "resolved": "https://registry.npmjs.org/rollup/-/rollup-2.79.1.tgz", + "integrity": "sha512-uKxbd0IhMZOhjAiD5oAFp7BqvkA4Dv47qpOCtaNvng4HBwdbWtdOh8f5nZNuk2rp51PMGk3bzfWu5oayNEuYnw==", + "devOptional": true, + "bin": { + "rollup": "dist/bin/rollup" + }, + "engines": { + "node": ">=10.0.0" + }, + "optionalDependencies": { + "fsevents": "~2.3.2" + } + }, + "node_modules/semver": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", + "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", + "peer": true, + "bin": { + "semver": "bin/semver.js" + } + }, + "node_modules/source-map-js": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.0.2.tgz", + "integrity": "sha512-R0XvVJ9WusLiqTCEiGCmICCMplcCkIwwR11mOSD9CR5u+IXYdiseeEuXCVAjS54zqwkLcPNnmU4OeJ6tUrWhDw==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/supports-color": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", + "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", + "peer": true, + "dependencies": { + "has-flag": "^3.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/supports-preserve-symlinks-flag": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz", + "integrity": "sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==", + "dev": true, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/to-fast-properties": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/to-fast-properties/-/to-fast-properties-2.0.0.tgz", + "integrity": "sha512-/OaKK0xYrs3DmxRYqL/yDc+FxFUVYhDlXMhRmv3z915w2HF1tnN1omB354j8VUGO/hbRzyD6Y3sA7v7GS/ceog==", + "engines": { + "node": ">=4" + } + }, + "node_modules/typescript": { + "version": "4.8.4", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-4.8.4.tgz", + "integrity": "sha512-QCh+85mCy+h0IGff8r5XWzOVSbBO+KfeYrMQh7NJ58QujwcE22u+NUSmUxqF+un70P9GXKxa2HCNiTTMJknyjQ==", + "dev": true, + "bin": { + "tsc": "bin/tsc", + "tsserver": "bin/tsserver" + }, + "engines": { + "node": ">=4.2.0" + } + }, + "node_modules/update-browserslist-db": { + "version": "1.0.10", + "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.0.10.tgz", + "integrity": "sha512-OztqDenkfFkbSG+tRxBeAnCVPckDBcvibKd35yDONx6OU8N7sqgwc7rCbkJ/WcYtVRZ4ba68d6byhC21GFh7sQ==", + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/browserslist" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/browserslist" + } + ], + "peer": true, + "dependencies": { + "escalade": "^3.1.1", + "picocolors": "^1.0.0" + }, + "bin": { + "browserslist-lint": "cli.js" + }, + "peerDependencies": { + "browserslist": ">= 4.21.0" + } + }, + "node_modules/vite": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/vite/-/vite-3.2.2.tgz", + "integrity": "sha512-pLrhatFFOWO9kS19bQ658CnRYzv0WLbsPih6R+iFeEEhDOuYgYCX2rztUViMz/uy/V8cLCJvLFeiOK7RJEzHcw==", + "dev": true, + "dependencies": { + "esbuild": "^0.15.9", + "postcss": "^8.4.18", + "resolve": "^1.22.1", + "rollup": "^2.79.1" + }, + "bin": { + "vite": "bin/vite.js" + }, + "engines": { + "node": "^14.18.0 || >=16.0.0" + }, + "optionalDependencies": { + "fsevents": "~2.3.2" + }, + "peerDependencies": { + "less": "*", + "sass": "*", + "stylus": "*", + "sugarss": "*", + "terser": "^5.4.0" + }, + "peerDependenciesMeta": { + "less": { + "optional": true + }, + "sass": { + "optional": true + }, + "stylus": { + "optional": true + }, + "sugarss": { + "optional": true + }, + "terser": { + "optional": true + } + } + } + }, + "dependencies": { + "@ampproject/remapping": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/@ampproject/remapping/-/remapping-2.2.0.tgz", + "integrity": "sha512-qRmjj8nj9qmLTQXXmaR1cck3UXSRMPrbsLJAasZpF+t3riI71BXed5ebIOYwQntykeZuhjsdweEc9BxH5Jc26w==", + "peer": true, + "requires": { + "@jridgewell/gen-mapping": "^0.1.0", + "@jridgewell/trace-mapping": "^0.3.9" + } + }, + "@babel/code-frame": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.18.6.tgz", + "integrity": "sha512-TDCmlK5eOvH+eH7cdAFlNXeVJqWIQ7gW9tY1GJIpUtFb6CmjVyq2VM3u71bOyR8CRihcCgMUYoDNyLXao3+70Q==", + "peer": true, + "requires": { + "@babel/highlight": "^7.18.6" + } + }, + "@babel/compat-data": { + "version": "7.20.1", + "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.20.1.tgz", + "integrity": "sha512-EWZ4mE2diW3QALKvDMiXnbZpRvlj+nayZ112nK93SnhqOtpdsbVD4W+2tEoT3YNBAG9RBR0ISY758ZkOgsn6pQ==", + "peer": true + }, + "@babel/core": { + "version": "7.19.6", + "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.19.6.tgz", + "integrity": "sha512-D2Ue4KHpc6Ys2+AxpIx1BZ8+UegLLLE2p3KJEuJRKmokHOtl49jQ5ny1773KsGLZs8MQvBidAF6yWUJxRqtKtg==", + "peer": true, + "requires": { + "@ampproject/remapping": "^2.1.0", + "@babel/code-frame": "^7.18.6", + "@babel/generator": "^7.19.6", + "@babel/helper-compilation-targets": "^7.19.3", + "@babel/helper-module-transforms": "^7.19.6", + "@babel/helpers": "^7.19.4", + "@babel/parser": "^7.19.6", + "@babel/template": "^7.18.10", + "@babel/traverse": "^7.19.6", + "@babel/types": "^7.19.4", + "convert-source-map": "^1.7.0", + "debug": "^4.1.0", + "gensync": "^1.0.0-beta.2", + "json5": "^2.2.1", + "semver": "^6.3.0" + } + }, + "@babel/generator": { + "version": "7.20.1", + "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.20.1.tgz", + "integrity": "sha512-u1dMdBUmA7Z0rBB97xh8pIhviK7oItYOkjbsCxTWMknyvbQRBwX7/gn4JXurRdirWMFh+ZtYARqkA6ydogVZpg==", + "peer": true, + "requires": { + "@babel/types": "^7.20.0", + "@jridgewell/gen-mapping": "^0.3.2", + "jsesc": "^2.5.1" + }, + "dependencies": { + "@jridgewell/gen-mapping": { + "version": "0.3.2", + "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.2.tgz", + "integrity": "sha512-mh65xKQAzI6iBcFzwv28KVWSmCkdRBWoOh+bYQGW3+6OZvbbN3TqMGo5hqYxQniRcH9F2VZIoJCm4pa3BPDK/A==", + "peer": true, + "requires": { + "@jridgewell/set-array": "^1.0.1", + "@jridgewell/sourcemap-codec": "^1.4.10", + "@jridgewell/trace-mapping": "^0.3.9" + } + } + } + }, + "@babel/helper-compilation-targets": { + "version": "7.20.0", + "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.20.0.tgz", + "integrity": "sha512-0jp//vDGp9e8hZzBc6N/KwA5ZK3Wsm/pfm4CrY7vzegkVxc65SgSn6wYOnwHe9Js9HRQ1YTCKLGPzDtaS3RoLQ==", + "peer": true, + "requires": { + "@babel/compat-data": "^7.20.0", + "@babel/helper-validator-option": "^7.18.6", + "browserslist": "^4.21.3", + "semver": "^6.3.0" + } + }, + "@babel/helper-environment-visitor": { + "version": "7.18.9", + "resolved": "https://registry.npmjs.org/@babel/helper-environment-visitor/-/helper-environment-visitor-7.18.9.tgz", + "integrity": "sha512-3r/aACDJ3fhQ/EVgFy0hpj8oHyHpQc+LPtJoY9SzTThAsStm4Ptegq92vqKoE3vD706ZVFWITnMnxucw+S9Ipg==", + "peer": true + }, + "@babel/helper-function-name": { + "version": "7.19.0", + "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.19.0.tgz", + "integrity": "sha512-WAwHBINyrpqywkUH0nTnNgI5ina5TFn85HKS0pbPDfxFfhyR/aNQEn4hGi1P1JyT//I0t4OgXUlofzWILRvS5w==", + "peer": true, + "requires": { + "@babel/template": "^7.18.10", + "@babel/types": "^7.19.0" + } + }, + "@babel/helper-hoist-variables": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/helper-hoist-variables/-/helper-hoist-variables-7.18.6.tgz", + "integrity": "sha512-UlJQPkFqFULIcyW5sbzgbkxn2FKRgwWiRexcuaR8RNJRy8+LLveqPjwZV/bwrLZCN0eUHD/x8D0heK1ozuoo6Q==", + "peer": true, + "requires": { + "@babel/types": "^7.18.6" + } + }, + "@babel/helper-module-imports": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.18.6.tgz", + "integrity": "sha512-0NFvs3VkuSYbFi1x2Vd6tKrywq+z/cLeYC/RJNFrIX/30Bf5aiGYbtvGXolEktzJH8o5E5KJ3tT+nkxuuZFVlA==", + "requires": { + "@babel/types": "^7.18.6" + } + }, + "@babel/helper-module-transforms": { + "version": "7.19.6", + "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.19.6.tgz", + "integrity": "sha512-fCmcfQo/KYr/VXXDIyd3CBGZ6AFhPFy1TfSEJ+PilGVlQT6jcbqtHAM4C1EciRqMza7/TpOUZliuSH+U6HAhJw==", + "peer": true, + "requires": { + "@babel/helper-environment-visitor": "^7.18.9", + "@babel/helper-module-imports": "^7.18.6", + "@babel/helper-simple-access": "^7.19.4", + "@babel/helper-split-export-declaration": "^7.18.6", + "@babel/helper-validator-identifier": "^7.19.1", + "@babel/template": "^7.18.10", + "@babel/traverse": "^7.19.6", + "@babel/types": "^7.19.4" + } + }, + "@babel/helper-simple-access": { + "version": "7.19.4", + "resolved": "https://registry.npmjs.org/@babel/helper-simple-access/-/helper-simple-access-7.19.4.tgz", + "integrity": "sha512-f9Xq6WqBFqaDfbCzn2w85hwklswz5qsKlh7f08w4Y9yhJHpnNC0QemtSkK5YyOY8kPGvyiwdzZksGUhnGdaUIg==", + "peer": true, + "requires": { + "@babel/types": "^7.19.4" + } + }, + "@babel/helper-split-export-declaration": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.18.6.tgz", + "integrity": "sha512-bde1etTx6ZyTmobl9LLMMQsaizFVZrquTEHOqKeQESMKo4PlObf+8+JA25ZsIpZhT/WEd39+vOdLXAFG/nELpA==", + "peer": true, + "requires": { + "@babel/types": "^7.18.6" + } + }, + "@babel/helper-string-parser": { + "version": "7.19.4", + "resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.19.4.tgz", + "integrity": "sha512-nHtDoQcuqFmwYNYPz3Rah5ph2p8PFeFCsZk9A/48dPc/rGocJ5J3hAAZ7pb76VWX3fZKu+uEr/FhH5jLx7umrw==" + }, + "@babel/helper-validator-identifier": { + "version": "7.19.1", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.19.1.tgz", + "integrity": "sha512-awrNfaMtnHUr653GgGEs++LlAvW6w+DcPrOliSMXWCKo597CwL5Acf/wWdNkf/tfEQE3mjkeD1YOVZOUV/od1w==" + }, + "@babel/helper-validator-option": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.18.6.tgz", + "integrity": "sha512-XO7gESt5ouv/LRJdrVjkShckw6STTaB7l9BrpBaAHDeF5YZT+01PCwmR0SJHnkW6i8OwW/EVWRShfi4j2x+KQw==", + "peer": true + }, + "@babel/helpers": { + "version": "7.20.1", + "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.20.1.tgz", + "integrity": "sha512-J77mUVaDTUJFZ5BpP6mMn6OIl3rEWymk2ZxDBQJUG3P+PbmyMcF3bYWvz0ma69Af1oobDqT/iAsvzhB58xhQUg==", + "peer": true, + "requires": { + "@babel/template": "^7.18.10", + "@babel/traverse": "^7.20.1", + "@babel/types": "^7.20.0" + } + }, + "@babel/highlight": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.18.6.tgz", + "integrity": "sha512-u7stbOuYjaPezCuLj29hNW1v64M2Md2qupEKP1fHc7WdOA3DgLh37suiSrZYY7haUB7iBeQZ9P1uiRF359do3g==", + "peer": true, + "requires": { + "@babel/helper-validator-identifier": "^7.18.6", + "chalk": "^2.0.0", + "js-tokens": "^4.0.0" + } + }, + "@babel/parser": { + "version": "7.20.1", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.20.1.tgz", + "integrity": "sha512-hp0AYxaZJhxULfM1zyp7Wgr+pSUKBcP3M+PHnSzWGdXOzg/kHWIgiUWARvubhUKGOEw3xqY4x+lyZ9ytBVcELw==", + "peer": true + }, + "@babel/template": { + "version": "7.18.10", + "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.18.10.tgz", + "integrity": "sha512-TI+rCtooWHr3QJ27kJxfjutghu44DLnasDMwpDqCXVTal9RLp3RSYNh4NdBrRP2cQAoG9A8juOQl6P6oZG4JxA==", + "peer": true, + "requires": { + "@babel/code-frame": "^7.18.6", + "@babel/parser": "^7.18.10", + "@babel/types": "^7.18.10" + } + }, + "@babel/traverse": { + "version": "7.20.1", + "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.20.1.tgz", + "integrity": "sha512-d3tN8fkVJwFLkHkBN479SOsw4DMZnz8cdbL/gvuDuzy3TS6Nfw80HuQqhw1pITbIruHyh7d1fMA47kWzmcUEGA==", + "peer": true, + "requires": { + "@babel/code-frame": "^7.18.6", + "@babel/generator": "^7.20.1", + "@babel/helper-environment-visitor": "^7.18.9", + "@babel/helper-function-name": "^7.19.0", + "@babel/helper-hoist-variables": "^7.18.6", + "@babel/helper-split-export-declaration": "^7.18.6", + "@babel/parser": "^7.20.1", + "@babel/types": "^7.20.0", + "debug": "^4.1.0", + "globals": "^11.1.0" + } + }, + "@babel/types": { + "version": "7.20.0", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.20.0.tgz", + "integrity": "sha512-Jlgt3H0TajCW164wkTOTzHkZb075tMQMULzrLUoUeKmO7eFL96GgDxf7/Axhc5CAuKE3KFyVW1p6ysKsi2oXAg==", + "requires": { + "@babel/helper-string-parser": "^7.19.4", + "@babel/helper-validator-identifier": "^7.19.1", + "to-fast-properties": "^2.0.0" + } + }, + "@esbuild/android-arm": { + "version": "0.15.12", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.15.12.tgz", + "integrity": "sha512-IC7TqIqiyE0MmvAhWkl/8AEzpOtbhRNDo7aph47We1NbE5w2bt/Q+giAhe0YYeVpYnIhGMcuZY92qDK6dQauvA==", + "dev": true, + "optional": true + }, + "@esbuild/linux-loong64": { + "version": "0.15.12", + "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.15.12.tgz", + "integrity": "sha512-tZEowDjvU7O7I04GYvWQOS4yyP9E/7YlsB0jjw1Ycukgr2ycEzKyIk5tms5WnLBymaewc6VmRKnn5IJWgK4eFw==", + "dev": true, + "optional": true + }, + "@jridgewell/gen-mapping": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.1.1.tgz", + "integrity": "sha512-sQXCasFk+U8lWYEe66WxRDOE9PjVz4vSM51fTu3Hw+ClTpUSQb718772vH3pyS5pShp6lvQM7SxgIDXXXmOX7w==", + "peer": true, + "requires": { + "@jridgewell/set-array": "^1.0.0", + "@jridgewell/sourcemap-codec": "^1.4.10" + } + }, + "@jridgewell/resolve-uri": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.0.tgz", + "integrity": "sha512-F2msla3tad+Mfht5cJq7LSXcdudKTWCVYUgw6pLFOOHSTtZlj6SWNYAp+AhuqLmWdBO2X5hPrLcu8cVP8fy28w==", + "peer": true + }, + "@jridgewell/set-array": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/@jridgewell/set-array/-/set-array-1.1.2.tgz", + "integrity": "sha512-xnkseuNADM0gt2bs+BvhO0p78Mk762YnZdsuzFV018NoG1Sj1SCQvpSqa7XUaTam5vAGasABV9qXASMKnFMwMw==", + "peer": true + }, + "@jridgewell/sourcemap-codec": { + "version": "1.4.14", + "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.14.tgz", + "integrity": "sha512-XPSJHWmi394fuUuzDnGz1wiKqWfo1yXecHQMRf2l6hztTO+nPru658AyDngaBe7isIxEkRsPR3FZh+s7iVa4Uw==", + "peer": true + }, + "@jridgewell/trace-mapping": { + "version": "0.3.17", + "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.17.tgz", + "integrity": "sha512-MCNzAp77qzKca9+W/+I0+sEpaUnZoeasnghNeVc41VZCEKaCH73Vq3BZZ/SzWIgrqE4H4ceI+p+b6C0mHf9T4g==", + "peer": true, + "requires": { + "@jridgewell/resolve-uri": "3.1.0", + "@jridgewell/sourcemap-codec": "1.4.14" + } + }, + "@rollup/plugin-babel": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/@rollup/plugin-babel/-/plugin-babel-6.0.2.tgz", + "integrity": "sha512-Vnt8XIWYwCf3MD7qhBWYlP9pjSZvcE++nlPXhQYw6YNehl5742AzFbrV6h4BHb20VAOVUlIksVLymQCTwVCGDg==", + "requires": { + "@babel/helper-module-imports": "^7.18.6", + "@rollup/pluginutils": "^5.0.1" + } + }, + "@rollup/pluginutils": { + "version": "5.0.2", + "resolved": "https://registry.npmjs.org/@rollup/pluginutils/-/pluginutils-5.0.2.tgz", + "integrity": "sha512-pTd9rIsP92h+B6wWwFbW8RkZv4hiR/xKsqre4SIuAOaOEQRxi0lqLke9k2/7WegC85GgUs9pjmOjCUi3In4vwA==", + "requires": { + "@types/estree": "^1.0.0", + "estree-walker": "^2.0.2", + "picomatch": "^2.3.1" + } + }, + "@types/estree": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/@types/estree/-/estree-1.0.0.tgz", + "integrity": "sha512-WulqXMDUTYAXCjZnk6JtIHPigp55cVtDgDrO2gHRwhyJto21+1zbVCtOYB2L1F9w4qCQ0rOGWBnBe0FNTiEJIQ==" + }, + "ansi-styles": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", + "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", + "peer": true, + "requires": { + "color-convert": "^1.9.0" + } + }, + "browserslist": { + "version": "4.21.4", + "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.21.4.tgz", + "integrity": "sha512-CBHJJdDmgjl3daYjN5Cp5kbTf1mUhZoS+beLklHIvkOWscs83YAhLlF3Wsh/lciQYAcbBJgTOD44VtG31ZM4Hw==", + "peer": true, + "requires": { + "caniuse-lite": "^1.0.30001400", + "electron-to-chromium": "^1.4.251", + "node-releases": "^2.0.6", + "update-browserslist-db": "^1.0.9" + } + }, + "caniuse-lite": { + "version": "1.0.30001429", + "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001429.tgz", + "integrity": "sha512-511ThLu1hF+5RRRt0zYCf2U2yRr9GPF6m5y90SBCWsvSoYoW7yAGlv/elyPaNfvGCkp6kj/KFZWU0BMA69Prsg==", + "peer": true + }, + "chalk": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", + "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", + "peer": true, + "requires": { + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" + } + }, + "color-convert": { + "version": "1.9.3", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", + "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", + "peer": true, + "requires": { + "color-name": "1.1.3" + } + }, + "color-name": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", + "integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==", + "peer": true + }, + "convert-source-map": { + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.9.0.tgz", + "integrity": "sha512-ASFBup0Mz1uyiIjANan1jzLQami9z1PoYSZCiiYW2FczPbenXc45FZdBZLzOT+r6+iciuEModtmCti+hjaAk0A==", + "peer": true + }, + "debug": { + "version": "4.3.4", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", + "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", + "peer": true, + "requires": { + "ms": "2.1.2" + } + }, + "electron-to-chromium": { + "version": "1.4.284", + "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.284.tgz", + "integrity": "sha512-M8WEXFuKXMYMVr45fo8mq0wUrrJHheiKZf6BArTKk9ZBYCKJEOU5H8cdWgDT+qCVZf7Na4lVUaZsA+h6uA9+PA==", + "peer": true + }, + "esbuild": { + "version": "0.15.12", + "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.15.12.tgz", + "integrity": "sha512-PcT+/wyDqJQsRVhaE9uX/Oq4XLrFh0ce/bs2TJh4CSaw9xuvI+xFrH2nAYOADbhQjUgAhNWC5LKoUsakm4dxng==", + "dev": true, + "requires": { + "@esbuild/android-arm": "0.15.12", + "@esbuild/linux-loong64": "0.15.12", + "esbuild-android-64": "0.15.12", + "esbuild-android-arm64": "0.15.12", + "esbuild-darwin-64": "0.15.12", + "esbuild-darwin-arm64": "0.15.12", + "esbuild-freebsd-64": "0.15.12", + "esbuild-freebsd-arm64": "0.15.12", + "esbuild-linux-32": "0.15.12", + "esbuild-linux-64": "0.15.12", + "esbuild-linux-arm": "0.15.12", + "esbuild-linux-arm64": "0.15.12", + "esbuild-linux-mips64le": "0.15.12", + "esbuild-linux-ppc64le": "0.15.12", + "esbuild-linux-riscv64": "0.15.12", + "esbuild-linux-s390x": "0.15.12", + "esbuild-netbsd-64": "0.15.12", + "esbuild-openbsd-64": "0.15.12", + "esbuild-sunos-64": "0.15.12", + "esbuild-windows-32": "0.15.12", + "esbuild-windows-64": "0.15.12", + "esbuild-windows-arm64": "0.15.12" + } + }, + "esbuild-android-64": { + "version": "0.15.12", + "resolved": "https://registry.npmjs.org/esbuild-android-64/-/esbuild-android-64-0.15.12.tgz", + "integrity": "sha512-MJKXwvPY9g0rGps0+U65HlTsM1wUs9lbjt5CU19RESqycGFDRijMDQsh68MtbzkqWSRdEtiKS1mtPzKneaAI0Q==", + "dev": true, + "optional": true + }, + "esbuild-android-arm64": { + "version": "0.15.12", + "resolved": "https://registry.npmjs.org/esbuild-android-arm64/-/esbuild-android-arm64-0.15.12.tgz", + "integrity": "sha512-Hc9SEcZbIMhhLcvhr1DH+lrrec9SFTiRzfJ7EGSBZiiw994gfkVV6vG0sLWqQQ6DD7V4+OggB+Hn0IRUdDUqvA==", + "dev": true, + "optional": true + }, + "esbuild-darwin-64": { + "version": "0.15.12", + "resolved": "https://registry.npmjs.org/esbuild-darwin-64/-/esbuild-darwin-64-0.15.12.tgz", + "integrity": "sha512-qkmqrTVYPFiePt5qFjP8w/S+GIUMbt6k8qmiPraECUWfPptaPJUGkCKrWEfYFRWB7bY23FV95rhvPyh/KARP8Q==", + "dev": true, + "optional": true + }, + "esbuild-darwin-arm64": { + "version": "0.15.12", + "resolved": "https://registry.npmjs.org/esbuild-darwin-arm64/-/esbuild-darwin-arm64-0.15.12.tgz", + "integrity": "sha512-z4zPX02tQ41kcXMyN3c/GfZpIjKoI/BzHrdKUwhC/Ki5BAhWv59A9M8H+iqaRbwpzYrYidTybBwiZAIWCLJAkw==", + "dev": true, + "optional": true + }, + "esbuild-freebsd-64": { + "version": "0.15.12", + "resolved": "https://registry.npmjs.org/esbuild-freebsd-64/-/esbuild-freebsd-64-0.15.12.tgz", + "integrity": "sha512-XFL7gKMCKXLDiAiBjhLG0XECliXaRLTZh6hsyzqUqPUf/PY4C6EJDTKIeqqPKXaVJ8+fzNek88285krSz1QECw==", + "dev": true, + "optional": true + }, + "esbuild-freebsd-arm64": { + "version": "0.15.12", + "resolved": "https://registry.npmjs.org/esbuild-freebsd-arm64/-/esbuild-freebsd-arm64-0.15.12.tgz", + "integrity": "sha512-jwEIu5UCUk6TjiG1X+KQnCGISI+ILnXzIzt9yDVrhjug2fkYzlLbl0K43q96Q3KB66v6N1UFF0r5Ks4Xo7i72g==", + "dev": true, + "optional": true + }, + "esbuild-linux-32": { + "version": "0.15.12", + "resolved": "https://registry.npmjs.org/esbuild-linux-32/-/esbuild-linux-32-0.15.12.tgz", + "integrity": "sha512-uSQuSEyF1kVzGzuIr4XM+v7TPKxHjBnLcwv2yPyCz8riV8VUCnO/C4BF3w5dHiVpCd5Z1cebBtZJNlC4anWpwA==", + "dev": true, + "optional": true + }, + "esbuild-linux-64": { + "version": "0.15.12", + "resolved": "https://registry.npmjs.org/esbuild-linux-64/-/esbuild-linux-64-0.15.12.tgz", + "integrity": "sha512-QcgCKb7zfJxqT9o5z9ZUeGH1k8N6iX1Y7VNsEi5F9+HzN1OIx7ESxtQXDN9jbeUSPiRH1n9cw6gFT3H4qbdvcA==", + "dev": true, + "optional": true + }, + "esbuild-linux-arm": { + "version": "0.15.12", + "resolved": "https://registry.npmjs.org/esbuild-linux-arm/-/esbuild-linux-arm-0.15.12.tgz", + "integrity": "sha512-Wf7T0aNylGcLu7hBnzMvsTfEXdEdJY/hY3u36Vla21aY66xR0MS5I1Hw8nVquXjTN0A6fk/vnr32tkC/C2lb0A==", + "dev": true, + "optional": true + }, + "esbuild-linux-arm64": { + "version": "0.15.12", + "resolved": "https://registry.npmjs.org/esbuild-linux-arm64/-/esbuild-linux-arm64-0.15.12.tgz", + "integrity": "sha512-HtNq5xm8fUpZKwWKS2/YGwSfTF+339L4aIA8yphNKYJckd5hVdhfdl6GM2P3HwLSCORS++++7++//ApEwXEuAQ==", + "dev": true, + "optional": true + }, + "esbuild-linux-mips64le": { + "version": "0.15.12", + "resolved": "https://registry.npmjs.org/esbuild-linux-mips64le/-/esbuild-linux-mips64le-0.15.12.tgz", + "integrity": "sha512-Qol3+AvivngUZkTVFgLpb0H6DT+N5/zM3V1YgTkryPYFeUvuT5JFNDR3ZiS6LxhyF8EE+fiNtzwlPqMDqVcc6A==", + "dev": true, + "optional": true + }, + "esbuild-linux-ppc64le": { + "version": "0.15.12", + "resolved": "https://registry.npmjs.org/esbuild-linux-ppc64le/-/esbuild-linux-ppc64le-0.15.12.tgz", + "integrity": "sha512-4D8qUCo+CFKaR0cGXtGyVsOI7w7k93Qxb3KFXWr75An0DHamYzq8lt7TNZKoOq/Gh8c40/aKaxvcZnTgQ0TJNg==", + "dev": true, + "optional": true + }, + "esbuild-linux-riscv64": { + "version": "0.15.12", + "resolved": "https://registry.npmjs.org/esbuild-linux-riscv64/-/esbuild-linux-riscv64-0.15.12.tgz", + "integrity": "sha512-G9w6NcuuCI6TUUxe6ka0enjZHDnSVK8bO+1qDhMOCtl7Tr78CcZilJj8SGLN00zO5iIlwNRZKHjdMpfFgNn1VA==", + "dev": true, + "optional": true + }, + "esbuild-linux-s390x": { + "version": "0.15.12", + "resolved": "https://registry.npmjs.org/esbuild-linux-s390x/-/esbuild-linux-s390x-0.15.12.tgz", + "integrity": "sha512-Lt6BDnuXbXeqSlVuuUM5z18GkJAZf3ERskGZbAWjrQoi9xbEIsj/hEzVnSAFLtkfLuy2DE4RwTcX02tZFunXww==", + "dev": true, + "optional": true + }, + "esbuild-netbsd-64": { + "version": "0.15.12", + "resolved": "https://registry.npmjs.org/esbuild-netbsd-64/-/esbuild-netbsd-64-0.15.12.tgz", + "integrity": "sha512-jlUxCiHO1dsqoURZDQts+HK100o0hXfi4t54MNRMCAqKGAV33JCVvMplLAa2FwviSojT/5ZG5HUfG3gstwAG8w==", + "dev": true, + "optional": true + }, + "esbuild-openbsd-64": { + "version": "0.15.12", + "resolved": "https://registry.npmjs.org/esbuild-openbsd-64/-/esbuild-openbsd-64-0.15.12.tgz", + "integrity": "sha512-1o1uAfRTMIWNOmpf8v7iudND0L6zRBYSH45sofCZywrcf7NcZA+c7aFsS1YryU+yN7aRppTqdUK1PgbZVaB1Dw==", + "dev": true, + "optional": true + }, + "esbuild-sunos-64": { + "version": "0.15.12", + "resolved": "https://registry.npmjs.org/esbuild-sunos-64/-/esbuild-sunos-64-0.15.12.tgz", + "integrity": "sha512-nkl251DpoWoBO9Eq9aFdoIt2yYmp4I3kvQjba3jFKlMXuqQ9A4q+JaqdkCouG3DHgAGnzshzaGu6xofGcXyPXg==", + "dev": true, + "optional": true + }, + "esbuild-windows-32": { + "version": "0.15.12", + "resolved": "https://registry.npmjs.org/esbuild-windows-32/-/esbuild-windows-32-0.15.12.tgz", + "integrity": "sha512-WlGeBZHgPC00O08luIp5B2SP4cNCp/PcS+3Pcg31kdcJPopHxLkdCXtadLU9J82LCfw4TVls21A6lilQ9mzHrw==", + "dev": true, + "optional": true + }, + "esbuild-windows-64": { + "version": "0.15.12", + "resolved": "https://registry.npmjs.org/esbuild-windows-64/-/esbuild-windows-64-0.15.12.tgz", + "integrity": "sha512-VActO3WnWZSN//xjSfbiGOSyC+wkZtI8I4KlgrTo5oHJM6z3MZZBCuFaZHd8hzf/W9KPhF0lY8OqlmWC9HO5AA==", + "dev": true, + "optional": true + }, + "esbuild-windows-arm64": { + "version": "0.15.12", + "resolved": "https://registry.npmjs.org/esbuild-windows-arm64/-/esbuild-windows-arm64-0.15.12.tgz", + "integrity": "sha512-Of3MIacva1OK/m4zCNIvBfz8VVROBmQT+gRX6pFTLPngFYcj6TFH/12VveAqq1k9VB2l28EoVMNMUCcmsfwyuA==", + "dev": true, + "optional": true + }, + "escalade": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.1.1.tgz", + "integrity": "sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==", + "peer": true + }, + "escape-string-regexp": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", + "integrity": "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==", + "peer": true + }, + "estree-walker": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/estree-walker/-/estree-walker-2.0.2.tgz", + "integrity": "sha512-Rfkk/Mp/DL7JVje3u18FxFujQlTNR2q6QfMSMB7AvCBx91NGj/ba3kCfza0f6dVDbw7YlRf/nDrn7pQrCCyQ/w==" + }, + "fsevents": { + "version": "2.3.2", + "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.2.tgz", + "integrity": "sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==", + "dev": true, + "optional": true + }, + "function-bind": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz", + "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==", + "dev": true + }, + "gensync": { + "version": "1.0.0-beta.2", + "resolved": "https://registry.npmjs.org/gensync/-/gensync-1.0.0-beta.2.tgz", + "integrity": "sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg==", + "peer": true + }, + "globals": { + "version": "11.12.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-11.12.0.tgz", + "integrity": "sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==", + "peer": true + }, + "has": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz", + "integrity": "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==", + "dev": true, + "requires": { + "function-bind": "^1.1.1" + } + }, + "has-flag": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", + "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==", + "peer": true + }, + "is-core-module": { + "version": "2.11.0", + "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.11.0.tgz", + "integrity": "sha512-RRjxlvLDkD1YJwDbroBHMb+cukurkDWNyHx7D3oNB5x9rb5ogcksMC5wHCadcXoo67gVr/+3GFySh3134zi6rw==", + "dev": true, + "requires": { + "has": "^1.0.3" + } + }, + "js-tokens": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz", + "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==", + "peer": true + }, + "jsesc": { + "version": "2.5.2", + "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-2.5.2.tgz", + "integrity": "sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA==", + "peer": true + }, + "json5": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/json5/-/json5-2.2.1.tgz", + "integrity": "sha512-1hqLFMSrGHRHxav9q9gNjJ5EXznIxGVO09xQRrwplcS8qs28pZ8s8hupZAmqDwZUmVZ2Qb2jnyPOWcDH8m8dlA==", + "peer": true + }, + "ms": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", + "peer": true + }, + "nanoid": { + "version": "3.3.4", + "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.4.tgz", + "integrity": "sha512-MqBkQh/OHTS2egovRtLk45wEyNXwF+cokD+1YPf9u5VfJiRdAiRwB2froX5Co9Rh20xs4siNPm8naNotSD6RBw==", + "dev": true + }, + "node-releases": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.6.tgz", + "integrity": "sha512-PiVXnNuFm5+iYkLBNeq5211hvO38y63T0i2KKh2KnUs3RpzJ+JtODFjkD8yjLwnDkTYF1eKXheUwdssR+NRZdg==", + "peer": true + }, + "path-parse": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz", + "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==", + "dev": true + }, + "picocolors": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.0.0.tgz", + "integrity": "sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ==" + }, + "picomatch": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", + "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==" + }, + "postcss": { + "version": "8.4.18", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.18.tgz", + "integrity": "sha512-Wi8mWhncLJm11GATDaQKobXSNEYGUHeQLiQqDFG1qQ5UTDPTEvKw0Xt5NsTpktGTwLps3ByrWsBrG0rB8YQ9oA==", + "dev": true, + "requires": { + "nanoid": "^3.3.4", + "picocolors": "^1.0.0", + "source-map-js": "^1.0.2" + } + }, + "resolve": { + "version": "1.22.1", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.1.tgz", + "integrity": "sha512-nBpuuYuY5jFsli/JIs1oldw6fOQCBioohqWZg/2hiaOybXOft4lonv85uDOKXdf8rhyK159cxU5cDcK/NKk8zw==", + "dev": true, + "requires": { + "is-core-module": "^2.9.0", + "path-parse": "^1.0.7", + "supports-preserve-symlinks-flag": "^1.0.0" + } + }, + "rollup": { + "version": "2.79.1", + "resolved": "https://registry.npmjs.org/rollup/-/rollup-2.79.1.tgz", + "integrity": "sha512-uKxbd0IhMZOhjAiD5oAFp7BqvkA4Dv47qpOCtaNvng4HBwdbWtdOh8f5nZNuk2rp51PMGk3bzfWu5oayNEuYnw==", + "devOptional": true, + "requires": { + "fsevents": "~2.3.2" + } + }, + "semver": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", + "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", + "peer": true + }, + "source-map-js": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.0.2.tgz", + "integrity": "sha512-R0XvVJ9WusLiqTCEiGCmICCMplcCkIwwR11mOSD9CR5u+IXYdiseeEuXCVAjS54zqwkLcPNnmU4OeJ6tUrWhDw==", + "dev": true + }, + "supports-color": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", + "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", + "peer": true, + "requires": { + "has-flag": "^3.0.0" + } + }, + "supports-preserve-symlinks-flag": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz", + "integrity": "sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==", + "dev": true + }, + "to-fast-properties": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/to-fast-properties/-/to-fast-properties-2.0.0.tgz", + "integrity": "sha512-/OaKK0xYrs3DmxRYqL/yDc+FxFUVYhDlXMhRmv3z915w2HF1tnN1omB354j8VUGO/hbRzyD6Y3sA7v7GS/ceog==" + }, + "typescript": { + "version": "4.8.4", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-4.8.4.tgz", + "integrity": "sha512-QCh+85mCy+h0IGff8r5XWzOVSbBO+KfeYrMQh7NJ58QujwcE22u+NUSmUxqF+un70P9GXKxa2HCNiTTMJknyjQ==", + "dev": true + }, + "update-browserslist-db": { + "version": "1.0.10", + "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.0.10.tgz", + "integrity": "sha512-OztqDenkfFkbSG+tRxBeAnCVPckDBcvibKd35yDONx6OU8N7sqgwc7rCbkJ/WcYtVRZ4ba68d6byhC21GFh7sQ==", + "peer": true, + "requires": { + "escalade": "^3.1.1", + "picocolors": "^1.0.0" + } + }, + "vite": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/vite/-/vite-3.2.2.tgz", + "integrity": "sha512-pLrhatFFOWO9kS19bQ658CnRYzv0WLbsPih6R+iFeEEhDOuYgYCX2rztUViMz/uy/V8cLCJvLFeiOK7RJEzHcw==", + "dev": true, + "requires": { + "esbuild": "^0.15.9", + "fsevents": "~2.3.2", + "postcss": "^8.4.18", + "resolve": "^1.22.1", + "rollup": "^2.79.1" + } + } + } } diff --git a/package.json b/package.json index d7139f8..641a6e6 100644 --- a/package.json +++ b/package.json @@ -1,18 +1,19 @@ { - "name": "listenbourgmap", - "private": true, - "version": "0.0.0", - "type": "module", - "scripts": { - "dev": "vite --host", - "build": "tsc && vite build", - "preview": "vite preview" - }, - "devDependencies": { - "typescript": "^4.6.4", - "vite": "^3.2.0" - }, - "dependencies": { - "@rollup/plugin-babel": "^6.0.2" - } + "name": "listenbourgmap", + "private": true, + "version": "0.0.0", + "type": "module", + "scripts": { + "dev": "vite --host", + "build": "tsc && vite build", + "preview": "vite preview" + }, + "devDependencies": { + "@types/node": "^18.11.9", + "typescript": "^4.6.4", + "vite": "^3.2.0" + }, + "dependencies": { + "@rollup/plugin-babel": "^6.0.2" + } } diff --git a/public/SourceSerif4-Regular.ttf b/public/SourceSerif4-Regular.ttf deleted file mode 100644 index 3ec8f3a33eb5faf5b7dfaead094c566b47c2c4e8..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 328836 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

=l2O)Hb96}wy??b5_ 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 diff --git a/public/assets/logo.svg b/public/assets/logo.svg new file mode 100644 index 0000000..eb7fcf6 --- /dev/null +++ b/public/assets/logo.svg @@ -0,0 +1,18 @@ + + + + + + + + + + + + + + + + + + diff --git a/public/assets/logo_dark.svg b/public/assets/logo_dark.svg new file mode 100644 index 0000000..f7b86eb --- /dev/null +++ b/public/assets/logo_dark.svg @@ -0,0 +1,18 @@ + + + + + + + + + + + + + + + + + + diff --git a/public/css/design-system.css b/public/css/design-system.css new file mode 100644 index 0000000..44a14e7 --- /dev/null +++ b/public/css/design-system.css @@ -0,0 +1,155 @@ +html, +body { + scroll-behavior: smooth; + width: 100%; + margin: 0; + padding: 0; + display: flex; + font-family: var(--font-listen); + color: var(--clr-text); + flex-direction: column; +} + +* { + box-sizing: border-box; +} + +a { + color: var(--clr-blue); +} +a:hover { + color: var(--clr-blue-alt); +} + +button { + padding: 7px 12px; + --clr-btn: var(--clr-red); + --border-width: 2px; + background-color: var(--clr-btn); + outline: var(--border-width) solid var(--clr-btn); + outline-offset: -1px; /*to avoid white space due to the radius*/ + border: none; + margin: var(--border-width); + color: #fff; + font-weight: 500; + border-radius: var(--border-radius); + font-family: var(--font-listen); + font-size: 18px; + display: flex; + justify-content: center; + align-items: center; +} +button.outline-only { + color: var(--clr-text); + background-color: transparent; +} +button.disabled { + cursor: not-allowed; + opacity: 50%; + pointer-events: none; +} +button:hover { + --clr-btn: var(--clr-red-alt); + cursor: pointer; +} +button span { + margin-right: 10px; + margin-top: -3px; + color: inherit; +} + +form, +.form { + margin-bottom: 20px; +} +form label, +.form label { + font-weight: 600; + font-size: 14px; + color: var(--clr-text-alt); + text-transform: uppercase; + letter-spacing: 1px; + border-radius: var(--border-radius); +} +form select, +.form select { + width: 100%; + height: 40px; + cursor: pointer; + background: none; + background: var(--clr-bg-alt); + border-radius: var(--border-radius); + -webkit-appearance: none; + -moz-appearance: none; + appearance: none; +} +form .selector, +.form .selector { + position: relative; +} +form .selector:after, +.form .selector:after { + content: ">"; + position: absolute; + right: 2em; + margin: auto 0; + top: 25%; + color: var(--clr-text-alt); + transform: rotate(90deg) scaleY(1.5); + transition: all 0.2s ease-out; +} +form .selector:focus-within:after, +.form .selector:focus-within:after { + transform: rotate(-90deg) scaleY(1.5); + transition: all 0.2s ease-out; +} +form .buttons, +.form .buttons { + display: flex; + justify-content: space-between; + align-items: center; + gap: 10px; +} +form button, +.form button { + width: 100%; + margin-top: 10px; + font-size: 16px; +} +form input, +form select, +.form input, +.form select { + display: block; + margin: 3px 0 15px 0; + padding: 8px 14px; + border-radius: var(--border-radius); + background: var(--clr-bg-alt); + color: var(--clr-text-alt); + font-weight: 500; + font-size: 18px; + width: 100%; + border: none; + color-scheme: var(--input-scheme); +} +form input:focus, +form select:focus, +.form input:focus, +.form select:focus { + outline: 2px solid var(--clr-blue); +} + +hr { + width: 100%; + border: solid 1px var(--clr-border); + margin: 1rem 0; +} + +footer { + display: block; + color: var(--clr-text-alt); + font-weight: 500; + margin-top: auto; + padding-top: 20px; + font-size: smaller; +} diff --git a/public/css/design-system.scss b/public/css/design-system.scss new file mode 100644 index 0000000..7895c5e --- /dev/null +++ b/public/css/design-system.scss @@ -0,0 +1,149 @@ +html, +body { + scroll-behavior: smooth; + width: 100%; + margin: 0; + padding: 0; + display: flex; + font-family: var(--font-listen); + color: var(--clr-text); + flex-direction: column; +} + +* { + box-sizing: border-box; +} + +a { + color: var(--clr-blue); + &:hover { + color: var(--clr-blue-alt); + } +} + +button { + padding: 7px 12px; + --clr-btn: var(--clr-red); + --border-width: 2px; + background-color: var(--clr-btn); + outline: var(--border-width) solid var(--clr-btn); + outline-offset: -1px; /*to avoid white space due to the radius*/ + border: none; + margin: var(--border-width); + color: #fff; + font-weight: 500; + + border-radius: var(--border-radius); + font-family: var(--font-listen); + font-size: 18px; + + display: flex; + justify-content: center; + align-items: center; + + &.outline-only { + color: var(--clr-text); + background-color: transparent; + } + + &.disabled { + cursor: not-allowed; + opacity: 50%; + pointer-events: none; + } + + &:hover { + --clr-btn: var(--clr-red-alt); + cursor: pointer; + } + & span { + margin-right: 10px; + margin-top: -3px; + color: inherit; + } +} + +form, +.form { + margin-bottom: 20px; + label { + font-weight: 600; + font-size: 14px; + + color: var(--clr-text-alt); + text-transform: uppercase; + letter-spacing: 1px; + + border-radius: var(--border-radius); + } + select { + width: 100%; + height: 40px; + cursor: pointer; + background: none; + background: var(--clr-bg-alt); + border-radius: var(--border-radius); + appearance: none; + } + .selector { + position: relative; + &:after { + content: ">"; + position: absolute; + right: 2em; + margin: auto 0; + top: calc(100% / 4); + color: var(--clr-text-alt); + transform: rotate(90deg) scaleY(1.5); + transition: all 0.2s ease-out; + } + &:focus-within:after { + transform: rotate(-90deg) scaleY(1.5); + transition: all 0.2s ease-out; + } + } + .buttons { + display: flex; + justify-content: space-between; + align-items: center; + gap: 10px; + } + button { + width: 100%; + margin-top: 10px; + font-size: 16px; + } + & input, + & select { + display: block; + margin: 3px 0 15px 0; + padding: 8px 14px; + border-radius: var(--border-radius); + background: var(--clr-bg-alt); + color: var(--clr-text-alt); + font-weight: 500; + font-size: 18px; + width: 100%; + border: none; + color-scheme: var(--input-scheme); + + &:focus { + outline: 2px solid var(--clr-blue); + } + } +} + +hr { + width: 100%; + border: solid 1px var(--clr-border); + margin: 1rem 0; +} + +footer { + display: block; + color: var(--clr-text-alt); + font-weight: 500; + margin-top: auto; + padding-top: 20px; + font-size: smaller; +} diff --git a/public/css/layout-outil-1.css b/public/css/layout-outil-1.css new file mode 100644 index 0000000..0ddb23a --- /dev/null +++ b/public/css/layout-outil-1.css @@ -0,0 +1,165 @@ +html, +body { + height: 100%; +} + +body { + background-color: var(--clr-bg-alt); +} +body > * { + padding: 24px 16px; +} + +* { + transition: all 0.2s ease-in-out; +} + +.header { + background-color: var(--clr-bg); + display: flex; + justify-content: space-between; + flex-wrap: wrap; + box-shadow: 0px 2px 4px rgba(0, 0, 0, 0.1); + border-bottom: 1px solid var(--clr-border); + letter-spacing: -0.045em; +} +.header .header-logo { + flex: 1 1 auto; + background-image: var(--logo); + background-repeat: no-repeat; + background-size: contain; + width: auto; + height: 32px; +} +.header nav { + flex: 0 1 auto; + display: flex; + gap: 10px; + align-items: center; +} +.header nav .nav-btn { + font-size: 17px; + text-decoration: none; +} +.header nav .nav-btn.current { + text-decoration: underline; +} +.header nav .nav-btn.important { + color: var(--clr-red); +} +.header nav .nav-btn.important:hover { + color: var(--clr-red-alt); +} + +.main { + display: flex; + flex-direction: column; + gap: 10px; +} +.main .card { + display: flex; + flex-direction: column; + align-items: flex-start; + padding: 0px; + background: var(--clr-bg); + box-shadow: 0px 2px 4px rgba(0, 0, 0, 0.25); + border-radius: var(--border-radius); + font-family: "HK Grotesk"; + font-size: 17px; +} +.main .card .card-header { + width: 100%; + display: flex; + padding: 0px 20px; + gap: 20px; + border-bottom: 1px solid var(--clr-border); + align-items: center; + justify-content: space-between; + font-weight: 700; + position: relative; +} +.main .card .card-header .card-title { + gap: 20px; + padding: 10px 0; + align-items: center; +} +.main .card .card-header .card-tabs { + gap: 20px; + display: flex; +} +.main .card .card-header .card-tabs .card-tab { + padding: 10px 0; +} +.main .card .card-header .card-tabs .card-tab.active { + padding-bottom: 8px; + border-bottom: 2px solid var(--clr-red); +} +.main .card .loading.visible { + height: 2px; + position: absolute; + bottom: 0; + overflow: hidden; + left: 0; + right: 0; + transition: opacity 0.2s; +} +.main .card .loading.visible > div { + background-color: var(--clr-red); + width: 20%; + height: 100%; + -webkit-animation: loading 0.8s infinite; + animation: loading 0.8s infinite; +} +.main .card .card-content { + width: 100%; + padding: 20px; + gap: 10px; + display: flex; + flex-direction: column; + border-radius: 0 0 var(--border-radius) var(--border-radius); +} +.main .row { + display: flex; + flex-direction: column; + gap: 10px; +} +.main .part-title { + padding-top: 30px; + color: var(--clr-text-alt); + font-weight: bold; +} + +@media screen and (min-width: 768px) { + .main .row { + flex-direction: row; + } + body > * { + padding: 24px 64px; + } +} +.footer { + color: var(--clr-text-alt); + margin-top: auto; +} + +@-webkit-keyframes loading { + 0% { + width: 20%; + transform: translateX(-100%); + } + 100% { + width: 100%; + transform: translateX(100%); + } +} + +@keyframes loading { + 0% { + width: 20%; + transform: translateX(-100%); + } + 100% { + width: 100%; + transform: translateX(100%); + } +} diff --git a/public/css/layout-outil-1.scss b/public/css/layout-outil-1.scss new file mode 100644 index 0000000..f9134c6 --- /dev/null +++ b/public/css/layout-outil-1.scss @@ -0,0 +1,157 @@ +html, +body { + height: 100%; +} + +body { + background-color: var(--clr-bg-alt); + & > * { + padding: 24px 16px; + } +} + +* { + transition: all 0.2s ease-in-out; +} + +.header { + background-color: var(--clr-bg); + display: flex; + justify-content: space-between; + flex-wrap: wrap; + box-shadow: 0px 2px 4px rgba(0, 0, 0, 0.1); + border-bottom: 1px solid var(--clr-border); + letter-spacing: -0.045em; + .header-logo { + flex: 1 1 auto; + background-image: var(--logo); + background-repeat: no-repeat; + background-size: contain; + + width: auto; + height: 32px; + } + nav { + flex: 0 1 auto; + display: flex; + gap: 10px; + align-items: center; + .nav-btn { + font-size: 17px; + text-decoration: none; + &.current { + text-decoration: underline; + } + &.important { + color: var(--clr-red); + &:hover { + color: var(--clr-red-alt); + } + } + } + } +} + +.main { + display: flex; + flex-direction: column; + gap: 10px; + + .card { + display: flex; + flex-direction: column; + align-items: flex-start; + padding: 0px; + background: var(--clr-bg); + box-shadow: 0px 2px 4px rgba(0, 0, 0, 0.25); + border-radius: var(--border-radius); + font-family: "HK Grotesk"; + font-size: 17px; + .card-header { + width: 100%; + display: flex; + padding: 0px 20px; + gap: 20px; + border-bottom: 1px solid var(--clr-border); + align-items: center; + justify-content: space-between; + font-weight: 700; + position: relative; + .card-title { + gap: 20px; + padding: 10px 0; + align-items: center; + } + .card-tabs { + gap: 20px; + display: flex; + .card-tab { + padding: 10px 0; + &.active { + padding-bottom: 8px; + border-bottom: 2px solid var(--clr-red); + } + } + } + } + .loading.visible { + height: 2px; + position: absolute; + bottom: 0; + overflow: hidden; + left: 0; + right: 0; + transition: opacity 0.2s; + + & > div { + background-color: var(--clr-red); + width: 20%; + height: 100%; + animation: loading 0.8s infinite; + } + } + .card-content { + width: 100%; + padding: 20px; + gap: 10px; + display: flex; + flex-direction: column; + border-radius: 0 0 var(--border-radius) var(--border-radius); + } + } + + .row { + display: flex; + flex-direction: column; + gap: 10px; + } + + .part-title { + padding-top: 30px; + color: var(--clr-text-alt); + font-weight: bold; + } +} +@media screen and (min-width: 768px) { + .main .row { + flex-direction: row; + } + body > * { + padding: 24px 64px; + } +} +.footer { + color: var(--clr-text-alt); + margin-top: auto; +} + +@keyframes loading { + 0% { + width: 20%; + transform: translateX(-100%); + } + 100% { + width: 100%; + transform: translateX(100%); + } +} diff --git a/public/css/listenmap.css b/public/css/listenmap.css new file mode 100644 index 0000000..790e997 --- /dev/null +++ b/public/css/listenmap.css @@ -0,0 +1,50 @@ +:root { + --logo: url("../assets/logo.svg"); +} + +@media (prefers-color-scheme: dark) { + :root { + --logo: url("../assets/logo_dark.svg"); + } +} +#tooltip { + display: none; + position: absolute; + background-color: var(--clr-bg-alt); + padding: 8px; + color: white; + border-radius: var(--border-radius); + border: 1px solid var(--clr-border); + transition-duration: 0s; +} + +main { + padding: 0; + gap: 0 !important; + border-bottom: 1px solid var(--clr-border); +} + +.header .header-logo { + height: 64px; +} + +body { + position: relative; + display: block; +} +body > *:not(main) { + padding: 8px 16px; +} +body > main { + position: relative; + padding: 0px; +} + +@media screen and (min-width: 768px) { + body > *:not(main) { + padding: 8px 64px; + } + body > main { + padding: 0px; + } +} diff --git a/public/css/listenmap.scss b/public/css/listenmap.scss new file mode 100644 index 0000000..cb4e3c0 --- /dev/null +++ b/public/css/listenmap.scss @@ -0,0 +1,49 @@ +:root { + --logo: url("../assets/logo.svg"); +} + +@media (prefers-color-scheme: dark) { + :root { + --logo: url("../assets/logo_dark.svg"); + } +} + +#tooltip { + display: none; + position: absolute; + background-color: var(--clr-bg-alt); + padding: 8px; + color: white; + border-radius: var(--border-radius); + border: 1px solid var(--clr-border); + transition-duration: 0s; +} +main { + padding: 0; + gap: 0 !important; + border-bottom: 1px solid var(--clr-border); +} + +.header .header-logo { + height: 64px; +} + +body { + position: relative; + display: block; + & > *:not(main) { + padding: 8px 16px; + } + & > main { + position: relative; + padding: 0px; + } +} +@media screen and (min-width: 768px) { + body > *:not(main) { + padding: 8px 64px; + } + body > main { + padding: 0px; + } +} diff --git a/public/css/theme.css b/public/css/theme.css new file mode 100644 index 0000000..85f60a5 --- /dev/null +++ b/public/css/theme.css @@ -0,0 +1,28 @@ +@import url("https://fonts.cdnfonts.com/css/hk-groteks"); +:root { + --font-listen: "HK Grotesk", sans-serif; + --clr-bg: #ffffff; + --clr-bg-alt: #e3e3e3; + --clr-border: #b5b5b5; + --clr-text: #212121; + --clr-text-alt: #999999; + --clr-red: #db0000; + --clr-red-alt: #fe2a2a; + --clr-blue: #0066ff; + --clr-blue-alt: #3785fb; + --clr-green: #12ca86; + --clr-orange: #ec6a13; + --border-radius: 8px; + --input-scheme: light; +} + +@media (prefers-color-scheme: dark) { + :root { + --clr-bg: hsl(255, 7%, 11%); + --clr-bg-alt: hsl(255, 5%, 16%); + --clr-border: hsl(240, 3%, 23%); + --clr-text: hsl(0, 0%, 100%); + --clr-text-alt: hsl(150, 1%, 56%); + --input-scheme: dark; + } +} diff --git a/public/css/theme.scss b/public/css/theme.scss new file mode 100644 index 0000000..e8eb07d --- /dev/null +++ b/public/css/theme.scss @@ -0,0 +1,38 @@ +@import url("https://fonts.cdnfonts.com/css/hk-groteks"); + +:root { + --font-listen: "HK Grotesk", sans-serif; + + --clr-bg: #ffffff; + --clr-bg-alt: #e3e3e3; + --clr-border: #b5b5b5; + + --clr-text: #212121; + --clr-text-alt: #999999; + + --clr-red: #db0000; + --clr-red-alt: #fe2a2a; + + --clr-blue: #0066ff; + --clr-blue-alt: #3785fb; + + --clr-green: #12ca86; + + --clr-orange: #ec6a13; + + --border-radius: 8px; + --input-scheme: light; +} + +@media (prefers-color-scheme: dark) { + :root { + --clr-bg: hsl(255, 7%, 11%); + --clr-bg-alt: hsl(255, 5%, 16%); + --clr-border: hsl(240, 3%, 23%); + + --clr-text: hsl(0, 0%, 100%); + --clr-text-alt: hsl(150, 1%, 56%); + + --input-scheme: dark; + } +} diff --git a/public/favicon.png b/public/favicon.png new file mode 100644 index 0000000000000000000000000000000000000000..c2b3ac1f6464faa897ec55e95115b950980e62b8 GIT binary patch literal 1694 zcmV;P24VS$P)5d>TSE(pPe5;ajb#)L?ME{JiZiI1(u01G#6L}PSA z1SBER2-F5OAu+|E5X+;5K4?2_=Y8Mz{+|EN41F*!@k>tc?Y-yz=R1%8{AUET2nHm5 z-~|cTLHC>KQHms4d7UL07Jy51?ISrQl%M^7kg*gQJ`w;K64t8FcVDtH$@?~(BspAN z(31sbFN@tZ;0s{Z_7%+dY%eRm+{-*wWL{inZc<-N?l9qjn4a4x<9bNkBqYaObrm1>EAL-{4;^O*O6 zyDNnmbrwc`20>2}J}30bdd!ZFpkx1OM2`(XOdBX!ITTAX5Z-xW@v_{Z^G>;T7C^4y z`3WpyD?PmeiY&q?l_0+V6!1t4Vs{+TSrek;hdSQd&%l02g>6|7*C(KMXb>~@0up5G z1g*b|3Us*oP?%?&=X?M)LS=lh2bta|6h(p{h@jk(ArJ9nJIu3#=t|45URw>bn5U#O z$f}06gMH91jH3qlZh5@AOXjEGL)6KWEqjnD0-ooGRLx=uk{F~teIe22*EE&97a)oxQkje-GPte}+qOf`MNx#RD&f7a zqb@3inYv4WLi!OJK&a%I!<@)NzeW*I<77O5$8;j6!~H8A8Wt)^Wt!AzNp3TASme2< zZ(eVxO@_kU$`TUi?jZ8}6ig$JV$q~%J81JXJn-&CNLMqIf&i*UQHUuGm*h6NZIQQE zG=UJ2$y*N?%pm^BC6u}~#9~qCk!Y9(Bg&9J@EF?P>W4gG!lSfcS+v=*VQZI($<9Vv z#1h_W+E#z0p`5vmo9}Ig_Gl;A-;+c_M?nu@$7E!;B;dAhf&Terc+W0}wY?jWs07LI z>#ohu6(J~Zz0LKMyk$D<-Y$qY3MhQK2iEd94;M_cYZ0+mK`##Z6rZp6rG&Rs>5I z5I;9UsVJcZWH|xWil&!PAZ+Y{*QP?eI1VN6E_m-!8l0`&VN~RsdB|C(m1Q9?Uf!)x z9X*b~okHiTgAMiaw~qqqS|qxkLo48YpyA-)8Y6J+H0;@*;FPYz_pDH??Ah=dP}eKX zTnM*m;JZXJgZ$WW*yc1GV+_sw;sk~pX_zx-kRJL50h1t08s%IM#Wilh$^1awPa-dj za+j18m~>)Z0>8N&tx#wCB9Xd%k`Mw4E0&OnK zn1yfNfap)62`+I0eT_8onQ{2`B=XrwcmY3b=C+m6zMDp+9DMgq_$r36TM9Env} zrs^3#TCq8ABx8)XlqQMkF^VC4Rx0=tFI2ltSd8)!7MY3~ogp6-Ve#1KiW zh19kc@s9PhOWJA~9|j-E%Bi0tP$7}RqKUW)vv3u5X#x?QQsK;6!Q#xeHakf|6>HCtami>P?P=f|BS oy{Pf?9Oa+qzmS})R(Ui03$oLj0!cIkDF6Tf07*qoM6N<$f_uFlXaE2J literal 0 HcmV?d00001 diff --git a/public/listenbourg.ico b/public/listenbourg.ico deleted file mode 100644 index 386d12cfa619c9a37ac5f169efdcf637662abfff..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 270398 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 z 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%0A_5WIC{Xc4YV84PoP0!v7EGvRpoYJK^jbpY~ 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 p0ww{IfJwk4U=lD1m;_7$CIORxNx&pv5- - - + - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + - - - - - - - - - - - - - - - - - - + - - - + + + + - - - - - - + + + + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + - - + + - - - + - - - + - - - + + + + + - - - - - + + + + + + + + + + + + + + + + + + + + + + - - + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/src/assets/regions.json b/src/assets/regions.json deleted file mode 100644 index 5da4c3b..0000000 --- a/src/assets/regions.json +++ /dev/null @@ -1,62 +0,0 @@ -{ - "Flußerde": { - "color": "#d17dd4", - "departments": [ - [26, "Frinterland"], - [27, "Jesusarh"], - [28, "Fisherein"], - [29, "Maarland"], - [30, "Centiertflußland"], - [31, "Talwortes"], - [32, "Kanalerde"] - ] - }, - "Kusterde": { - "color": "#30c968", - "departments": [ - [22, "Auseburg"], - [23, "Mornland"], - [24, "Wasserland"], - [25, "Kleinland"], - [33, "Virgolkust"], - [34, "Bachßland"], - [35, "Strander"] - ] - }, - "Mitteland": { - "color": "#ccfa78", - "departments": [ - [1, "Äußeres Galizien"], - [2, "Geldland"], - [3, "Oliveweißland"], - [4, "Chrüterkraft"], - [5, "Missbalder"], - [6, "Centürland"], - [7, "Herkunftland"], - [8, "Langerde"], - [9, "Siegesschlucht"], - [10, "Aschenbach"], - [11, "Serishluss"], - [12, "Lichtenland"], - [13, "Achlußluss"] - ] - }, - "Caséière": { - "color": "#3b8dc4", - "departments": [ - [14, "Carmenle"], - [15, "Franquette"], - [16, "Portaière"] - ] - }, - "Adriàs": { - "color": "#eb4034", - "departments": [ - [17, "Adriàs Norte"], - [18, "Adriàs Sur"], - [19, "La pequeña"], - [20, "Ardentia"], - [21, "Llamas Costilla"] - ] - } -} \ No newline at end of file diff --git a/src/assets/style.css b/src/assets/style.css deleted file mode 100644 index be08888..0000000 --- a/src/assets/style.css +++ /dev/null @@ -1,93 +0,0 @@ -:root { - --header-height: 80px; -} - -@media (max-width: 600px) { - :root { - --header-height: 40px; - } -} - -html, body, #app { - width: 100vw; - height: 100vh; - padding: 0; - margin: 0; - overflow: hidden; - font-family: "HK Grotesk", sans-serif; -} - -#app { - display: flex; - flex-direction: column; -} - -header { - background-color: rgba(255, 255, 255, .4); - border-bottom: 1px solid #ebebeb; - height: var(--header-height); - display: flex; - justify-content: space-between; - align-items: center; - padding: 0 20px; - box-shadow: 0 0 10px rgba(0, 0, 0, .1); - z-index: 1; -} - -.header-title { - display: flex; - align-items: center; - user-select: none; -} - -.header-title iconify-icon, .header-buttons iconify-icon { - font-size: 2.5em; -} - -h1 { - font-size: 2.5em; - margin: 5px; -} - -/* smaller title on mobile */ -@media (max-width: 600px) { - .header-title iconify-icon, .header-buttons iconify-icon { - font-size: 1em; - } - - h1 { - font-size: 1em; - } -} - -.header-buttons * { - color: black; -} - -.svg-wrapper { - user-select: none; - -webkit-user-select: none; - flex: 1; - height: calc(100% - var(--header-height)); - position: relative; - text-align: center; -} - -.region-name { - position: absolute; - font-size: 1.3em; - margin: 0; - padding: 3px 12px; - background-color: rgba(0, 0, 0, .6); - color: white; - user-select: none; - border-radius: 8px; - pointer-events: none; - display: none; -} - -object { - width: 100%; - height: 100%; - background-color: #b6d9f0; -} diff --git a/src/color.ts b/src/color.ts deleted file mode 100644 index 7d0bc5c..0000000 --- a/src/color.ts +++ /dev/null @@ -1,22 +0,0 @@ -/** - * Returns a lightened color - * @param color A color in the format #RRGGBB - */ -export function lighten(color: string): string { - let r = Math.min( - 255, - Math.round(parseInt(color.substring(1, 3), 16) * 1.2) - ).toString(16); - let g = Math.min( - 255, - Math.round(parseInt(color.substring(3, 5), 16) * 1.2) - ).toString(16); - let b = Math.min( - 255, - Math.round(parseInt(color.substring(5, 7), 16) * 1.2) - ).toString(16); - r = r.length == 1 ? "0" + r : r; - g = g.length == 1 ? "0" + g : g; - b = b.length == 1 ? "0" + b : b; - return "#" + r + g + b; -} diff --git a/src/index.ts b/src/index.ts new file mode 100644 index 0000000..e86613f --- /dev/null +++ b/src/index.ts @@ -0,0 +1,62 @@ +import svgPanZoom from "./svg-pan-zoom/svg-pan-zoom"; +import Tooltip from "./tooltip"; + +window.addEventListener("load", async () => { + const SVG_OBJECT = document.querySelector( + "#listenmap-svg" + ) as HTMLObjectElement; + const resizeHeight = () => + (SVG_OBJECT.style.height = + document.body.clientHeight - + (document.querySelector("header")?.scrollHeight || 0) - + 1 - + (document.querySelector("footer")?.scrollHeight || 0) - + 1 + + "px"); + + await sleep(150); + + const SVG_ELEM = SVG_OBJECT.contentDocument + ?.documentElement as unknown as SVGSVGElement; + await sleep(50); + const { setTooltip, hideTooltip } = Tooltip( + SVG_OBJECT, + document.querySelector("#tooltip") as HTMLDivElement + ); + const map = svgPanZoom(SVG_OBJECT, { + zoomEnabled: true, + controlIconsEnabled: false, + preventMouseEventsDefault: false, + fit: 1, + center: 1, + zoomScaleSensitivity: 0.3, + minZoom: 0.75, + maxZoom: 6, + }); + resizeHeight(); + SVG_ELEM.addEventListener("mousemove", (e: any) => { + const region = (e.path as SVGElement[]).find((el) => + el?.classList?.contains("region") + ); + const regionName = region?.getAttribute("data-region-name") || ""; + const depart = (e.path as SVGElement[]).find((el) => + el?.classList?.contains("depart") + ); + const departName = depart?.getAttribute("data-depart-name") || ""; + region + ? setTooltip(e, `${depart?.id} ${departName} (${regionName})`) + : hideTooltip(); + }); + resizeHeight(); + map.resize(); + map.fit(); + map.center(); + window.addEventListener("resize", () => { + resizeHeight(); + map.resize(); + map.fit(); + map.center(); + }); +}); + +const sleep = (ms: number) => new Promise((resolve) => setTimeout(resolve, ms)); diff --git a/src/main.ts b/src/main.ts deleted file mode 100644 index 2b37e6f..0000000 --- a/src/main.ts +++ /dev/null @@ -1,186 +0,0 @@ -import Tooltip from "./tooltip"; -import { lighten } from "./color"; -import { - regionData, - RegionName, - getRegionPaths, - getRegionColor, - getDepartmentName, - getRegionByDepartment, -} from "./regions"; - -import "./assets/style.css"; -import map from "./assets/map_monochrome.svg"; - -const app = document.getElementById("app") as HTMLDivElement; -app.innerHTML = /* html */ ` -
-

- -

ListenMaps

-
-
-