diff --git a/.storybook/main.js b/.storybook/main.js
index 460397c2..3aa2ca8e 100644
--- a/.storybook/main.js
+++ b/.storybook/main.js
@@ -4,7 +4,7 @@ import remarkGfm from 'remark-gfm';
export default {
stories: [
'../docs/src/**/*.mdx',
- '../oereb_client/**/*.stories.@(js|jsx|ts|tsx|mdx)',
+ '../oereb_client/**/*.@(mdx|stories.@(js|jsx|ts|tsx))',
],
addons: [
"@storybook/addon-links",
diff --git a/CHANGELOG.rst b/CHANGELOG.rst
index ee76de1e..8cca327f 100644
--- a/CHANGELOG.rst
+++ b/CHANGELOG.rst
@@ -6,6 +6,7 @@ Changelog
https://github.com/openoereb/oereb_client/milestone/17
+- Include Matomo JavaScript Client
- Dependency updates
2.1.3
diff --git a/docs/src/Configuration.mdx b/docs/src/Configuration.mdx
index 9995575c..379da515 100644
--- a/docs/src/Configuration.mdx
+++ b/docs/src/Configuration.mdx
@@ -304,6 +304,12 @@ oereb_client:
# parameter undefined to disable Google Analytics.
google_analytics: UA-12345678-9
+ # [OPTIONAL] Enable Matomo tracking by specifying matomo URL and site ID. Leave this
+ # parameter undefined to disable Matomo.
+ matomo:
+ url: https://matomo.example.com
+ id: 1
+
# [OPTIONAL] The mask_surrounding layer can be used to lay a mask (half-transparent
# white layer) on the surrounding cantons. You have to define a WMS URL and
# params according to the ol.source.ImageWMS documentation:
diff --git a/oereb_client/static/src/component/app/app.jsx b/oereb_client/static/src/component/app/app.jsx
index 41bed0f7..3ff6533a 100644
--- a/oereb_client/static/src/component/app/app.jsx
+++ b/oereb_client/static/src/component/app/app.jsx
@@ -1,6 +1,6 @@
import {isString} from 'lodash';
import PropTypes from 'prop-types';
-import React from 'react';
+import React, {useEffect} from 'react';
import {useDispatch} from 'react-redux';
import {initAvailability, setAvailabilityPrefix} from '../../reducer/availability';
@@ -15,6 +15,7 @@ import OerebInformationPanel from '../information_panel/information_panel';
import OerebMap from '../map/map';
import OerebMenu from '../menu/menu';
import OerebMessage from '../message/message';
+import MatomoTracker from '../matomo_tracker/matomo_tracker';
const App = function (props) {
const dispatch = useDispatch();
@@ -67,6 +68,11 @@ const App = function (props) {
});
}
+ let tracker = null;
+ if (config['matomo'] && config['matomo']['url'] && config['matomo']['site_id']) {
+ tracker =
String
| The URL of the Matomo instance. |
+| siteId | Number
| The ID of the Site configured in Matomo. |
\ No newline at end of file
diff --git a/oereb_client/static/src/reducer/accordion.mdx b/oereb_client/static/src/reducer/accordion.mdx
deleted file mode 100644
index a869b779..00000000
--- a/oereb_client/static/src/reducer/accordion.mdx
+++ /dev/null
@@ -1,27 +0,0 @@
-import {createSlice} from "@reduxjs/toolkit";
-
-export const accordionSlice = createSlice({
- name: 'accordion',
- initialState: {
- category: null,
- topic: null,
- viewServices: [],
- callback: null
- },
- reducers: {
- setActiveCategory: (state, action) => {
- state.category = action.payload;
- },
- setActiveTopic: (state, action) => {
- state.topic = action.payload;
- },
- setViewServices: (state, action) => {
- state.viewServices = action.payload.viewServices;
- state.callback = action.payload.callback;
- }
- }
-});
-
-export const {setActiveCategory, setActiveTopic, setViewServices} = accordionSlice.actions;
-
-export default accordionSlice.reducer;
diff --git a/oereb_client/static/src/reducer/availability.mdx b/oereb_client/static/src/reducer/availability.mdx
deleted file mode 100644
index a8f8596c..00000000
--- a/oereb_client/static/src/reducer/availability.mdx
+++ /dev/null
@@ -1,35 +0,0 @@
-import {createSlice} from "@reduxjs/toolkit";
-import {isBoolean, isString} from "lodash";
-
-export const availabilitySlice = createSlice({
- name: 'availability',
- initialState: {
- key: 'OerebAvailability',
- visible: true
- },
- reducers: {
- setAvailabilityPrefix: (state, action) => {
- state.key = action.payload + 'OerebAvailability';
- },
- initAvailability: (state) => {
- const availability = localStorage.getItem(state.key);
- if (isBoolean(availability)) {
- state.visible = availability;
- }
- else if (isString(availability)) {
- state.visible = JSON.parse(availability);
- }
- else {
- state.visible = true;
- }
- },
- showAvailability: (state, action) => {
- state.visible = action.payload;
- localStorage.setItem(state.key, state.visible);
- }
- }
-});
-
-export const {setAvailabilityPrefix, initAvailability, showAvailability} = availabilitySlice.actions;
-
-export default availabilitySlice.reducer;
diff --git a/oereb_client/static/src/reducer/config.mdx b/oereb_client/static/src/reducer/config.mdx
deleted file mode 100644
index e200359f..00000000
--- a/oereb_client/static/src/reducer/config.mdx
+++ /dev/null
@@ -1,17 +0,0 @@
-import {createSlice} from "@reduxjs/toolkit";
-
-export const configSlice = createSlice({
- name: 'config',
- initialState: {
- config: {}
- },
- reducers: {
- update: (state, action) => {
- state.config = action.payload;
- }
- }
-});
-
-export const {update} = configSlice.actions;
-
-export default configSlice.reducer;
diff --git a/oereb_client/static/src/reducer/extract.mdx b/oereb_client/static/src/reducer/extract.mdx
deleted file mode 100644
index 4146f92f..00000000
--- a/oereb_client/static/src/reducer/extract.mdx
+++ /dev/null
@@ -1,122 +0,0 @@
-import {createSlice} from "@reduxjs/toolkit";
-
-export const extractSlice = createSlice({
- name: 'extract',
- initialState: {
- loading: false,
- zoom: false,
- visible: false,
- collapsed: false,
- error: false,
- egrid: null,
- identdn: null,
- number: null,
- information: false,
- tab: 0,
- data: {},
- highlight: true,
- background: true
- },
- reducers: {
- loadExtract: (state, action) => {
- if (!state.loading) {
- state.loading = true;
- state.visible = false;
- state.collapsed = false;
- state.error = false;
- state.information = false;
- state.tab = 0;
- state.egrid = action.payload.egrid;
- state.identdn = action.payload.identdn;
- state.number = action.payload.number;
- state.zoom = action.payload.zoom;
- state.data = {};
- const query = new URLSearchParams(window.location.search);
- if (state.egrid !== null) {
- query.set('egrid', state.egrid);
- }
- else if (state.identdn !== null && state.number !== null) {
- query.set('identdn', state.identdn);
- query.set('number', state.number);
- }
- window.history.pushState(null, null, '?' + query.toString());
- }
- },
- showExtract: (state, action) => {
- state.loading = false;
- state.visible = true;
- state.collapsed = false;
- state.error = false;
- state.information = false;
- state.highlight = true;
- state.background = true;
- state.tab = 0;
- state.data = action.payload;
- },
- showError: (state) => {
- state.loading = false;
- state.zoom = false;
- state.visible = false;
- state.collapsed = false;
- state.error = true;
- state.information = false;
- state.tab = 0;
- state.data = {};
- const query = new URLSearchParams(window.location.search);
- query.delete('egrid');
- query.delete('identdn');
- query.delete('number');
- window.history.pushState(null, null, '?' + query.toString());
- },
- hideExtract: (state) => {
- state.loading = false;
- state.zoom = false;
- state.visible = false;
- state.collapsed = false;
- state.error = false;
- state.egrid = null;
- state.identdn = null;
- state.number = null;
- state.information = false;
- state.tab = 0;
- state.data = {};
- const query = new URLSearchParams(window.location.search);
- query.delete('egrid');
- query.delete('identdn');
- query.delete('number');
- window.history.pushState(null, null, '?' + query.toString());
- },
- toggleCollapsed: (state) => {
- state.collapsed = !state.collapsed;
- },
- toggleHighlight: (state) => {
- state.highlight = !state.highlight;
- },
- toggleBackground: (state) => {
- state.background = !state.background;
- },
- toggleInformationPanel: (state) => {
- state.information = !state.information;
- if (state.information) {
- state.tab = 0;
- }
- },
- setInformationPanelTab: (state, action) => {
- state.tab = action.payload;
- }
- }
-});
-
-export const {
- loadExtract,
- showExtract,
- showError,
- hideExtract,
- toggleCollapsed,
- toggleHighlight,
- toggleBackground,
- toggleInformationPanel,
- setInformationPanelTab
-} = extractSlice.actions;
-
-export default extractSlice.reducer;
diff --git a/oereb_client/static/src/reducer/history.mdx b/oereb_client/static/src/reducer/history.mdx
deleted file mode 100644
index cb5d30dc..00000000
--- a/oereb_client/static/src/reducer/history.mdx
+++ /dev/null
@@ -1,49 +0,0 @@
-import {createSlice} from "@reduxjs/toolkit";
-import {isEqual} from "lodash";
-
-export const historySlice = createSlice({
- name: 'history',
- initialState: {
- key: 'OerebHistory',
- elements: []
- },
- reducers: {
- setHistoryPrefix: (state, action) => {
- state.key = action.payload + 'OerebHistory';
- },
- initHistory: (state) => {
- const history = localStorage.getItem(state.key);
- if (history) {
- state.elements = JSON.parse(history);
- }
- else {
- state.elements = [];
- }
- },
- updateHistory: (state, action) => {
- const extract = action.payload;
- const realEstate = extract['GetExtractByIdResponse']['extract']['RealEstate'];
- const newElement = {
- EGRID: realEstate['EGRID'],
- IdentDN: realEstate['IdentDN'],
- Municipality: realEstate['MunicipalityName'],
- Number: realEstate['Number']
- };
- for (let i = 0; i < state.elements.length; i++) {
- if (isEqual(newElement, state.elements[i])) {
- state.elements.splice(i, 1);
- break;
- }
- }
- if (state.elements.length > 4) {
- state.elements.splice(0, 1);
- }
- state.elements.push(newElement);
- localStorage.setItem(state.key, JSON.stringify(state.elements));
- }
- }
-});
-
-export const {setHistoryPrefix, initHistory, updateHistory} = historySlice.actions;
-
-export default historySlice.reducer;
diff --git a/oereb_client/static/src/reducer/language.mdx b/oereb_client/static/src/reducer/language.mdx
deleted file mode 100644
index 8f45f834..00000000
--- a/oereb_client/static/src/reducer/language.mdx
+++ /dev/null
@@ -1,41 +0,0 @@
-import {createSlice} from "@reduxjs/toolkit";
-
-import i18n from "../i18n";
-
-export const languageSlice = createSlice({
- name: 'language',
- initialState: {
- current: null,
- default: null,
- available: []
- },
- reducers: {
- initLanguages: (state, action) => {
- state.default = action.payload.default;
- state.available = action.payload.available;
- const query = new URLSearchParams(window.location.search);
- if (query.has('lang') && state.available.indexOf(query.get('lang')) > -1) {
- state.current = query.get('lang');
- }
- else {
- state.current = state.default;
- }
- i18n.changeLanguage(state.current);
- query.set('lang', state.current);
- window.history.pushState(null, null, '?' + query.toString());
- },
- setLanguage: (state, action) => {
- if (state.available.indexOf(action.payload) > -1) {
- state.current = action.payload;
- i18n.changeLanguage(state.current);
- const query = new URLSearchParams(window.location.search);
- query.set('lang', state.current);
- window.history.pushState(null, null, '?' + query.toString());
- }
- }
- }
-});
-
-export const {initLanguages, setLanguage} = languageSlice.actions;
-
-export default languageSlice.reducer;
diff --git a/oereb_client/static/src/reducer/map.mdx b/oereb_client/static/src/reducer/map.mdx
deleted file mode 100644
index 7c0aa44b..00000000
--- a/oereb_client/static/src/reducer/map.mdx
+++ /dev/null
@@ -1,21 +0,0 @@
-import {createSlice} from "@reduxjs/toolkit";
-
-export const mapSlice = createSlice({
- name: 'map',
- initialState: {
- map: null,
- topicLayers: null,
- baseLayer: null
- },
- reducers: {
- initMap: (state, action) => {
- state.map = action.payload.map;
- state.topicLayers = action.payload.topicLayers;
- state.baseLayer = action.payload.baseLayer;
- }
- }
-});
-
-export const {initMap} = mapSlice.actions;
-
-export default mapSlice.reducer;
diff --git a/oereb_client/static/src/reducer/map_query.mdx b/oereb_client/static/src/reducer/map_query.mdx
deleted file mode 100644
index b2cf9f23..00000000
--- a/oereb_client/static/src/reducer/map_query.mdx
+++ /dev/null
@@ -1,36 +0,0 @@
-import {createSlice} from "@reduxjs/toolkit";
-
-export const mapQuerySlice = createSlice({
- name: 'mapQuery',
- initialState: {
- loading: false,
- visible: false,
- posX: 0.0,
- posY: 0.0,
- results: []
- },
- reducers: {
- loadAt: (state, action) => {
- if (!state.loading) {
- state.loading = true;
- state.visible = false;
- state.posX = action.payload.posX;
- state.posY = action.payload.posY;
- state.results = [];
- }
- },
- show: (state, action) => {
- state.loading = false;
- state.visible = true;
- state.results = action.payload.results;
- },
- hide: (state) => {
- state.loading = false;
- state.visible = false;
- }
- }
-});
-
-export const {loadAt, show, hide} = mapQuerySlice.actions;
-
-export default mapQuerySlice.reducer;
diff --git a/oereb_client/static/src/reducer/message.mdx b/oereb_client/static/src/reducer/message.mdx
deleted file mode 100644
index 23f6fe58..00000000
--- a/oereb_client/static/src/reducer/message.mdx
+++ /dev/null
@@ -1,59 +0,0 @@
-import {createSlice} from "@reduxjs/toolkit";
-import {v4 as uuidv4} from "uuid";
-
-export const MESSAGE_TIMEOUT = 10000;
-
-export const messageSlice = createSlice({
- name: 'message',
- initialState: {
- messages: []
- },
- reducers: {
- warning: (state, action) => {
- state.messages.push({
- id: uuidv4(),
- type: 'warning',
- text: action.payload,
- timestamp: Date.now()
- });
- },
- error: (state, action) => {
- state.messages.push({
- id: uuidv4(),
- type: 'error',
- text: action.payload,
- timestamp: Date.now()
- });
- },
- cleanMessages: (state) => {
- for (let i = state.messages.length; i > 0; i--) {
- const now = Date.now();
- if (now - state.messages[i - 1].timestamp >= MESSAGE_TIMEOUT) {
- state.messages.splice(i - 1, 1);
- }
- }
- }
- }
-});
-
-export const {cleanMessages, error, warning} = messageSlice.actions;
-
-export const showWarning = function(text) {
- return function(dispatch) {
- dispatch(warning(text));
- setTimeout(() => {
- dispatch(cleanMessages());
- }, MESSAGE_TIMEOUT);
- }
-}
-
-export const showError = function(text) {
- return function(dispatch) {
- dispatch(error(text));
- setTimeout(() => {
- dispatch(cleanMessages());
- }, MESSAGE_TIMEOUT);
- }
-}
-
-export default messageSlice.reducer;
diff --git a/oereb_client/static/src/reducer/symbol_zoom.mdx b/oereb_client/static/src/reducer/symbol_zoom.mdx
deleted file mode 100644
index 5fd5525e..00000000
--- a/oereb_client/static/src/reducer/symbol_zoom.mdx
+++ /dev/null
@@ -1,35 +0,0 @@
-import {createSlice} from "@reduxjs/toolkit";
-import {isBoolean, isString} from "lodash";
-
-export const symbolZoomSlice = createSlice({
- name: 'symbolZoom',
- initialState: {
- key: 'OerebSymbolZoom',
- enabled: true
- },
- reducers: {
- setSymbolZoomPrefix: (state, action) => {
- state.key = action.payload + 'OerebSymbolZoom';
- },
- initSymbolZoom: (state) => {
- const enabled = localStorage.getItem(state.key);
- if (isBoolean(enabled)) {
- state.enabled = enabled;
- }
- else if (isString(enabled)) {
- state.enabled = JSON.parse(enabled);
- }
- else {
- state.enabled = true;
- }
- },
- enableSymbolZoom: (state, action) => {
- state.enabled = action.payload;
- localStorage.setItem(state.key, state.enabled);
- }
- }
-});
-
-export const {setSymbolZoomPrefix, initSymbolZoom, enableSymbolZoom} = symbolZoomSlice.actions;
-
-export default symbolZoomSlice.reducer;
diff --git a/oereb_client/views/index.py b/oereb_client/views/index.py
index 0979bbd6..d403e39c 100644
--- a/oereb_client/views/index.py
+++ b/oereb_client/views/index.py
@@ -195,7 +195,8 @@ def get_config(self):
'use_tile_wms': self.config_.get('use_tile_wms', False),
'show_scale_bar': self.config_.get('show_scale_bar', False),
'extract_json_timeout': self.config_.get('extract_json_timeout', 60),
- 'extract_pdf_timeout': self.config_.get('extract_pdf_timeout', 120)
+ 'extract_pdf_timeout': self.config_.get('extract_pdf_timeout', 120),
+ 'matomo': self.config_.get('matomo', {})
}
def get_title(self):
diff --git a/package-lock.json b/package-lock.json
index 0fa8b5f0..c2902294 100644
--- a/package-lock.json
+++ b/package-lock.json
@@ -2827,17 +2827,6 @@
"node": ">=6.0.0"
}
},
- "node_modules/@jridgewell/source-map": {
- "version": "0.3.6",
- "resolved": "https://registry.npmjs.org/@jridgewell/source-map/-/source-map-0.3.6.tgz",
- "integrity": "sha512-1ZJTZebgqllO79ue2bm3rIGud/bOe0pP5BjSRCRxxYkEZS8STV7zN84UBbiYu7jy+eCKSnVIUgoWWE/tt+shMQ==",
- "dev": true,
- "peer": true,
- "dependencies": {
- "@jridgewell/gen-mapping": "^0.3.5",
- "@jridgewell/trace-mapping": "^0.3.25"
- }
- },
"node_modules/@jridgewell/sourcemap-codec": {
"version": "1.4.15",
"resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.15.tgz",
@@ -4111,28 +4100,6 @@
"integrity": "sha512-AjwI4MvWx3HAOaZqYsjKWyEObT9lcVV0Y0V8nXo6cXzN8ZiMxVhf6F3d/UNvXVGKrEzL/Dluc5p+y9GkzlTWig==",
"dev": true
},
- "node_modules/@types/eslint": {
- "version": "9.6.0",
- "resolved": "https://registry.npmjs.org/@types/eslint/-/eslint-9.6.0.tgz",
- "integrity": "sha512-gi6WQJ7cHRgZxtkQEoyHMppPjq9Kxo5Tjn2prSKDSmZrCz8TZ3jSRCeTJm+WoM+oB0WG37bRqLzaaU3q7JypGg==",
- "dev": true,
- "peer": true,
- "dependencies": {
- "@types/estree": "*",
- "@types/json-schema": "*"
- }
- },
- "node_modules/@types/eslint-scope": {
- "version": "3.7.7",
- "resolved": "https://registry.npmjs.org/@types/eslint-scope/-/eslint-scope-3.7.7.tgz",
- "integrity": "sha512-MzMFlSLBqNF2gcHWO0G1vP/YQyfvrxZ0bF+u7mzUdZ1/xK4A4sru+nraZz5i3iEIk1l1uyicaDVTB4QbbEkAYg==",
- "dev": true,
- "peer": true,
- "dependencies": {
- "@types/eslint": "*",
- "@types/estree": "*"
- }
- },
"node_modules/@types/estree": {
"version": "0.0.51",
"resolved": "https://registry.npmjs.org/@types/estree/-/estree-0.0.51.tgz",
@@ -4550,181 +4517,6 @@
"url": "https://opencollective.com/vitest"
}
},
- "node_modules/@webassemblyjs/ast": {
- "version": "1.12.1",
- "resolved": "https://registry.npmjs.org/@webassemblyjs/ast/-/ast-1.12.1.tgz",
- "integrity": "sha512-EKfMUOPRRUTy5UII4qJDGPpqfwjOmZ5jeGFwid9mnoqIFK+e0vqoi1qH56JpmZSzEL53jKnNzScdmftJyG5xWg==",
- "dev": true,
- "peer": true,
- "dependencies": {
- "@webassemblyjs/helper-numbers": "1.11.6",
- "@webassemblyjs/helper-wasm-bytecode": "1.11.6"
- }
- },
- "node_modules/@webassemblyjs/floating-point-hex-parser": {
- "version": "1.11.6",
- "resolved": "https://registry.npmjs.org/@webassemblyjs/floating-point-hex-parser/-/floating-point-hex-parser-1.11.6.tgz",
- "integrity": "sha512-ejAj9hfRJ2XMsNHk/v6Fu2dGS+i4UaXBXGemOfQ/JfQ6mdQg/WXtwleQRLLS4OvfDhv8rYnVwH27YJLMyYsxhw==",
- "dev": true,
- "peer": true
- },
- "node_modules/@webassemblyjs/helper-api-error": {
- "version": "1.11.6",
- "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-api-error/-/helper-api-error-1.11.6.tgz",
- "integrity": "sha512-o0YkoP4pVu4rN8aTJgAyj9hC2Sv5UlkzCHhxqWj8butaLvnpdc2jOwh4ewE6CX0txSfLn/UYaV/pheS2Txg//Q==",
- "dev": true,
- "peer": true
- },
- "node_modules/@webassemblyjs/helper-buffer": {
- "version": "1.12.1",
- "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-buffer/-/helper-buffer-1.12.1.tgz",
- "integrity": "sha512-nzJwQw99DNDKr9BVCOZcLuJJUlqkJh+kVzVl6Fmq/tI5ZtEyWT1KZMyOXltXLZJmDtvLCDgwsyrkohEtopTXCw==",
- "dev": true,
- "peer": true
- },
- "node_modules/@webassemblyjs/helper-numbers": {
- "version": "1.11.6",
- "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-numbers/-/helper-numbers-1.11.6.tgz",
- "integrity": "sha512-vUIhZ8LZoIWHBohiEObxVm6hwP034jwmc9kuq5GdHZH0wiLVLIPcMCdpJzG4C11cHoQ25TFIQj9kaVADVX7N3g==",
- "dev": true,
- "peer": true,
- "dependencies": {
- "@webassemblyjs/floating-point-hex-parser": "1.11.6",
- "@webassemblyjs/helper-api-error": "1.11.6",
- "@xtuc/long": "4.2.2"
- }
- },
- "node_modules/@webassemblyjs/helper-wasm-bytecode": {
- "version": "1.11.6",
- "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-bytecode/-/helper-wasm-bytecode-1.11.6.tgz",
- "integrity": "sha512-sFFHKwcmBprO9e7Icf0+gddyWYDViL8bpPjJJl0WHxCdETktXdmtWLGVzoHbqUcY4Be1LkNfwTmXOJUFZYSJdA==",
- "dev": true,
- "peer": true
- },
- "node_modules/@webassemblyjs/helper-wasm-section": {
- "version": "1.12.1",
- "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-section/-/helper-wasm-section-1.12.1.tgz",
- "integrity": "sha512-Jif4vfB6FJlUlSbgEMHUyk1j234GTNG9dBJ4XJdOySoj518Xj0oGsNi59cUQF4RRMS9ouBUxDDdyBVfPTypa5g==",
- "dev": true,
- "peer": true,
- "dependencies": {
- "@webassemblyjs/ast": "1.12.1",
- "@webassemblyjs/helper-buffer": "1.12.1",
- "@webassemblyjs/helper-wasm-bytecode": "1.11.6",
- "@webassemblyjs/wasm-gen": "1.12.1"
- }
- },
- "node_modules/@webassemblyjs/ieee754": {
- "version": "1.11.6",
- "resolved": "https://registry.npmjs.org/@webassemblyjs/ieee754/-/ieee754-1.11.6.tgz",
- "integrity": "sha512-LM4p2csPNvbij6U1f19v6WR56QZ8JcHg3QIJTlSwzFcmx6WSORicYj6I63f9yU1kEUtrpG+kjkiIAkevHpDXrg==",
- "dev": true,
- "peer": true,
- "dependencies": {
- "@xtuc/ieee754": "^1.2.0"
- }
- },
- "node_modules/@webassemblyjs/leb128": {
- "version": "1.11.6",
- "resolved": "https://registry.npmjs.org/@webassemblyjs/leb128/-/leb128-1.11.6.tgz",
- "integrity": "sha512-m7a0FhE67DQXgouf1tbN5XQcdWoNgaAuoULHIfGFIEVKA6tu/edls6XnIlkmS6FrXAquJRPni3ZZKjw6FSPjPQ==",
- "dev": true,
- "peer": true,
- "dependencies": {
- "@xtuc/long": "4.2.2"
- }
- },
- "node_modules/@webassemblyjs/utf8": {
- "version": "1.11.6",
- "resolved": "https://registry.npmjs.org/@webassemblyjs/utf8/-/utf8-1.11.6.tgz",
- "integrity": "sha512-vtXf2wTQ3+up9Zsg8sa2yWiQpzSsMyXj0qViVP6xKGCUT8p8YJ6HqI7l5eCnWx1T/FYdsv07HQs2wTFbbof/RA==",
- "dev": true,
- "peer": true
- },
- "node_modules/@webassemblyjs/wasm-edit": {
- "version": "1.12.1",
- "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-edit/-/wasm-edit-1.12.1.tgz",
- "integrity": "sha512-1DuwbVvADvS5mGnXbE+c9NfA8QRcZ6iKquqjjmR10k6o+zzsRVesil54DKexiowcFCPdr/Q0qaMgB01+SQ1u6g==",
- "dev": true,
- "peer": true,
- "dependencies": {
- "@webassemblyjs/ast": "1.12.1",
- "@webassemblyjs/helper-buffer": "1.12.1",
- "@webassemblyjs/helper-wasm-bytecode": "1.11.6",
- "@webassemblyjs/helper-wasm-section": "1.12.1",
- "@webassemblyjs/wasm-gen": "1.12.1",
- "@webassemblyjs/wasm-opt": "1.12.1",
- "@webassemblyjs/wasm-parser": "1.12.1",
- "@webassemblyjs/wast-printer": "1.12.1"
- }
- },
- "node_modules/@webassemblyjs/wasm-gen": {
- "version": "1.12.1",
- "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-gen/-/wasm-gen-1.12.1.tgz",
- "integrity": "sha512-TDq4Ojh9fcohAw6OIMXqiIcTq5KUXTGRkVxbSo1hQnSy6lAM5GSdfwWeSxpAo0YzgsgF182E/U0mDNhuA0tW7w==",
- "dev": true,
- "peer": true,
- "dependencies": {
- "@webassemblyjs/ast": "1.12.1",
- "@webassemblyjs/helper-wasm-bytecode": "1.11.6",
- "@webassemblyjs/ieee754": "1.11.6",
- "@webassemblyjs/leb128": "1.11.6",
- "@webassemblyjs/utf8": "1.11.6"
- }
- },
- "node_modules/@webassemblyjs/wasm-opt": {
- "version": "1.12.1",
- "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-opt/-/wasm-opt-1.12.1.tgz",
- "integrity": "sha512-Jg99j/2gG2iaz3hijw857AVYekZe2SAskcqlWIZXjji5WStnOpVoat3gQfT/Q5tb2djnCjBtMocY/Su1GfxPBg==",
- "dev": true,
- "peer": true,
- "dependencies": {
- "@webassemblyjs/ast": "1.12.1",
- "@webassemblyjs/helper-buffer": "1.12.1",
- "@webassemblyjs/wasm-gen": "1.12.1",
- "@webassemblyjs/wasm-parser": "1.12.1"
- }
- },
- "node_modules/@webassemblyjs/wasm-parser": {
- "version": "1.12.1",
- "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-parser/-/wasm-parser-1.12.1.tgz",
- "integrity": "sha512-xikIi7c2FHXysxXe3COrVUPSheuBtpcfhbpFj4gmu7KRLYOzANztwUU0IbsqvMqzuNK2+glRGWCEqZo1WCLyAQ==",
- "dev": true,
- "peer": true,
- "dependencies": {
- "@webassemblyjs/ast": "1.12.1",
- "@webassemblyjs/helper-api-error": "1.11.6",
- "@webassemblyjs/helper-wasm-bytecode": "1.11.6",
- "@webassemblyjs/ieee754": "1.11.6",
- "@webassemblyjs/leb128": "1.11.6",
- "@webassemblyjs/utf8": "1.11.6"
- }
- },
- "node_modules/@webassemblyjs/wast-printer": {
- "version": "1.12.1",
- "resolved": "https://registry.npmjs.org/@webassemblyjs/wast-printer/-/wast-printer-1.12.1.tgz",
- "integrity": "sha512-+X4WAlOisVWQMikjbcvY2e0rwPsKQ9F688lksZhBcPycBBuii3O7m8FACbDMWDojpAqvjIncrG8J0XHKyQfVeA==",
- "dev": true,
- "peer": true,
- "dependencies": {
- "@webassemblyjs/ast": "1.12.1",
- "@xtuc/long": "4.2.2"
- }
- },
- "node_modules/@xtuc/ieee754": {
- "version": "1.2.0",
- "resolved": "https://registry.npmjs.org/@xtuc/ieee754/-/ieee754-1.2.0.tgz",
- "integrity": "sha512-DX8nKgqcGwsc0eJSqYt5lwP4DH5FlHnmuWWBRy7X0NcaGR0ZtuyeESgMwTYVEtxmsNGY+qit4QYT/MIYTOTPeA==",
- "dev": true,
- "peer": true
- },
- "node_modules/@xtuc/long": {
- "version": "4.2.2",
- "resolved": "https://registry.npmjs.org/@xtuc/long/-/long-4.2.2.tgz",
- "integrity": "sha512-NuHqBY1PB/D8xU6s/thBgOAiAP7HOYDQ32+BFZILJ8ivkUkAHQnWfn6WhL79Owj1qmUnoN/YPhktdIoucipkAQ==",
- "dev": true,
- "peer": true
- },
"node_modules/@yarnpkg/fslib": {
"version": "2.10.3",
"resolved": "https://registry.npmjs.org/@yarnpkg/fslib/-/fslib-2.10.3.tgz",
@@ -4792,16 +4584,6 @@
"acorn": "^6 || ^7 || ^8"
}
},
- "node_modules/acorn-import-attributes": {
- "version": "1.9.5",
- "resolved": "https://registry.npmjs.org/acorn-import-attributes/-/acorn-import-attributes-1.9.5.tgz",
- "integrity": "sha512-n02Vykv5uA3eHGM/Z2dQrcD56kL8TyDb2p1+0P83PClMnC/nc+anbQRhIOWnSq4Ke/KvDPrY3C9hDtC/A3eHnQ==",
- "dev": true,
- "peer": true,
- "peerDependencies": {
- "acorn": "^8"
- }
- },
"node_modules/acorn-jsx": {
"version": "5.3.2",
"resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.3.2.tgz",
@@ -5788,16 +5570,6 @@
"node": ">=10"
}
},
- "node_modules/chrome-trace-event": {
- "version": "1.0.4",
- "resolved": "https://registry.npmjs.org/chrome-trace-event/-/chrome-trace-event-1.0.4.tgz",
- "integrity": "sha512-rNjApaLzuwaOTjCiT8lSDdGN1APCiqkChLMJxJPWLunPAt5fy8xgU9/jNOchV84wfIxrA0lRQB7oCT8jrn/wrQ==",
- "dev": true,
- "peer": true,
- "engines": {
- "node": ">=6.0"
- }
- },
"node_modules/citty": {
"version": "0.1.6",
"resolved": "https://registry.npmjs.org/citty/-/citty-0.1.6.tgz",
@@ -6480,20 +6252,6 @@
"node": ">= 0.8"
}
},
- "node_modules/enhanced-resolve": {
- "version": "5.17.0",
- "resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-5.17.0.tgz",
- "integrity": "sha512-dwDPwZL0dmye8Txp2gzFmA6sxALaSvdRDjPH0viLcKrtlOL3tw62nWWweVD1SdILDTJrbrL6tdWVN58Wo6U3eA==",
- "dev": true,
- "peer": true,
- "dependencies": {
- "graceful-fs": "^4.2.4",
- "tapable": "^2.2.0"
- },
- "engines": {
- "node": ">=10.13.0"
- }
- },
"node_modules/ensure-type": {
"version": "1.5.1",
"resolved": "https://registry.npmjs.org/ensure-type/-/ensure-type-1.5.1.tgz",
@@ -7749,16 +7507,6 @@
"node": ">= 0.6"
}
},
- "node_modules/events": {
- "version": "3.3.0",
- "resolved": "https://registry.npmjs.org/events/-/events-3.3.0.tgz",
- "integrity": "sha512-mQw+2fkQbALzQ7V0MY0IqdnXNOeTtP4r0lN9z7AAawCXgqea7bDii20AYrIBrFd/Hx0M2Ocz6S111CaFkUcb0Q==",
- "dev": true,
- "peer": true,
- "engines": {
- "node": ">=0.8.x"
- }
- },
"node_modules/execa": {
"version": "5.1.1",
"resolved": "https://registry.npmjs.org/execa/-/execa-5.1.1.tgz",
@@ -8581,13 +8329,6 @@
"node": ">=10.13.0"
}
},
- "node_modules/glob-to-regexp": {
- "version": "0.4.1",
- "resolved": "https://registry.npmjs.org/glob-to-regexp/-/glob-to-regexp-0.4.1.tgz",
- "integrity": "sha512-lkX1HJXwyMcprw/5YUZc2s7DrpAiHB21/V+E1rHUrVNokkvB6bqMzT0VfV6/86ZNabt1k14YOIaT7nDvOX3Iiw==",
- "dev": true,
- "peer": true
- },
"node_modules/globals": {
"version": "15.9.0",
"resolved": "https://registry.npmjs.org/globals/-/globals-15.9.0.tgz",
@@ -9833,47 +9574,6 @@
"@pkgjs/parseargs": "^0.11.0"
}
},
- "node_modules/jest-worker": {
- "version": "27.5.1",
- "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-27.5.1.tgz",
- "integrity": "sha512-7vuh85V5cdDofPyxn58nrPjBktZo0u9x1g8WtjQol+jZDaE+fhN+cIvTj11GndBnMnyfrUOG1sZQxCdjKh+DKg==",
- "dev": true,
- "peer": true,
- "dependencies": {
- "@types/node": "*",
- "merge-stream": "^2.0.0",
- "supports-color": "^8.0.0"
- },
- "engines": {
- "node": ">= 10.13.0"
- }
- },
- "node_modules/jest-worker/node_modules/has-flag": {
- "version": "4.0.0",
- "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz",
- "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==",
- "dev": true,
- "peer": true,
- "engines": {
- "node": ">=8"
- }
- },
- "node_modules/jest-worker/node_modules/supports-color": {
- "version": "8.1.1",
- "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz",
- "integrity": "sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==",
- "dev": true,
- "peer": true,
- "dependencies": {
- "has-flag": "^4.0.0"
- },
- "engines": {
- "node": ">=10"
- },
- "funding": {
- "url": "https://github.com/chalk/supports-color?sponsor=1"
- }
- },
"node_modules/joycon": {
"version": "3.1.1",
"resolved": "https://registry.npmjs.org/joycon/-/joycon-3.1.1.tgz",
@@ -10064,13 +9764,6 @@
"integrity": "sha512-4bV5BfR2mqfQTJm+V5tPPdf+ZpuhiIvTuAB5g8kcrXOZpTT/QwwVRWBywX1ozr6lEuPdbHxwaJlm9G6mI2sfSQ==",
"dev": true
},
- "node_modules/json-parse-even-better-errors": {
- "version": "2.3.1",
- "resolved": "https://registry.npmjs.org/json-parse-even-better-errors/-/json-parse-even-better-errors-2.3.1.tgz",
- "integrity": "sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w==",
- "dev": true,
- "peer": true
- },
"node_modules/json-schema-traverse": {
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz",
@@ -10210,16 +9903,6 @@
"node": "^12.20.0 || ^14.13.1 || >=16.0.0"
}
},
- "node_modules/loader-runner": {
- "version": "4.3.0",
- "resolved": "https://registry.npmjs.org/loader-runner/-/loader-runner-4.3.0.tgz",
- "integrity": "sha512-3R/1M+yS3j5ou80Me59j7F9IMs4PXs3VqRrm0TU3AbKPxlmpoY1TNscJV/oGJXo8qCatFGTfDbY6W6ipGOYXfg==",
- "dev": true,
- "peer": true,
- "engines": {
- "node": ">=6.11.5"
- }
- },
"node_modules/loader-utils": {
"version": "2.0.4",
"resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-2.0.4.tgz",
@@ -12681,16 +12364,6 @@
"url": "https://opencollective.com/ramda"
}
},
- "node_modules/randombytes": {
- "version": "2.1.0",
- "resolved": "https://registry.npmjs.org/randombytes/-/randombytes-2.1.0.tgz",
- "integrity": "sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ==",
- "dev": true,
- "peer": true,
- "dependencies": {
- "safe-buffer": "^5.1.0"
- }
- },
"node_modules/range-parser": {
"version": "1.2.1",
"resolved": "https://registry.npmjs.org/range-parser/-/range-parser-1.2.1.tgz",
@@ -13574,16 +13247,6 @@
"integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==",
"dev": true
},
- "node_modules/serialize-javascript": {
- "version": "6.0.2",
- "resolved": "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-6.0.2.tgz",
- "integrity": "sha512-Saa1xPByTTq2gdeFZYLLo+RFE35NHZkAbqZeWNd3BpzppeVisAqpDjcp8dyf6uIvEqJRd46jemmyA4iFIeVk8g==",
- "dev": true,
- "peer": true,
- "dependencies": {
- "randombytes": "^2.1.0"
- }
- },
"node_modules/serve-static": {
"version": "1.15.0",
"resolved": "https://registry.npmjs.org/serve-static/-/serve-static-1.15.0.tgz",
@@ -14489,120 +14152,6 @@
"url": "https://github.com/sponsors/sindresorhus"
}
},
- "node_modules/terser": {
- "version": "5.31.3",
- "resolved": "https://registry.npmjs.org/terser/-/terser-5.31.3.tgz",
- "integrity": "sha512-pAfYn3NIZLyZpa83ZKigvj6Rn9c/vd5KfYGX7cN1mnzqgDcxWvrU5ZtAfIKhEXz9nRecw4z3LXkjaq96/qZqAA==",
- "dev": true,
- "peer": true,
- "dependencies": {
- "@jridgewell/source-map": "^0.3.3",
- "acorn": "^8.8.2",
- "commander": "^2.20.0",
- "source-map-support": "~0.5.20"
- },
- "bin": {
- "terser": "bin/terser"
- },
- "engines": {
- "node": ">=10"
- }
- },
- "node_modules/terser-webpack-plugin": {
- "version": "5.3.10",
- "resolved": "https://registry.npmjs.org/terser-webpack-plugin/-/terser-webpack-plugin-5.3.10.tgz",
- "integrity": "sha512-BKFPWlPDndPs+NGGCr1U59t0XScL5317Y0UReNrHaw9/FwhPENlq6bfgs+4yPfyP51vqC1bQ4rp1EfXW5ZSH9w==",
- "dev": true,
- "peer": true,
- "dependencies": {
- "@jridgewell/trace-mapping": "^0.3.20",
- "jest-worker": "^27.4.5",
- "schema-utils": "^3.1.1",
- "serialize-javascript": "^6.0.1",
- "terser": "^5.26.0"
- },
- "engines": {
- "node": ">= 10.13.0"
- },
- "funding": {
- "type": "opencollective",
- "url": "https://opencollective.com/webpack"
- },
- "peerDependencies": {
- "webpack": "^5.1.0"
- },
- "peerDependenciesMeta": {
- "@swc/core": {
- "optional": true
- },
- "esbuild": {
- "optional": true
- },
- "uglify-js": {
- "optional": true
- }
- }
- },
- "node_modules/terser-webpack-plugin/node_modules/ajv": {
- "version": "6.12.6",
- "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz",
- "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==",
- "dev": true,
- "peer": true,
- "dependencies": {
- "fast-deep-equal": "^3.1.1",
- "fast-json-stable-stringify": "^2.0.0",
- "json-schema-traverse": "^0.4.1",
- "uri-js": "^4.2.2"
- },
- "funding": {
- "type": "github",
- "url": "https://github.com/sponsors/epoberezkin"
- }
- },
- "node_modules/terser-webpack-plugin/node_modules/ajv-keywords": {
- "version": "3.5.2",
- "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-3.5.2.tgz",
- "integrity": "sha512-5p6WTN0DdTGVQk6VjcEju19IgaHudalcfabD7yhDGeA6bcQnmL+CpveLJq/3hvfwd1aof6L386Ougkx6RfyMIQ==",
- "dev": true,
- "peer": true,
- "peerDependencies": {
- "ajv": "^6.9.1"
- }
- },
- "node_modules/terser-webpack-plugin/node_modules/json-schema-traverse": {
- "version": "0.4.1",
- "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz",
- "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==",
- "dev": true,
- "peer": true
- },
- "node_modules/terser-webpack-plugin/node_modules/schema-utils": {
- "version": "3.3.0",
- "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-3.3.0.tgz",
- "integrity": "sha512-pN/yOAvcC+5rQ5nERGuwrjLlYvLTbCibnZ1I7B1LaiAz9BRBlE9GMgE/eqV30P7aJQUf7Ddimy/RsbYO/GrVGg==",
- "dev": true,
- "peer": true,
- "dependencies": {
- "@types/json-schema": "^7.0.8",
- "ajv": "^6.12.5",
- "ajv-keywords": "^3.5.2"
- },
- "engines": {
- "node": ">= 10.13.0"
- },
- "funding": {
- "type": "opencollective",
- "url": "https://opencollective.com/webpack"
- }
- },
- "node_modules/terser/node_modules/commander": {
- "version": "2.20.3",
- "resolved": "https://registry.npmjs.org/commander/-/commander-2.20.3.tgz",
- "integrity": "sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==",
- "dev": true,
- "peer": true
- },
"node_modules/test-exclude": {
"version": "7.0.1",
"resolved": "https://registry.npmjs.org/test-exclude/-/test-exclude-7.0.1.tgz",
@@ -15539,20 +15088,6 @@
"url": "https://github.com/sponsors/ljharb"
}
},
- "node_modules/typescript": {
- "version": "5.5.4",
- "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.5.4.tgz",
- "integrity": "sha512-Mtq29sKDAEYP7aljRgtPOpTvOfbwRWlS6dPRzwjdE+C0R4brX/GUyhHSecbHMFLNBLcJIPt9nl9yG5TZ1weH+Q==",
- "dev": true,
- "peer": true,
- "bin": {
- "tsc": "bin/tsc",
- "tsserver": "bin/tsserver"
- },
- "engines": {
- "node": ">=14.17"
- }
- },
"node_modules/ufo": {
"version": "1.5.3",
"resolved": "https://registry.npmjs.org/ufo/-/ufo-1.5.3.tgz",
@@ -16604,20 +16139,6 @@
"integrity": "sha512-9YlCL/ynK3CTlrSRrDxZvUauLzAswPCrsaCgilqFevUYpeEW0/3ScEjaa3kbW/T0ghhkEr7mv+fpjqn1Y1YuTA==",
"dev": true
},
- "node_modules/watchpack": {
- "version": "2.4.1",
- "resolved": "https://registry.npmjs.org/watchpack/-/watchpack-2.4.1.tgz",
- "integrity": "sha512-8wrBCMtVhqcXP2Sup1ctSkga6uc2Bx0IIvKyT7yTFier5AXHooSI+QyQQAtTb7+E0IUCCKyTFmXqdqgum2XWGg==",
- "dev": true,
- "peer": true,
- "dependencies": {
- "glob-to-regexp": "^0.4.1",
- "graceful-fs": "^4.1.2"
- },
- "engines": {
- "node": ">=10.13.0"
- }
- },
"node_modules/wcwidth": {
"version": "1.0.1",
"resolved": "https://registry.npmjs.org/wcwidth/-/wcwidth-1.0.1.tgz",
@@ -16642,54 +16163,6 @@
"node": ">=12"
}
},
- "node_modules/webpack": {
- "version": "5.93.0",
- "resolved": "https://registry.npmjs.org/webpack/-/webpack-5.93.0.tgz",
- "integrity": "sha512-Y0m5oEY1LRuwly578VqluorkXbvXKh7U3rLoQCEO04M97ScRr44afGVkI0FQFsXzysk5OgFAxjZAb9rsGQVihA==",
- "dev": true,
- "peer": true,
- "dependencies": {
- "@types/eslint-scope": "^3.7.3",
- "@types/estree": "^1.0.5",
- "@webassemblyjs/ast": "^1.12.1",
- "@webassemblyjs/wasm-edit": "^1.12.1",
- "@webassemblyjs/wasm-parser": "^1.12.1",
- "acorn": "^8.7.1",
- "acorn-import-attributes": "^1.9.5",
- "browserslist": "^4.21.10",
- "chrome-trace-event": "^1.0.2",
- "enhanced-resolve": "^5.17.0",
- "es-module-lexer": "^1.2.1",
- "eslint-scope": "5.1.1",
- "events": "^3.2.0",
- "glob-to-regexp": "^0.4.1",
- "graceful-fs": "^4.2.11",
- "json-parse-even-better-errors": "^2.3.1",
- "loader-runner": "^4.2.0",
- "mime-types": "^2.1.27",
- "neo-async": "^2.6.2",
- "schema-utils": "^3.2.0",
- "tapable": "^2.1.1",
- "terser-webpack-plugin": "^5.3.10",
- "watchpack": "^2.4.1",
- "webpack-sources": "^3.2.3"
- },
- "bin": {
- "webpack": "bin/webpack.js"
- },
- "engines": {
- "node": ">=10.13.0"
- },
- "funding": {
- "type": "opencollective",
- "url": "https://opencollective.com/webpack"
- },
- "peerDependenciesMeta": {
- "webpack-cli": {
- "optional": true
- }
- }
- },
"node_modules/webpack-sources": {
"version": "3.2.3",
"resolved": "https://registry.npmjs.org/webpack-sources/-/webpack-sources-3.2.3.tgz",
@@ -16705,90 +16178,6 @@
"integrity": "sha512-66/V2i5hQanC51vBQKPH4aI8NMAcBW59FVBs+rC7eGHupMyfn34q7rZIE+ETlJ+XTevqfUhVVBgSUNSW2flEUQ==",
"dev": true
},
- "node_modules/webpack/node_modules/@types/estree": {
- "version": "1.0.5",
- "resolved": "https://registry.npmjs.org/@types/estree/-/estree-1.0.5.tgz",
- "integrity": "sha512-/kYRxGDLWzHOB7q+wtSUQlFrtcdUccpfy+X+9iMBpHK8QLLhx2wIPYuS5DYtR9Wa/YlZAbIovy7qVdB1Aq6Lyw==",
- "dev": true,
- "peer": true
- },
- "node_modules/webpack/node_modules/ajv": {
- "version": "6.12.6",
- "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz",
- "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==",
- "dev": true,
- "peer": true,
- "dependencies": {
- "fast-deep-equal": "^3.1.1",
- "fast-json-stable-stringify": "^2.0.0",
- "json-schema-traverse": "^0.4.1",
- "uri-js": "^4.2.2"
- },
- "funding": {
- "type": "github",
- "url": "https://github.com/sponsors/epoberezkin"
- }
- },
- "node_modules/webpack/node_modules/ajv-keywords": {
- "version": "3.5.2",
- "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-3.5.2.tgz",
- "integrity": "sha512-5p6WTN0DdTGVQk6VjcEju19IgaHudalcfabD7yhDGeA6bcQnmL+CpveLJq/3hvfwd1aof6L386Ougkx6RfyMIQ==",
- "dev": true,
- "peer": true,
- "peerDependencies": {
- "ajv": "^6.9.1"
- }
- },
- "node_modules/webpack/node_modules/eslint-scope": {
- "version": "5.1.1",
- "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-5.1.1.tgz",
- "integrity": "sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw==",
- "dev": true,
- "peer": true,
- "dependencies": {
- "esrecurse": "^4.3.0",
- "estraverse": "^4.1.1"
- },
- "engines": {
- "node": ">=8.0.0"
- }
- },
- "node_modules/webpack/node_modules/estraverse": {
- "version": "4.3.0",
- "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-4.3.0.tgz",
- "integrity": "sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==",
- "dev": true,
- "peer": true,
- "engines": {
- "node": ">=4.0"
- }
- },
- "node_modules/webpack/node_modules/json-schema-traverse": {
- "version": "0.4.1",
- "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz",
- "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==",
- "dev": true,
- "peer": true
- },
- "node_modules/webpack/node_modules/schema-utils": {
- "version": "3.3.0",
- "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-3.3.0.tgz",
- "integrity": "sha512-pN/yOAvcC+5rQ5nERGuwrjLlYvLTbCibnZ1I7B1LaiAz9BRBlE9GMgE/eqV30P7aJQUf7Ddimy/RsbYO/GrVGg==",
- "dev": true,
- "peer": true,
- "dependencies": {
- "@types/json-schema": "^7.0.8",
- "ajv": "^6.12.5",
- "ajv-keywords": "^3.5.2"
- },
- "engines": {
- "node": ">= 10.13.0"
- },
- "funding": {
- "type": "opencollective",
- "url": "https://opencollective.com/webpack"
- }
- },
"node_modules/whatwg-encoding": {
"version": "3.1.1",
"resolved": "https://registry.npmjs.org/whatwg-encoding/-/whatwg-encoding-3.1.1.tgz",
diff --git a/test/js/component/matomo_tracker/matomo_tracker.test.jsx b/test/js/component/matomo_tracker/matomo_tracker.test.jsx
new file mode 100644
index 00000000..46577315
--- /dev/null
+++ b/test/js/component/matomo_tracker/matomo_tracker.test.jsx
@@ -0,0 +1,16 @@
+import {render} from '@testing-library/react';
+import React from "react";
+
+import MatomoTracker from '../../../../oereb_client/static/src/component/matomo_tracker/matomo_tracker';
+
+describe('permalink component', () => {
+
+ it('should render permalink modal', async () => {
+ expect(document.body.getElementsByTagName('script')).toHaveLength(0);
+ render(