diff --git a/cypress.config.ts b/cypress.config.ts
index 5bed49b8..4b01931b 100644
--- a/cypress.config.ts
+++ b/cypress.config.ts
@@ -4,4 +4,9 @@ export default defineConfig({
e2e: {
baseUrl: 'http://localhost:3000',
},
+ // default username / password on init
+ env: {
+ umami_user: 'admin',
+ umami_password: 'umami',
+ },
});
diff --git a/cypress/docker-compose.yml b/cypress/docker-compose.yml
index 3cd8f546..01a47bd8 100644
--- a/cypress/docker-compose.yml
+++ b/cypress/docker-compose.yml
@@ -43,9 +43,10 @@ services:
- CYPRESS_umami_user=admin
- CYPRESS_umami_password=umami
volumes:
- - ../tsconfig.json:/tsconfig.json
+ - ./tsconfig.json:/tsconfig.json
- ../cypress.config.ts:/cypress.config.ts
- ./:/cypress
- ../node_modules/:/node_modules
+ - ../src/lib/crypto.ts:/src/lib/crypto.ts
volumes:
umami-db-data:
diff --git a/cypress/e2e/login.cy.ts b/cypress/e2e/login.cy.ts
index 288d5c51..5831c81d 100644
--- a/cypress/e2e/login.cy.ts
+++ b/cypress/e2e/login.cy.ts
@@ -6,8 +6,12 @@ describe('Login tests', () => {
},
() => {
cy.visit('/login');
- cy.getDataTest('input-username').find('input').type(Cypress.env('umami_user'));
- cy.getDataTest('input-password').find('input').type(Cypress.env('umami_password'));
+ cy.getDataTest('input-username').find('input').click();
+ cy.getDataTest('input-username').find('input').type(Cypress.env('umami_user'), { delay: 50 });
+ cy.getDataTest('input-password').find('input').click();
+ cy.getDataTest('input-password')
+ .find('input')
+ .type(Cypress.env('umami_password'), { delay: 50 });
cy.getDataTest('button-submit').click();
cy.url().should('eq', Cypress.config().baseUrl + '/dashboard');
cy.getDataTest('button-profile').click();
diff --git a/cypress/e2e/website.cy.ts b/cypress/e2e/website.cy.ts
index feec39de..b60d8e7a 100644
--- a/cypress/e2e/website.cy.ts
+++ b/cypress/e2e/website.cy.ts
@@ -10,8 +10,10 @@ describe('Website tests', () => {
cy.visit('/settings/websites');
cy.getDataTest('button-website-add').click();
cy.contains(/Add website/i).should('be.visible');
- cy.getDataTest('input-name').find('input').wait(500).type('Add test', { delay: 50 });
- cy.getDataTest('input-domain').find('input').wait(500).type('addtest.com', { delay: 50 });
+ cy.getDataTest('input-name').find('input').click();
+ cy.getDataTest('input-name').find('input').type('Add test', { delay: 50 });
+ cy.getDataTest('input-domain').find('input').click();
+ cy.getDataTest('input-domain').find('input').type('addtest.com', { delay: 50 });
cy.getDataTest('button-submit').click();
cy.get('td[label="Name"]').should('contain.text', 'Add test');
cy.get('td[label="Domain"]').should('contain.text', 'addtest.com');
@@ -26,10 +28,10 @@ describe('Website tests', () => {
cy.deleteWebsite(websiteId);
});
cy.visit('/settings/websites');
- cy.contains('Add test').should('not.exist');
+ cy.contains(/Add test/i).should('not.exist');
});
- it.only('Edit a website', () => {
+ it('Edit a website', () => {
// prep data
cy.addWebsite('Update test', 'updatetest.com');
cy.visit('/settings/websites');
@@ -37,16 +39,12 @@ describe('Website tests', () => {
// edit website
cy.getDataTest('link-button-edit').first().click();
cy.contains(/Details/i).should('be.visible');
- cy.getDataTest('input-name')
- .find('input')
- .wait(500)
- .clear()
- .type('Updated website', { delay: 50 });
- cy.getDataTest('input-domain')
- .find('input')
- .wait(500)
- .clear()
- .type('updatedwebsite.com', { delay: 50 });
+ cy.getDataTest('input-name').find('input').click();
+ cy.getDataTest('input-name').find('input').clear();
+ cy.getDataTest('input-name').find('input').type('Updated website', { delay: 50 });
+ cy.getDataTest('input-domain').find('input').click();
+ cy.getDataTest('input-domain').find('input').clear();
+ cy.getDataTest('input-domain').find('input').type('updatedwebsite.com', { delay: 50 });
cy.getDataTest('button-submit').click({ force: true });
cy.getDataTest('input-name').find('input').should('have.value', 'Updated website');
cy.getDataTest('input-domain').find('input').should('have.value', 'updatedwebsite.com');
@@ -69,7 +67,7 @@ describe('Website tests', () => {
cy.deleteWebsite(websiteId);
});
cy.visit('/settings/websites');
- cy.contains('Add test').should('not.exist');
+ cy.contains(/Add test/i).should('not.exist');
});
it('Delete a website', () => {
@@ -86,6 +84,6 @@ describe('Website tests', () => {
cy.contains(/Type DELETE in the box below to confirm./i).should('be.visible');
cy.get('input[name="confirm"').type('DELETE');
cy.get('button[type="submit"]').click();
- cy.contains('Delete test').should('not.exist');
+ cy.contains(/Delete test/i).should('not.exist');
});
});
diff --git a/package.json b/package.json
index 35cdd730..9cea8cbe 100644
--- a/package.json
+++ b/package.json
@@ -66,14 +66,14 @@
"dependencies": {
"@clickhouse/client": "^0.2.2",
"@fontsource/inter": "^4.5.15",
- "@prisma/client": "5.9.1",
+ "@prisma/client": "5.10.2",
"@prisma/extension-read-replicas": "^0.3.0",
"@react-spring/web": "^9.7.3",
"@tanstack/react-query": "^5.12.2",
"@umami/prisma-client": "^0.14.0",
"@umami/redis-client": "^0.18.0",
"chalk": "^4.1.1",
- "chart.js": "^4.2.1",
+ "chart.js": "^4.4.2",
"chartjs-adapter-date-fns": "^3.0.0",
"classnames": "^2.3.1",
"colord": "^2.9.2",
@@ -98,11 +98,11 @@
"maxmind": "^4.3.6",
"md5": "^2.3.0",
"moment-timezone": "^0.5.35",
- "next": "14.1.0",
+ "next": "14.1.3",
"next-basics": "^0.39.0",
"node-fetch": "^3.2.8",
"npm-run-all": "^4.1.5",
- "prisma": "5.9.1",
+ "prisma": "5.10.2",
"react": "^18.2.0",
"react-basics": "^0.123.0",
"react-beautiful-dnd": "^13.1.0",
diff --git a/public/intl/messages/am-ET.json b/public/intl/messages/am-ET.json
index 5ed37497..21a8e79f 100644
--- a/public/intl/messages/am-ET.json
+++ b/public/intl/messages/am-ET.json
@@ -215,6 +215,12 @@
"value": "Created"
}
],
+ "label.created-by": [
+ {
+ "type": 0,
+ "value": "Created By"
+ }
+ ],
"label.current-password": [
{
"type": 0,
diff --git a/public/intl/messages/be-BY.json b/public/intl/messages/be-BY.json
index dd9d1000..def58386 100644
--- a/public/intl/messages/be-BY.json
+++ b/public/intl/messages/be-BY.json
@@ -215,6 +215,12 @@
"value": "Created"
}
],
+ "label.created-by": [
+ {
+ "type": 0,
+ "value": "Created By"
+ }
+ ],
"label.current-password": [
{
"type": 0,
diff --git a/public/intl/messages/bn-BD.json b/public/intl/messages/bn-BD.json
index e75da8f3..0f32ba3b 100644
--- a/public/intl/messages/bn-BD.json
+++ b/public/intl/messages/bn-BD.json
@@ -215,6 +215,12 @@
"value": "Created"
}
],
+ "label.created-by": [
+ {
+ "type": 0,
+ "value": "Created By"
+ }
+ ],
"label.current-password": [
{
"type": 0,
diff --git a/public/intl/messages/ca-ES.json b/public/intl/messages/ca-ES.json
index 89daf8a1..0f441e0c 100644
--- a/public/intl/messages/ca-ES.json
+++ b/public/intl/messages/ca-ES.json
@@ -215,6 +215,12 @@
"value": "Created"
}
],
+ "label.created-by": [
+ {
+ "type": 0,
+ "value": "Created By"
+ }
+ ],
"label.current-password": [
{
"type": 0,
diff --git a/public/intl/messages/cs-CZ.json b/public/intl/messages/cs-CZ.json
index 8495aea0..1b91d247 100644
--- a/public/intl/messages/cs-CZ.json
+++ b/public/intl/messages/cs-CZ.json
@@ -215,6 +215,12 @@
"value": "Created"
}
],
+ "label.created-by": [
+ {
+ "type": 0,
+ "value": "Created By"
+ }
+ ],
"label.current-password": [
{
"type": 0,
diff --git a/public/intl/messages/da-DK.json b/public/intl/messages/da-DK.json
index 63da5bea..a53d93a3 100644
--- a/public/intl/messages/da-DK.json
+++ b/public/intl/messages/da-DK.json
@@ -215,6 +215,12 @@
"value": "Created"
}
],
+ "label.created-by": [
+ {
+ "type": 0,
+ "value": "Created By"
+ }
+ ],
"label.current-password": [
{
"type": 0,
diff --git a/public/intl/messages/de-CH.json b/public/intl/messages/de-CH.json
index 9120e8c3..e7abed6b 100644
--- a/public/intl/messages/de-CH.json
+++ b/public/intl/messages/de-CH.json
@@ -215,6 +215,12 @@
"value": "Erstellt"
}
],
+ "label.created-by": [
+ {
+ "type": 0,
+ "value": "Created By"
+ }
+ ],
"label.current-password": [
{
"type": 0,
diff --git a/public/intl/messages/de-DE.json b/public/intl/messages/de-DE.json
index 8268f5d7..2477f0e6 100644
--- a/public/intl/messages/de-DE.json
+++ b/public/intl/messages/de-DE.json
@@ -215,6 +215,12 @@
"value": "Erstellt"
}
],
+ "label.created-by": [
+ {
+ "type": 0,
+ "value": "Created By"
+ }
+ ],
"label.current-password": [
{
"type": 0,
diff --git a/public/intl/messages/el-GR.json b/public/intl/messages/el-GR.json
index 598f7b6f..dd78c971 100644
--- a/public/intl/messages/el-GR.json
+++ b/public/intl/messages/el-GR.json
@@ -215,6 +215,12 @@
"value": "Created"
}
],
+ "label.created-by": [
+ {
+ "type": 0,
+ "value": "Created By"
+ }
+ ],
"label.current-password": [
{
"type": 0,
diff --git a/public/intl/messages/en-GB.json b/public/intl/messages/en-GB.json
index c3465092..e035770e 100644
--- a/public/intl/messages/en-GB.json
+++ b/public/intl/messages/en-GB.json
@@ -215,6 +215,12 @@
"value": "Created"
}
],
+ "label.created-by": [
+ {
+ "type": 0,
+ "value": "Created By"
+ }
+ ],
"label.current-password": [
{
"type": 0,
diff --git a/public/intl/messages/en-US.json b/public/intl/messages/en-US.json
index c666b361..68a3e1f7 100644
--- a/public/intl/messages/en-US.json
+++ b/public/intl/messages/en-US.json
@@ -215,6 +215,12 @@
"value": "Created"
}
],
+ "label.created-by": [
+ {
+ "type": 0,
+ "value": "Created By"
+ }
+ ],
"label.current-password": [
{
"type": 0,
diff --git a/public/intl/messages/es-ES.json b/public/intl/messages/es-ES.json
index 86965289..b1ce8d8a 100644
--- a/public/intl/messages/es-ES.json
+++ b/public/intl/messages/es-ES.json
@@ -32,7 +32,7 @@
"label.add-member": [
{
"type": 0,
- "value": "Add member"
+ "value": "Añadir miembro"
}
],
"label.add-website": [
@@ -215,6 +215,12 @@
"value": "Creado"
}
],
+ "label.created-by": [
+ {
+ "type": 0,
+ "value": "Created By"
+ }
+ ],
"label.current-password": [
{
"type": 0,
@@ -272,7 +278,7 @@
"label.delete-report": [
{
"type": 0,
- "value": "Delete report"
+ "value": "Eliminar reporte"
}
],
"label.delete-team": [
@@ -464,7 +470,7 @@
"label.insights-description": [
{
"type": 0,
- "value": "Dive deeper into your data by using segments and filters."
+ "value": "Profundice en sus datos mediante el uso de segmentos y filtros."
}
],
"label.is": [
@@ -482,7 +488,7 @@
"label.is-not-set": [
{
"type": 0,
- "value": "Is not set"
+ "value": "No está establecido"
}
],
"label.is-set": [
@@ -588,7 +594,7 @@
"label.manage": [
{
"type": 0,
- "value": "Manage"
+ "value": "Administrar"
}
],
"label.max": [
@@ -600,7 +606,7 @@
"label.member": [
{
"type": 0,
- "value": "Member"
+ "value": "Miembro"
}
],
"label.members": [
@@ -630,7 +636,7 @@
"label.my-account": [
{
"type": 0,
- "value": "My account"
+ "value": "Mi cuenta"
}
],
"label.my-websites": [
@@ -842,7 +848,7 @@
"label.remove-member": [
{
"type": 0,
- "value": "Remove member"
+ "value": "Eliminar miembro"
}
],
"label.reports": [
@@ -926,7 +932,7 @@
"label.select-role": [
{
"type": 0,
- "value": "Select role"
+ "value": "Seleccionar rol"
}
],
"label.select-website": [
@@ -1004,7 +1010,7 @@
"label.team-view-only": [
{
"type": 0,
- "value": "Team view only"
+ "value": "Vista solo del equipo"
}
],
"label.team-websites": [
@@ -1088,13 +1094,13 @@
"label.transfer": [
{
"type": 0,
- "value": "Transfer"
+ "value": "Transferir"
}
],
"label.transfer-website": [
{
"type": 0,
- "value": "Transfer website"
+ "value": "Transferir sitio web"
}
],
"label.true": [
@@ -1232,7 +1238,7 @@
"message.action-confirmation": [
{
"type": 0,
- "value": "Type "
+ "value": "Escriba "
},
{
"type": 1,
@@ -1240,7 +1246,7 @@
},
{
"type": 0,
- "value": " in the box below to confirm."
+ "value": " en el cuadro a continuación para confirmar."
}
],
"message.active-users": [
@@ -1308,7 +1314,7 @@
"message.confirm-remove": [
{
"type": 0,
- "value": "Are you sure you want to remove "
+ "value": "¿Estás seguro de que desea eliminar "
},
{
"type": 1,
@@ -1336,7 +1342,7 @@
"message.delete-team-warning": [
{
"type": 0,
- "value": "Deleting a team will also delete all team websites."
+ "value": "Al eliminar un equipo, también se eliminarán todos los sitios web del equipo."
}
],
"message.delete-website-warning": [
@@ -1532,7 +1538,7 @@
"message.transfer-team-website-to-user": [
{
"type": 0,
- "value": "Transfer this website to your account?"
+ "value": "¿Transferir este sitio web a su cuenta?"
}
],
"message.transfer-user-website-to-team": [
@@ -1544,13 +1550,13 @@
"message.transfer-website": [
{
"type": 0,
- "value": "Transfer website ownership to your account or another team."
+ "value": "Seleccione el equipo al que transferir este sitio web."
}
],
"message.triggered-event": [
{
"type": 0,
- "value": "Triggered event"
+ "value": "Evento lanzado"
}
],
"message.user-deleted": [
@@ -1562,7 +1568,7 @@
"message.viewed-page": [
{
"type": 0,
- "value": "Viewed page"
+ "value": "Página vista"
}
],
"message.visitor-log": [
@@ -1602,7 +1608,7 @@
"message.visitors-dropped-off": [
{
"type": 0,
- "value": "Visitors dropped off"
+ "value": "Los visitantes salieron"
}
]
}
diff --git a/public/intl/messages/fa-IR.json b/public/intl/messages/fa-IR.json
index 221879c5..a680492c 100644
--- a/public/intl/messages/fa-IR.json
+++ b/public/intl/messages/fa-IR.json
@@ -215,6 +215,12 @@
"value": "Created"
}
],
+ "label.created-by": [
+ {
+ "type": 0,
+ "value": "Created By"
+ }
+ ],
"label.current-password": [
{
"type": 0,
diff --git a/public/intl/messages/fi-FI.json b/public/intl/messages/fi-FI.json
index d4c39d62..5c9b7611 100644
--- a/public/intl/messages/fi-FI.json
+++ b/public/intl/messages/fi-FI.json
@@ -215,6 +215,12 @@
"value": "Created"
}
],
+ "label.created-by": [
+ {
+ "type": 0,
+ "value": "Created By"
+ }
+ ],
"label.current-password": [
{
"type": 0,
diff --git a/public/intl/messages/fo-FO.json b/public/intl/messages/fo-FO.json
index 32c36503..29d1eb5f 100644
--- a/public/intl/messages/fo-FO.json
+++ b/public/intl/messages/fo-FO.json
@@ -215,6 +215,12 @@
"value": "Created"
}
],
+ "label.created-by": [
+ {
+ "type": 0,
+ "value": "Created By"
+ }
+ ],
"label.current-password": [
{
"type": 0,
diff --git a/public/intl/messages/fr-FR.json b/public/intl/messages/fr-FR.json
index 6ab90a03..c8ba44c3 100644
--- a/public/intl/messages/fr-FR.json
+++ b/public/intl/messages/fr-FR.json
@@ -32,7 +32,7 @@
"label.add-member": [
{
"type": 0,
- "value": "Add member"
+ "value": "Ajouter un membre"
}
],
"label.add-website": [
@@ -215,6 +215,12 @@
"value": "Créé"
}
],
+ "label.created-by": [
+ {
+ "type": 0,
+ "value": "Crée par"
+ }
+ ],
"label.current-password": [
{
"type": 0,
@@ -272,7 +278,7 @@
"label.delete-report": [
{
"type": 0,
- "value": "Delete report"
+ "value": "Supprimer le rapport"
}
],
"label.delete-team": [
@@ -362,7 +368,7 @@
"label.edit-member": [
{
"type": 0,
- "value": "Edit member"
+ "value": "Modifier le membre"
}
],
"label.enable-share-url": [
@@ -580,7 +586,7 @@
"label.manage": [
{
"type": 0,
- "value": "Manage"
+ "value": "Gérer"
}
],
"label.max": [
@@ -592,7 +598,7 @@
"label.member": [
{
"type": 0,
- "value": "Member"
+ "value": "Membre"
}
],
"label.members": [
@@ -622,7 +628,7 @@
"label.my-account": [
{
"type": 0,
- "value": "My account"
+ "value": "Mon compte"
}
],
"label.my-websites": [
@@ -646,7 +652,7 @@
"label.none": [
{
"type": 0,
- "value": "Aucun·e"
+ "value": "Aucun"
}
],
"label.number-of-records": [
@@ -834,7 +840,7 @@
"label.remove-member": [
{
"type": 0,
- "value": "Remove member"
+ "value": "Retirer le membre"
}
],
"label.reports": [
@@ -918,7 +924,7 @@
"label.select-role": [
{
"type": 0,
- "value": "Select role"
+ "value": "Choisir un rôle"
}
],
"label.select-website": [
@@ -1080,13 +1086,13 @@
"label.transfer": [
{
"type": 0,
- "value": "Transfer"
+ "value": "Transférer"
}
],
"label.transfer-website": [
{
"type": 0,
- "value": "Transfer website"
+ "value": "Transférer le site"
}
],
"label.true": [
@@ -1224,7 +1230,7 @@
"message.action-confirmation": [
{
"type": 0,
- "value": "Type "
+ "value": "Taper "
},
{
"type": 1,
@@ -1232,7 +1238,7 @@
},
{
"type": 0,
- "value": " in the box below to confirm."
+ "value": " ci-dessous pour confirmer."
}
],
"message.active-users": [
@@ -1304,7 +1310,7 @@
"message.confirm-remove": [
{
"type": 0,
- "value": "Are you sure you want to remove "
+ "value": "Êtes-vous sûr de vouloir retirer "
},
{
"type": 1,
@@ -1312,7 +1318,7 @@
},
{
"type": 0,
- "value": "?"
+ "value": " ?"
}
],
"message.confirm-reset": [
@@ -1332,7 +1338,7 @@
"message.delete-team-warning": [
{
"type": 0,
- "value": "Deleting a team will also delete all team websites."
+ "value": "Supprimer une équipe supprimera aussi tous les sites de cette équipe."
}
],
"message.delete-website-warning": [
@@ -1520,19 +1526,19 @@
"message.transfer-team-website-to-user": [
{
"type": 0,
- "value": "Transfer this website to your account?"
+ "value": "Transférer ce site sur votre compte ?"
}
],
"message.transfer-user-website-to-team": [
{
"type": 0,
- "value": "Select the team to transfer this website to."
+ "value": "Choisir l'équipe à laquelle transférer ce site."
}
],
"message.transfer-website": [
{
"type": 0,
- "value": "Transfer website ownership to your account or another team."
+ "value": "Transférer la propriété du site sur votre compte ou à une autre équipe."
}
],
"message.triggered-event": [
@@ -1550,7 +1556,7 @@
"message.viewed-page": [
{
"type": 0,
- "value": "Viewed page"
+ "value": "Page vue"
}
],
"message.visitor-log": [
@@ -1590,7 +1596,7 @@
"message.visitors-dropped-off": [
{
"type": 0,
- "value": "Visitors dropped off"
+ "value": "Visiteurs ont abandonné"
}
]
}
diff --git a/public/intl/messages/ga-ES.json b/public/intl/messages/ga-ES.json
index ea32f939..926294ea 100644
--- a/public/intl/messages/ga-ES.json
+++ b/public/intl/messages/ga-ES.json
@@ -215,6 +215,12 @@
"value": "Created"
}
],
+ "label.created-by": [
+ {
+ "type": 0,
+ "value": "Created By"
+ }
+ ],
"label.current-password": [
{
"type": 0,
diff --git a/public/intl/messages/he-IL.json b/public/intl/messages/he-IL.json
index c6fadb62..b3cdfeeb 100644
--- a/public/intl/messages/he-IL.json
+++ b/public/intl/messages/he-IL.json
@@ -215,6 +215,12 @@
"value": "Created"
}
],
+ "label.created-by": [
+ {
+ "type": 0,
+ "value": "Created By"
+ }
+ ],
"label.current-password": [
{
"type": 0,
diff --git a/public/intl/messages/hi-IN.json b/public/intl/messages/hi-IN.json
index 0411eb3b..985ed537 100644
--- a/public/intl/messages/hi-IN.json
+++ b/public/intl/messages/hi-IN.json
@@ -215,6 +215,12 @@
"value": "Created"
}
],
+ "label.created-by": [
+ {
+ "type": 0,
+ "value": "Created By"
+ }
+ ],
"label.current-password": [
{
"type": 0,
diff --git a/public/intl/messages/hr-HR.json b/public/intl/messages/hr-HR.json
index 468e823a..ff3ca36c 100644
--- a/public/intl/messages/hr-HR.json
+++ b/public/intl/messages/hr-HR.json
@@ -215,6 +215,12 @@
"value": "Created"
}
],
+ "label.created-by": [
+ {
+ "type": 0,
+ "value": "Created By"
+ }
+ ],
"label.current-password": [
{
"type": 0,
diff --git a/public/intl/messages/hu-HU.json b/public/intl/messages/hu-HU.json
index 48e86d58..28450892 100644
--- a/public/intl/messages/hu-HU.json
+++ b/public/intl/messages/hu-HU.json
@@ -215,6 +215,12 @@
"value": "Created"
}
],
+ "label.created-by": [
+ {
+ "type": 0,
+ "value": "Created By"
+ }
+ ],
"label.current-password": [
{
"type": 0,
diff --git a/public/intl/messages/id-ID.json b/public/intl/messages/id-ID.json
index 911dd915..d2b5a98c 100644
--- a/public/intl/messages/id-ID.json
+++ b/public/intl/messages/id-ID.json
@@ -215,6 +215,12 @@
"value": "Created"
}
],
+ "label.created-by": [
+ {
+ "type": 0,
+ "value": "Created By"
+ }
+ ],
"label.current-password": [
{
"type": 0,
diff --git a/public/intl/messages/it-IT.json b/public/intl/messages/it-IT.json
index 98f4819f..10942fff 100644
--- a/public/intl/messages/it-IT.json
+++ b/public/intl/messages/it-IT.json
@@ -215,6 +215,12 @@
"value": "Created"
}
],
+ "label.created-by": [
+ {
+ "type": 0,
+ "value": "Created By"
+ }
+ ],
"label.current-password": [
{
"type": 0,
diff --git a/public/intl/messages/ja-JP.json b/public/intl/messages/ja-JP.json
index a0fb59ed..06ef769c 100644
--- a/public/intl/messages/ja-JP.json
+++ b/public/intl/messages/ja-JP.json
@@ -32,7 +32,7 @@
"label.add-member": [
{
"type": 0,
- "value": "Add member"
+ "value": "メンバーの追加"
}
],
"label.add-website": [
@@ -188,7 +188,7 @@
"label.create": [
{
"type": 0,
- "value": "Create"
+ "value": "作成"
}
],
"label.create-report": [
@@ -215,6 +215,12 @@
"value": "作成されました"
}
],
+ "label.created-by": [
+ {
+ "type": 0,
+ "value": "Created By"
+ }
+ ],
"label.current-password": [
{
"type": 0,
@@ -272,7 +278,7 @@
"label.delete-report": [
{
"type": 0,
- "value": "Delete report"
+ "value": "レポートの削除"
}
],
"label.delete-team": [
@@ -362,7 +368,7 @@
"label.edit-member": [
{
"type": 0,
- "value": "Edit member"
+ "value": "メンバーの編集"
}
],
"label.enable-share-url": [
@@ -410,13 +416,13 @@
"label.filter": [
{
"type": 0,
- "value": "Filter"
+ "value": "フィルター"
}
],
"label.filter-combined": [
{
"type": 0,
- "value": "統合"
+ "value": "結合"
}
],
"label.filter-raw": [
@@ -434,13 +440,13 @@
"label.funnel": [
{
"type": 0,
- "value": "分析"
+ "value": "ファネル"
}
],
"label.funnel-description": [
{
"type": 0,
- "value": "Understand the conversion and drop-off rate of users."
+ "value": "ユーザーのコンバージョン率と離脱率を分析します。"
}
],
"label.greater-than": [
@@ -458,13 +464,13 @@
"label.insights": [
{
"type": 0,
- "value": "見通し"
+ "value": "インサイト"
}
],
"label.insights-description": [
{
"type": 0,
- "value": "Dive deeper into your data by using segments and filters."
+ "value": "セグメントとフィルタを使用して、データをさらに詳しく分析します。"
}
],
"label.is": [
@@ -588,7 +594,7 @@
"label.manage": [
{
"type": 0,
- "value": "Manage"
+ "value": "管理"
}
],
"label.max": [
@@ -600,7 +606,7 @@
"label.member": [
{
"type": 0,
- "value": "Member"
+ "value": "メンバー"
}
],
"label.members": [
@@ -630,7 +636,7 @@
"label.my-account": [
{
"type": 0,
- "value": "My account"
+ "value": "マイアカウント"
}
],
"label.my-websites": [
@@ -842,7 +848,7 @@
"label.remove-member": [
{
"type": 0,
- "value": "Remove member"
+ "value": "メンバーの削除"
}
],
"label.reports": [
@@ -872,13 +878,13 @@
"label.retention": [
{
"type": 0,
- "value": "保持"
+ "value": "リテンション"
}
],
"label.retention-description": [
{
"type": 0,
- "value": "Measure your website stickiness by tracking how often users return."
+ "value": "ユーザーの再訪問回数を記録して、Webサイトのリテンション率を計測します。"
}
],
"label.role": [
@@ -908,13 +914,13 @@
"label.search": [
{
"type": 0,
- "value": "Search"
+ "value": "検索"
}
],
"label.select": [
{
"type": 0,
- "value": "Select"
+ "value": "選択"
}
],
"label.select-date": [
@@ -926,7 +932,7 @@
"label.select-role": [
{
"type": 0,
- "value": "Select role"
+ "value": "ロールを選択"
}
],
"label.select-website": [
@@ -1004,7 +1010,7 @@
"label.team-view-only": [
{
"type": 0,
- "value": "Team view only"
+ "value": "チーム表示のみ"
}
],
"label.team-websites": [
@@ -1088,13 +1094,13 @@
"label.transfer": [
{
"type": 0,
- "value": "Transfer"
+ "value": "移管"
}
],
"label.transfer-website": [
{
"type": 0,
- "value": "Transfer website"
+ "value": "Webサイトの移管"
}
],
"label.true": [
@@ -1232,7 +1238,7 @@
"message.action-confirmation": [
{
"type": 0,
- "value": "Type "
+ "value": "承認する場合は、下のフォームに「"
},
{
"type": 1,
@@ -1240,7 +1246,7 @@
},
{
"type": 0,
- "value": " in the box below to confirm."
+ "value": "」と入力してください。"
}
],
"message.active-users": [
@@ -1298,17 +1304,13 @@
}
],
"message.confirm-remove": [
- {
- "type": 0,
- "value": "Are you sure you want to remove "
- },
{
"type": 1,
"value": "target"
},
{
"type": 0,
- "value": "?"
+ "value": "を削除してもよろしいですか?"
}
],
"message.confirm-reset": [
@@ -1324,7 +1326,7 @@
"message.delete-team-warning": [
{
"type": 0,
- "value": "Deleting a team will also delete all team websites."
+ "value": "チームを削除すると、そのチームが管理しているWebサイトもすべて削除されます。"
}
],
"message.delete-website-warning": [
@@ -1526,25 +1528,25 @@
"message.transfer-team-website-to-user": [
{
"type": 0,
- "value": "Transfer this website to your account?"
+ "value": "このWebサイトをあなたのアカウントに移管しますか?"
}
],
"message.transfer-user-website-to-team": [
{
"type": 0,
- "value": "Select the team to transfer this website to."
+ "value": "このWebサイトを移管するチームを選択してください。"
}
],
"message.transfer-website": [
{
"type": 0,
- "value": "Transfer website ownership to your account or another team."
+ "value": "Webサイトの所有権を自分のアカウントまたは別のチームへ移管します。"
}
],
"message.triggered-event": [
{
"type": 0,
- "value": "Triggered event"
+ "value": "トリガーされたイベント"
}
],
"message.user-deleted": [
@@ -1556,7 +1558,7 @@
"message.viewed-page": [
{
"type": 0,
- "value": "Viewed page"
+ "value": "閲覧されたページ"
}
],
"message.visitor-log": [
@@ -1596,7 +1598,7 @@
"message.visitors-dropped-off": [
{
"type": 0,
- "value": "Visitors dropped off"
+ "value": "訪問者の離脱率"
}
]
}
diff --git a/public/intl/messages/km-KH.json b/public/intl/messages/km-KH.json
index c8911fca..40a280f9 100644
--- a/public/intl/messages/km-KH.json
+++ b/public/intl/messages/km-KH.json
@@ -215,6 +215,12 @@
"value": "Created"
}
],
+ "label.created-by": [
+ {
+ "type": 0,
+ "value": "Created By"
+ }
+ ],
"label.current-password": [
{
"type": 0,
diff --git a/public/intl/messages/ko-KR.json b/public/intl/messages/ko-KR.json
index 92089367..b95b0e32 100644
--- a/public/intl/messages/ko-KR.json
+++ b/public/intl/messages/ko-KR.json
@@ -215,6 +215,12 @@
"value": "Created"
}
],
+ "label.created-by": [
+ {
+ "type": 0,
+ "value": "Created By"
+ }
+ ],
"label.current-password": [
{
"type": 0,
diff --git a/public/intl/messages/lt-LT.json b/public/intl/messages/lt-LT.json
index dcf8fe5b..0d3817da 100644
--- a/public/intl/messages/lt-LT.json
+++ b/public/intl/messages/lt-LT.json
@@ -215,6 +215,12 @@
"value": "Created"
}
],
+ "label.created-by": [
+ {
+ "type": 0,
+ "value": "Created By"
+ }
+ ],
"label.current-password": [
{
"type": 0,
diff --git a/public/intl/messages/mn-MN.json b/public/intl/messages/mn-MN.json
index 5d97a123..2c8a01e7 100644
--- a/public/intl/messages/mn-MN.json
+++ b/public/intl/messages/mn-MN.json
@@ -215,6 +215,12 @@
"value": "Үүсгэсэн"
}
],
+ "label.created-by": [
+ {
+ "type": 0,
+ "value": "Created By"
+ }
+ ],
"label.current-password": [
{
"type": 0,
diff --git a/public/intl/messages/ms-MY.json b/public/intl/messages/ms-MY.json
index d85f08f7..4039bea1 100644
--- a/public/intl/messages/ms-MY.json
+++ b/public/intl/messages/ms-MY.json
@@ -215,6 +215,12 @@
"value": "Created"
}
],
+ "label.created-by": [
+ {
+ "type": 0,
+ "value": "Created By"
+ }
+ ],
"label.current-password": [
{
"type": 0,
diff --git a/public/intl/messages/my-MM.json b/public/intl/messages/my-MM.json
index 9b5f8a12..729dec13 100644
--- a/public/intl/messages/my-MM.json
+++ b/public/intl/messages/my-MM.json
@@ -215,6 +215,12 @@
"value": "ပြုလုပ်ပြီးသော"
}
],
+ "label.created-by": [
+ {
+ "type": 0,
+ "value": "Created By"
+ }
+ ],
"label.current-password": [
{
"type": 0,
diff --git a/public/intl/messages/nb-NO.json b/public/intl/messages/nb-NO.json
index 39aa52fe..fadc11f8 100644
--- a/public/intl/messages/nb-NO.json
+++ b/public/intl/messages/nb-NO.json
@@ -215,6 +215,12 @@
"value": "Created"
}
],
+ "label.created-by": [
+ {
+ "type": 0,
+ "value": "Created By"
+ }
+ ],
"label.current-password": [
{
"type": 0,
diff --git a/public/intl/messages/nl-NL.json b/public/intl/messages/nl-NL.json
index f92948f6..34777f93 100644
--- a/public/intl/messages/nl-NL.json
+++ b/public/intl/messages/nl-NL.json
@@ -215,6 +215,12 @@
"value": "Gemaakt"
}
],
+ "label.created-by": [
+ {
+ "type": 0,
+ "value": "Created By"
+ }
+ ],
"label.current-password": [
{
"type": 0,
diff --git a/public/intl/messages/pl-PL.json b/public/intl/messages/pl-PL.json
index 7834b218..89ab2dcd 100644
--- a/public/intl/messages/pl-PL.json
+++ b/public/intl/messages/pl-PL.json
@@ -215,6 +215,12 @@
"value": "Utworzony"
}
],
+ "label.created-by": [
+ {
+ "type": 0,
+ "value": "Created By"
+ }
+ ],
"label.current-password": [
{
"type": 0,
diff --git a/public/intl/messages/pt-BR.json b/public/intl/messages/pt-BR.json
index af420197..3c6bec5b 100644
--- a/public/intl/messages/pt-BR.json
+++ b/public/intl/messages/pt-BR.json
@@ -215,6 +215,12 @@
"value": "Criado"
}
],
+ "label.created-by": [
+ {
+ "type": 0,
+ "value": "Created By"
+ }
+ ],
"label.current-password": [
{
"type": 0,
diff --git a/public/intl/messages/pt-PT.json b/public/intl/messages/pt-PT.json
index add7ccb7..bcc7fae4 100644
--- a/public/intl/messages/pt-PT.json
+++ b/public/intl/messages/pt-PT.json
@@ -215,6 +215,12 @@
"value": "Created"
}
],
+ "label.created-by": [
+ {
+ "type": 0,
+ "value": "Created By"
+ }
+ ],
"label.current-password": [
{
"type": 0,
diff --git a/public/intl/messages/ro-RO.json b/public/intl/messages/ro-RO.json
index 10625a08..50ae2166 100644
--- a/public/intl/messages/ro-RO.json
+++ b/public/intl/messages/ro-RO.json
@@ -2,7 +2,7 @@
"label.access-code": [
{
"type": 0,
- "value": "Access code"
+ "value": "Cod de access"
}
],
"label.actions": [
@@ -14,25 +14,25 @@
"label.activity-log": [
{
"type": 0,
- "value": "Activity log"
+ "value": "Jurnal de activități"
}
],
"label.add": [
{
"type": 0,
- "value": "Add"
+ "value": "Adaugă"
}
],
"label.add-description": [
{
"type": 0,
- "value": "Add description"
+ "value": "Adaugă descriere"
}
],
"label.add-member": [
{
"type": 0,
- "value": "Add member"
+ "value": "Adaugă membru"
}
],
"label.add-website": [
@@ -50,7 +50,7 @@
"label.after": [
{
"type": 0,
- "value": "After"
+ "value": "După"
}
],
"label.all": [
@@ -62,7 +62,7 @@
"label.all-time": [
{
"type": 0,
- "value": "All time"
+ "value": "Pentru tot timpul"
}
],
"label.analytics": [
@@ -74,7 +74,7 @@
"label.average": [
{
"type": 0,
- "value": "Average"
+ "value": "Mediu"
}
],
"label.average-visit-time": [
@@ -92,7 +92,7 @@
"label.before": [
{
"type": 0,
- "value": "Before"
+ "value": "Înainte"
}
],
"label.bounce-rate": [
@@ -104,7 +104,7 @@
"label.breakdown": [
{
"type": 0,
- "value": "Breakdown"
+ "value": "Detaliat"
}
],
"label.browser": [
@@ -134,19 +134,19 @@
"label.cities": [
{
"type": 0,
- "value": "Cities"
+ "value": "Orașe"
}
],
"label.city": [
{
"type": 0,
- "value": "City"
+ "value": "Oraș"
}
],
"label.clear-all": [
{
"type": 0,
- "value": "Clear all"
+ "value": "Șterge tot"
}
],
"label.confirm": [
@@ -164,13 +164,13 @@
"label.contains": [
{
"type": 0,
- "value": "Contains"
+ "value": "Conține"
}
],
"label.continue": [
{
"type": 0,
- "value": "Continue"
+ "value": "Continuă"
}
],
"label.countries": [
@@ -182,37 +182,37 @@
"label.country": [
{
"type": 0,
- "value": "Country"
+ "value": "Țară"
}
],
"label.create": [
{
"type": 0,
- "value": "Create"
+ "value": "Crează"
}
],
"label.create-report": [
{
"type": 0,
- "value": "Create report"
+ "value": "Crează report"
}
],
"label.create-team": [
{
"type": 0,
- "value": "Create team"
+ "value": "Crează echipă"
}
],
"label.create-user": [
{
"type": 0,
- "value": "Create user"
+ "value": "Crează utilizator"
}
],
"label.created": [
{
"type": 0,
- "value": "Created"
+ "value": "Creat"
}
],
"label.current-password": [
@@ -236,13 +236,13 @@
"label.data": [
{
"type": 0,
- "value": "Data"
+ "value": "Date"
}
],
"label.date": [
{
"type": 0,
- "value": "Date"
+ "value": "Data"
}
],
"label.date-range": [
@@ -254,7 +254,7 @@
"label.day": [
{
"type": 0,
- "value": "Day"
+ "value": "Zi"
}
],
"label.default-date-range": [
@@ -272,19 +272,19 @@
"label.delete-report": [
{
"type": 0,
- "value": "Delete report"
+ "value": "Șterge raport"
}
],
"label.delete-team": [
{
"type": 0,
- "value": "Delete team"
+ "value": "Șterge echipă"
}
],
"label.delete-user": [
{
"type": 0,
- "value": "Delete user"
+ "value": "Șterge utilizator"
}
],
"label.delete-website": [
@@ -296,7 +296,7 @@
"label.description": [
{
"type": 0,
- "value": "Description"
+ "value": "Descriere"
}
],
"label.desktop": [
@@ -308,13 +308,13 @@
"label.details": [
{
"type": 0,
- "value": "Details"
+ "value": "Detalii"
}
],
"label.device": [
{
"type": 0,
- "value": "Device"
+ "value": "Dispozitiv"
}
],
"label.devices": [
@@ -332,7 +332,7 @@
"label.does-not-contain": [
{
"type": 0,
- "value": "Does not contain"
+ "value": "Nu conține"
}
],
"label.domain": [
@@ -344,7 +344,7 @@
"label.dropoff": [
{
"type": 0,
- "value": "Dropoff"
+ "value": "Rată de abandon"
}
],
"label.edit": [
@@ -356,13 +356,13 @@
"label.edit-dashboard": [
{
"type": 0,
- "value": "Edit dashboard"
+ "value": "Editare tablou de bord"
}
],
"label.edit-member": [
{
"type": 0,
- "value": "Edit member"
+ "value": "Editare membru"
}
],
"label.enable-share-url": [
@@ -374,13 +374,13 @@
"label.event": [
{
"type": 0,
- "value": "Event"
+ "value": "Eveniment"
}
],
"label.event-data": [
{
"type": 0,
- "value": "Event data"
+ "value": "Date despre eveniment"
}
],
"label.events": [
@@ -392,25 +392,25 @@
"label.false": [
{
"type": 0,
- "value": "False"
+ "value": "Fals"
}
],
"label.field": [
{
"type": 0,
- "value": "Field"
+ "value": "Câmp"
}
],
"label.fields": [
{
"type": 0,
- "value": "Fields"
+ "value": "Câmpuri"
}
],
"label.filter": [
{
"type": 0,
- "value": "Filter"
+ "value": "Filtru"
}
],
"label.filter-combined": [
@@ -428,91 +428,91 @@
"label.filters": [
{
"type": 0,
- "value": "Filters"
+ "value": "Filtre"
}
],
"label.funnel": [
{
"type": 0,
- "value": "Funnel"
+ "value": "Parcursul utilizatorului"
}
],
"label.funnel-description": [
{
"type": 0,
- "value": "Understand the conversion and drop-off rate of users."
+ "value": "Înțelege rata de conversie și rata de abandon a utilizatorilor."
}
],
"label.greater-than": [
{
"type": 0,
- "value": "Greater than"
+ "value": "Mai mare decât"
}
],
"label.greater-than-equals": [
{
"type": 0,
- "value": "Greater than or equals"
+ "value": "Mai mare sau egal cu"
}
],
"label.insights": [
{
"type": 0,
- "value": "Insights"
+ "value": "Perspective"
}
],
"label.insights-description": [
{
"type": 0,
- "value": "Dive deeper into your data by using segments and filters."
+ "value": "Aprofundează datele utilizând segmente și filtre."
}
],
"label.is": [
{
"type": 0,
- "value": "Is"
+ "value": "Este"
}
],
"label.is-not": [
{
"type": 0,
- "value": "Is not"
+ "value": "Nu este"
}
],
"label.is-not-set": [
{
"type": 0,
- "value": "Is not set"
+ "value": "Nu este setat"
}
],
"label.is-set": [
{
"type": 0,
- "value": "Is set"
+ "value": "Este setat"
}
],
"label.join": [
{
"type": 0,
- "value": "Join"
+ "value": "Alătură-te"
}
],
"label.join-team": [
{
"type": 0,
- "value": "Join team"
+ "value": "Alătură-te echipei"
}
],
"label.language": [
{
"type": 0,
- "value": "Language"
+ "value": "Limbă"
}
],
"label.languages": [
{
"type": 0,
- "value": "Languages"
+ "value": "Limbi"
}
],
"label.laptop": [
@@ -552,25 +552,25 @@
"label.leave": [
{
"type": 0,
- "value": "Leave"
+ "value": "Părăsește"
}
],
"label.leave-team": [
{
"type": 0,
- "value": "Leave team"
+ "value": "Părăsește echipa"
}
],
"label.less-than": [
{
"type": 0,
- "value": "Less than"
+ "value": "Mai puțin decât"
}
],
"label.less-than-equals": [
{
"type": 0,
- "value": "Less than or equals"
+ "value": "Mai puțin sau egal cu"
}
],
"label.login": [
@@ -582,13 +582,13 @@
"label.logout": [
{
"type": 0,
- "value": "Iesire din cont"
+ "value": "Ieșire din cont"
}
],
"label.manage": [
{
"type": 0,
- "value": "Manage"
+ "value": "Administrează"
}
],
"label.max": [
@@ -600,13 +600,13 @@
"label.member": [
{
"type": 0,
- "value": "Member"
+ "value": "Membru"
}
],
"label.members": [
{
"type": 0,
- "value": "Members"
+ "value": "Membri"
}
],
"label.min": [
@@ -630,13 +630,13 @@
"label.my-account": [
{
"type": 0,
- "value": "My account"
+ "value": "Contul meu"
}
],
"label.my-websites": [
{
"type": 0,
- "value": "My websites"
+ "value": "Website-ul meu"
}
],
"label.name": [
@@ -648,13 +648,13 @@
"label.new-password": [
{
"type": 0,
- "value": "Parola nouă"
+ "value": "Parolă nouă"
}
],
"label.none": [
{
"type": 0,
- "value": "None"
+ "value": "Niciunul"
}
],
"label.number-of-records": [
@@ -673,7 +673,7 @@
"value": [
{
"type": 0,
- "value": "record"
+ "value": "înregistrare"
}
]
},
@@ -681,7 +681,7 @@
"value": [
{
"type": 0,
- "value": "records"
+ "value": "înregistrări"
}
]
}
@@ -706,19 +706,19 @@
"label.overview": [
{
"type": 0,
- "value": "Overview"
+ "value": "Vedere de ansamblu"
}
],
"label.owner": [
{
"type": 0,
- "value": "Owner"
+ "value": "Titular"
}
],
"label.page-of": [
{
"type": 0,
- "value": "Page "
+ "value": "Pagina "
},
{
"type": 1,
@@ -726,7 +726,7 @@
},
{
"type": 0,
- "value": " of "
+ "value": " din "
},
{
"type": 1,
@@ -742,7 +742,7 @@
"label.pageTitle": [
{
"type": 0,
- "value": "Page title"
+ "value": "Titlul paginii"
}
],
"label.pages": [
@@ -776,31 +776,31 @@
"label.queries": [
{
"type": 0,
- "value": "Queries"
+ "value": "Interogări"
}
],
"label.query": [
{
"type": 0,
- "value": "Query"
+ "value": "Interogare"
}
],
"label.query-parameters": [
{
"type": 0,
- "value": "Query parameters"
+ "value": "Parametri de interogare"
}
],
"label.realtime": [
{
"type": 0,
- "value": "Realtime"
+ "value": "Timp real"
}
],
"label.referrer": [
{
"type": 0,
- "value": "Referrer"
+ "value": "Proveniență"
}
],
"label.referrers": [
@@ -818,37 +818,37 @@
"label.regenerate": [
{
"type": 0,
- "value": "Regenerate"
+ "value": "Regenerează"
}
],
"label.region": [
{
"type": 0,
- "value": "Region"
+ "value": "Regiune"
}
],
"label.regions": [
{
"type": 0,
- "value": "Regions"
+ "value": "Regiuni"
}
],
"label.remove": [
{
"type": 0,
- "value": "Remove"
+ "value": "Îndepărtează"
}
],
"label.remove-member": [
{
"type": 0,
- "value": "Remove member"
+ "value": "Îndepărtează membru"
}
],
"label.reports": [
{
"type": 0,
- "value": "Reports"
+ "value": "Rapoarte"
}
],
"label.required": [
@@ -872,25 +872,25 @@
"label.retention": [
{
"type": 0,
- "value": "Retention"
+ "value": "Retenție"
}
],
"label.retention-description": [
{
"type": 0,
- "value": "Measure your website stickiness by tracking how often users return."
+ "value": "Măsoară atractivitatea site-ului tău prin urmărirea frecvenței cu care utilizatorii se întorc."
}
],
"label.role": [
{
"type": 0,
- "value": "Role"
+ "value": "Rol"
}
],
"label.run-query": [
{
"type": 0,
- "value": "Run query"
+ "value": "Execută interogarea"
}
],
"label.save": [
@@ -902,43 +902,43 @@
"label.screens": [
{
"type": 0,
- "value": "Screens"
+ "value": "Ecrane"
}
],
"label.search": [
{
"type": 0,
- "value": "Search"
+ "value": "Căutare"
}
],
"label.select": [
{
"type": 0,
- "value": "Select"
+ "value": "Selectează"
}
],
"label.select-date": [
{
"type": 0,
- "value": "Select date"
+ "value": "Selectează data"
}
],
"label.select-role": [
{
"type": 0,
- "value": "Select role"
+ "value": "Selectează rolul"
}
],
"label.select-website": [
{
"type": 0,
- "value": "Select website"
+ "value": "Selectează website"
}
],
"label.sessions": [
{
"type": 0,
- "value": "Sessions"
+ "value": "Sesiuni"
}
],
"label.settings": [
@@ -962,7 +962,7 @@
"label.sum": [
{
"type": 0,
- "value": "Sum"
+ "value": "Sumă"
}
],
"label.tablet": [
@@ -974,55 +974,55 @@
"label.team": [
{
"type": 0,
- "value": "Team"
+ "value": "Echipă"
}
],
"label.team-id": [
{
"type": 0,
- "value": "Team ID"
+ "value": "ID Echipa"
}
],
"label.team-member": [
{
"type": 0,
- "value": "Team member"
+ "value": "Membru echipă"
}
],
"label.team-name": [
{
"type": 0,
- "value": "Team name"
+ "value": "Nume echipă"
}
],
"label.team-owner": [
{
"type": 0,
- "value": "Team owner"
+ "value": "Titular echipă"
}
],
"label.team-view-only": [
{
"type": 0,
- "value": "Team view only"
+ "value": "Doar vizualizare echipă"
}
],
"label.team-websites": [
{
"type": 0,
- "value": "Team websites"
+ "value": "Website-uri echipă"
}
],
"label.teams": [
{
"type": 0,
- "value": "Teams"
+ "value": "Echipă"
}
],
"label.theme": [
{
"type": 0,
- "value": "Theme"
+ "value": "Temă"
}
],
"label.this-month": [
@@ -1052,7 +1052,7 @@
"label.title": [
{
"type": 0,
- "value": "Title"
+ "value": "Titlu"
}
],
"label.today": [
@@ -1076,7 +1076,7 @@
"label.total-records": [
{
"type": 0,
- "value": "Total records"
+ "value": "Total înregistrări"
}
],
"label.tracking-code": [
@@ -1100,19 +1100,19 @@
"label.true": [
{
"type": 0,
- "value": "True"
+ "value": "Adevărat"
}
],
"label.type": [
{
"type": 0,
- "value": "Type"
+ "value": "Tip"
}
],
"label.unique": [
{
"type": 0,
- "value": "Unique"
+ "value": "Unici"
}
],
"label.unique-visitors": [
@@ -1130,7 +1130,7 @@
"label.untitled": [
{
"type": 0,
- "value": "Untitled"
+ "value": "Fără titlu"
}
],
"label.url": [
@@ -1148,7 +1148,7 @@
"label.user": [
{
"type": 0,
- "value": "User"
+ "value": "Utilizator"
}
],
"label.username": [
@@ -1160,19 +1160,19 @@
"label.users": [
{
"type": 0,
- "value": "Users"
+ "value": "Utilizatori"
}
],
"label.value": [
{
"type": 0,
- "value": "Value"
+ "value": "Valoare"
}
],
"label.view": [
{
"type": 0,
- "value": "View"
+ "value": "Vizualizare"
}
],
"label.view-details": [
@@ -1184,7 +1184,7 @@
"label.view-only": [
{
"type": 0,
- "value": "View only"
+ "value": "Doar vizualizare"
}
],
"label.views": [
@@ -1208,7 +1208,7 @@
"label.website-id": [
{
"type": 0,
- "value": "Website ID"
+ "value": "ID Website"
}
],
"label.websites": [
@@ -1220,19 +1220,19 @@
"label.window": [
{
"type": 0,
- "value": "Window"
+ "value": "Fereastră"
}
],
"label.yesterday": [
{
"type": 0,
- "value": "Yesterday"
+ "value": "Ieri"
}
],
"message.action-confirmation": [
{
"type": 0,
- "value": "Type "
+ "value": "Scrie "
},
{
"type": 1,
@@ -1240,7 +1240,7 @@
},
{
"type": 0,
- "value": " in the box below to confirm."
+ "value": " în câmpul de mai jos pentru a confirma."
}
],
"message.active-users": [
@@ -1280,7 +1280,7 @@
"message.confirm-delete": [
{
"type": 0,
- "value": "Sunteți sigur că doriți să ștergeți "
+ "value": "Ești sigur că vrei să ștergi "
},
{
"type": 1,
@@ -1294,7 +1294,7 @@
"message.confirm-leave": [
{
"type": 0,
- "value": "Are you sure you want to leave "
+ "value": "Ești sigur că vrei să părăsești "
},
{
"type": 1,
@@ -1308,7 +1308,7 @@
"message.confirm-remove": [
{
"type": 0,
- "value": "Are you sure you want to remove "
+ "value": "Ești sigur că vrei să ștergi "
},
{
"type": 1,
@@ -1322,7 +1322,7 @@
"message.confirm-reset": [
{
"type": 0,
- "value": "Sunteți sigur că doriți să resetați statisticile pentru "
+ "value": "Ești sigur că vrei să resetezi statisticile pentru "
},
{
"type": 1,
@@ -1336,7 +1336,7 @@
"message.delete-team-warning": [
{
"type": 0,
- "value": "Deleting a team will also delete all team websites."
+ "value": "Ștergerea unei echipe va șterge și toate website-urile echipei."
}
],
"message.delete-website-warning": [
@@ -1358,7 +1358,7 @@
},
{
"type": 0,
- "value": " on "
+ "value": " la "
},
{
"type": 1,
@@ -1380,13 +1380,13 @@
"message.invalid-domain": [
{
"type": 0,
- "value": "Domeniu nu este valid"
+ "value": "Domeniul nu este valid"
}
],
"message.min-password-length": [
{
"type": 0,
- "value": "Minimum length of "
+ "value": "Lungimea minimă este de "
},
{
"type": 1,
@@ -1394,13 +1394,13 @@
},
{
"type": 0,
- "value": " characters"
+ "value": " caractere"
}
],
"message.new-version-available": [
{
"type": 0,
- "value": "A new version of Umami "
+ "value": "O nouă versiune de Umami "
},
{
"type": 1,
@@ -1408,19 +1408,19 @@
},
{
"type": 0,
- "value": " is available!"
+ "value": " este disponibilă!"
}
],
"message.no-data-available": [
{
"type": 0,
- "value": "Nici o informație disponibilă."
+ "value": "Nicio informație disponibilă."
}
],
"message.no-event-data": [
{
"type": 0,
- "value": "No event data is available."
+ "value": "Nu sunt disponibile date legate de eveniment."
}
],
"message.no-match-password": [
@@ -1432,31 +1432,31 @@
"message.no-results-found": [
{
"type": 0,
- "value": "No results were found."
+ "value": "Nu a fost găsit niciun rezultat."
}
],
"message.no-team-websites": [
{
"type": 0,
- "value": "This team does not have any websites."
+ "value": "Echipa aceasta nu are niciun website."
}
],
"message.no-teams": [
{
"type": 0,
- "value": "You have not created any teams."
+ "value": "Nu ai creat nicio echipă."
}
],
"message.no-users": [
{
"type": 0,
- "value": "There are no users."
+ "value": "Nu există utilizatori."
}
],
"message.no-websites-configured": [
{
"type": 0,
- "value": "Nu aveți niciun site web configurat."
+ "value": "Nu ai niciun site web configurat."
}
],
"message.page-not-found": [
@@ -1468,7 +1468,7 @@
"message.reset-website": [
{
"type": 0,
- "value": "To reset this website, type "
+ "value": "Pentru a reseta acest website, scrie "
},
{
"type": 1,
@@ -1476,7 +1476,7 @@
},
{
"type": 0,
- "value": " in the box below to confirm."
+ "value": " În câmpul de mai jos pentru a confirma."
}
],
"message.reset-website-warning": [
@@ -1508,19 +1508,19 @@
"message.team-already-member": [
{
"type": 0,
- "value": "You are already a member of the team."
+ "value": "Deja ești membru al acestei echipe."
}
],
"message.team-not-found": [
{
"type": 0,
- "value": "Team not found."
+ "value": "Echipa nu a fost găsită."
}
],
"message.team-websites-info": [
{
"type": 0,
- "value": "Websites can be viewed by anyone on the team."
+ "value": "Site-urile web pot fi vizualizate de către oricare membru al echipei."
}
],
"message.tracking-code": [
@@ -1532,37 +1532,37 @@
"message.transfer-team-website-to-user": [
{
"type": 0,
- "value": "Transfer this website to your account?"
+ "value": "Vrei să transferi acest website pe contul tău?"
}
],
"message.transfer-user-website-to-team": [
{
"type": 0,
- "value": "Select the team to transfer this website to."
+ "value": "Selectează echipa căreia vrei să îi transferi site-ul."
}
],
"message.transfer-website": [
{
"type": 0,
- "value": "Transfer website ownership to your account or another team."
+ "value": "Transferă titulatura site-ului către tine sau către o altă echipă."
}
],
"message.triggered-event": [
{
"type": 0,
- "value": "Triggered event"
+ "value": "Eveniment declanșat"
}
],
"message.user-deleted": [
{
"type": 0,
- "value": "User deleted."
+ "value": "Utilizator șters."
}
],
"message.viewed-page": [
{
"type": 0,
- "value": "Viewed page"
+ "value": "Pagină vizualizată"
}
],
"message.visitor-log": [
@@ -1602,7 +1602,7 @@
"message.visitors-dropped-off": [
{
"type": 0,
- "value": "Visitors dropped off"
+ "value": "Vizitatori care au abandonat"
}
]
}
diff --git a/public/intl/messages/ru-RU.json b/public/intl/messages/ru-RU.json
index 86949d67..7d3bd9ea 100644
--- a/public/intl/messages/ru-RU.json
+++ b/public/intl/messages/ru-RU.json
@@ -215,6 +215,12 @@
"value": "Создано"
}
],
+ "label.created-by": [
+ {
+ "type": 0,
+ "value": "Created By"
+ }
+ ],
"label.current-password": [
{
"type": 0,
diff --git a/public/intl/messages/si-LK.json b/public/intl/messages/si-LK.json
index f4e6b31b..eab794e6 100644
--- a/public/intl/messages/si-LK.json
+++ b/public/intl/messages/si-LK.json
@@ -215,6 +215,12 @@
"value": "Created"
}
],
+ "label.created-by": [
+ {
+ "type": 0,
+ "value": "Created By"
+ }
+ ],
"label.current-password": [
{
"type": 0,
diff --git a/public/intl/messages/sk-SK.json b/public/intl/messages/sk-SK.json
index dfbcd064..b1c300eb 100644
--- a/public/intl/messages/sk-SK.json
+++ b/public/intl/messages/sk-SK.json
@@ -215,6 +215,12 @@
"value": "Created"
}
],
+ "label.created-by": [
+ {
+ "type": 0,
+ "value": "Created By"
+ }
+ ],
"label.current-password": [
{
"type": 0,
diff --git a/public/intl/messages/sl-SI.json b/public/intl/messages/sl-SI.json
index 2c29c827..67524f57 100644
--- a/public/intl/messages/sl-SI.json
+++ b/public/intl/messages/sl-SI.json
@@ -215,6 +215,12 @@
"value": "Ustvarjeno"
}
],
+ "label.created-by": [
+ {
+ "type": 0,
+ "value": "Created By"
+ }
+ ],
"label.current-password": [
{
"type": 0,
diff --git a/public/intl/messages/sv-SE.json b/public/intl/messages/sv-SE.json
index 93103d51..5e3b9021 100644
--- a/public/intl/messages/sv-SE.json
+++ b/public/intl/messages/sv-SE.json
@@ -215,6 +215,12 @@
"value": "Skapad"
}
],
+ "label.created-by": [
+ {
+ "type": 0,
+ "value": "Created By"
+ }
+ ],
"label.current-password": [
{
"type": 0,
diff --git a/public/intl/messages/ta-IN.json b/public/intl/messages/ta-IN.json
index f183b55b..e5f4f36b 100644
--- a/public/intl/messages/ta-IN.json
+++ b/public/intl/messages/ta-IN.json
@@ -215,6 +215,12 @@
"value": "Created"
}
],
+ "label.created-by": [
+ {
+ "type": 0,
+ "value": "Created By"
+ }
+ ],
"label.current-password": [
{
"type": 0,
diff --git a/public/intl/messages/th-TH.json b/public/intl/messages/th-TH.json
index 0e1a70c0..f4356a50 100644
--- a/public/intl/messages/th-TH.json
+++ b/public/intl/messages/th-TH.json
@@ -215,6 +215,12 @@
"value": "Created"
}
],
+ "label.created-by": [
+ {
+ "type": 0,
+ "value": "Created By"
+ }
+ ],
"label.current-password": [
{
"type": 0,
diff --git a/public/intl/messages/tr-TR.json b/public/intl/messages/tr-TR.json
index d2fdb0a0..1bd71b56 100644
--- a/public/intl/messages/tr-TR.json
+++ b/public/intl/messages/tr-TR.json
@@ -215,6 +215,12 @@
"value": "Created"
}
],
+ "label.created-by": [
+ {
+ "type": 0,
+ "value": "Created By"
+ }
+ ],
"label.current-password": [
{
"type": 0,
diff --git a/public/intl/messages/uk-UA.json b/public/intl/messages/uk-UA.json
index 89f95612..4dd2e86d 100644
--- a/public/intl/messages/uk-UA.json
+++ b/public/intl/messages/uk-UA.json
@@ -215,6 +215,12 @@
"value": "Created"
}
],
+ "label.created-by": [
+ {
+ "type": 0,
+ "value": "Created By"
+ }
+ ],
"label.current-password": [
{
"type": 0,
diff --git a/public/intl/messages/ur-PK.json b/public/intl/messages/ur-PK.json
index 2de7bc4d..1f9ad995 100644
--- a/public/intl/messages/ur-PK.json
+++ b/public/intl/messages/ur-PK.json
@@ -215,6 +215,12 @@
"value": "Created"
}
],
+ "label.created-by": [
+ {
+ "type": 0,
+ "value": "Created By"
+ }
+ ],
"label.current-password": [
{
"type": 0,
diff --git a/public/intl/messages/vi-VN.json b/public/intl/messages/vi-VN.json
index 733278f3..254f5070 100644
--- a/public/intl/messages/vi-VN.json
+++ b/public/intl/messages/vi-VN.json
@@ -215,6 +215,12 @@
"value": "Created"
}
],
+ "label.created-by": [
+ {
+ "type": 0,
+ "value": "Created By"
+ }
+ ],
"label.current-password": [
{
"type": 0,
diff --git a/public/intl/messages/zh-CN.json b/public/intl/messages/zh-CN.json
index 85b788c5..a66d7db3 100644
--- a/public/intl/messages/zh-CN.json
+++ b/public/intl/messages/zh-CN.json
@@ -32,7 +32,7 @@
"label.add-member": [
{
"type": 0,
- "value": "Add member"
+ "value": "添加成员"
}
],
"label.add-website": [
@@ -215,6 +215,12 @@
"value": "已创建"
}
],
+ "label.created-by": [
+ {
+ "type": 0,
+ "value": "创建者"
+ }
+ ],
"label.current-password": [
{
"type": 0,
@@ -272,7 +278,7 @@
"label.delete-report": [
{
"type": 0,
- "value": "Delete report"
+ "value": "删除报告"
}
],
"label.delete-team": [
@@ -362,7 +368,7 @@
"label.edit-member": [
{
"type": 0,
- "value": "Edit member"
+ "value": "编辑成员"
}
],
"label.enable-share-url": [
@@ -588,7 +594,7 @@
"label.manage": [
{
"type": 0,
- "value": "Manage"
+ "value": "管理"
}
],
"label.max": [
@@ -600,7 +606,7 @@
"label.member": [
{
"type": 0,
- "value": "Member"
+ "value": "成员"
}
],
"label.members": [
@@ -630,7 +636,7 @@
"label.my-account": [
{
"type": 0,
- "value": "My account"
+ "value": "我的账户"
}
],
"label.my-websites": [
@@ -700,7 +706,7 @@
"label.os": [
{
"type": 0,
- "value": "OS"
+ "value": "操作系统"
}
],
"label.overview": [
@@ -718,7 +724,7 @@
"label.page-of": [
{
"type": 0,
- "value": "总"
+ "value": "总 "
},
{
"type": 1,
@@ -726,7 +732,7 @@
},
{
"type": 0,
- "value": "中的第"
+ "value": " 中的第 "
},
{
"type": 1,
@@ -734,7 +740,7 @@
},
{
"type": 0,
- "value": "页"
+ "value": " 页"
}
],
"label.page-views": [
@@ -850,7 +856,7 @@
"label.remove-member": [
{
"type": 0,
- "value": "Remove member"
+ "value": "移除成员"
}
],
"label.reports": [
@@ -922,7 +928,7 @@
"label.select": [
{
"type": 0,
- "value": "Select"
+ "value": "选择"
}
],
"label.select-date": [
@@ -934,7 +940,7 @@
"label.select-role": [
{
"type": 0,
- "value": "Select role"
+ "value": "选择角色"
}
],
"label.select-website": [
@@ -1012,7 +1018,7 @@
"label.team-view-only": [
{
"type": 0,
- "value": "Team view only"
+ "value": "仅团队视图"
}
],
"label.team-websites": [
@@ -1096,13 +1102,13 @@
"label.transfer": [
{
"type": 0,
- "value": "Transfer"
+ "value": "转移"
}
],
"label.transfer-website": [
{
"type": 0,
- "value": "Transfer website"
+ "value": "转移网站"
}
],
"label.true": [
@@ -1240,7 +1246,7 @@
"message.action-confirmation": [
{
"type": 0,
- "value": "Type "
+ "value": "在下面的框中输入 "
},
{
"type": 1,
@@ -1248,7 +1254,7 @@
},
{
"type": 0,
- "value": " in the box below to confirm."
+ "value": " 以确认。"
}
],
"message.active-users": [
@@ -1296,7 +1302,7 @@
"message.confirm-remove": [
{
"type": 0,
- "value": "Are you sure you want to remove "
+ "value": "您确定要移除 "
},
{
"type": 1,
@@ -1304,7 +1310,7 @@
},
{
"type": 0,
- "value": "?"
+ "value": " ?"
}
],
"message.confirm-reset": [
@@ -1318,13 +1324,13 @@
},
{
"type": 0,
- "value": " 的数据吗?"
+ "value": " 的数据吗?"
}
],
"message.delete-team-warning": [
{
"type": 0,
- "value": "Deleting a team will also delete all team websites."
+ "value": "删除团队也会删除所有团队的网站。"
}
],
"message.delete-website-warning": [
@@ -1346,7 +1352,7 @@
},
{
"type": 0,
- "value": "上的"
+ "value": " 上的 "
},
{
"type": 1,
@@ -1388,7 +1394,7 @@
"message.new-version-available": [
{
"type": 0,
- "value": "Umami的新版本"
+ "value": "Umami 的新版本 "
},
{
"type": 1,
@@ -1396,7 +1402,7 @@
},
{
"type": 0,
- "value": "已推出!"
+ "value": " 已推出!"
}
],
"message.no-data-available": [
@@ -1456,7 +1462,7 @@
"message.reset-website": [
{
"type": 0,
- "value": "如果确定重置该网站, 请在下面的输入框中输入 "
+ "value": "如果确定重置该网站,请在下面的输入框中输入 "
},
{
"type": 1,
@@ -1520,25 +1526,25 @@
"message.transfer-team-website-to-user": [
{
"type": 0,
- "value": "Transfer this website to your account?"
+ "value": "将该网站转入您的账户?"
}
],
"message.transfer-user-website-to-team": [
{
"type": 0,
- "value": "Select the team to transfer this website to."
+ "value": "选择要将该网站转移到哪个团队。"
}
],
"message.transfer-website": [
{
"type": 0,
- "value": "Transfer website ownership to your account or another team."
+ "value": "将网站所有权转移到您的账户或其他团队。"
}
],
"message.triggered-event": [
{
"type": 0,
- "value": "Triggered event"
+ "value": "触发事件"
}
],
"message.user-deleted": [
@@ -1550,13 +1556,13 @@
"message.viewed-page": [
{
"type": 0,
- "value": "Viewed page"
+ "value": "已浏览页面"
}
],
"message.visitor-log": [
{
"type": 0,
- "value": "来自"
+ "value": "来自 "
},
{
"type": 1,
@@ -1564,7 +1570,7 @@
},
{
"type": 0,
- "value": "的访客在搭载 "
+ "value": " 的访客在搭载 "
},
{
"type": 1,
@@ -1572,7 +1578,7 @@
},
{
"type": 0,
- "value": " 的"
+ "value": " 的 "
},
{
"type": 1,
@@ -1580,7 +1586,7 @@
},
{
"type": 0,
- "value": "上使用 "
+ "value": " 上使用 "
},
{
"type": 1,
@@ -1594,7 +1600,7 @@
"message.visitors-dropped-off": [
{
"type": 0,
- "value": "Visitors dropped off"
+ "value": "访客减少"
}
]
}
diff --git a/public/intl/messages/zh-TW.json b/public/intl/messages/zh-TW.json
index af2a37a1..f0455d43 100644
--- a/public/intl/messages/zh-TW.json
+++ b/public/intl/messages/zh-TW.json
@@ -215,6 +215,12 @@
"value": "已建立"
}
],
+ "label.created-by": [
+ {
+ "type": 0,
+ "value": "Created By"
+ }
+ ],
"label.current-password": [
{
"type": 0,
diff --git a/rollup.tracker.config.mjs b/rollup.tracker.config.mjs
index 6a692efa..05df2879 100644
--- a/rollup.tracker.config.mjs
+++ b/rollup.tracker.config.mjs
@@ -10,7 +10,8 @@ export default {
},
plugins: [
replace({
- '/api/send': process.env.COLLECT_API_ENDPOINT || '/api/send',
+ '__COLLECT_API_HOST__': process.env.COLLECT_API_HOST || '',
+ '__COLLECT_API_ENDPOINT__': process.env.COLLECT_API_ENDPOINT || '/api/send',
delimiters: ['', ''],
preventAssignment: true,
}),
diff --git a/src/app/(main)/reports/ReportsPage.tsx b/src/app/(main)/reports/ReportsPage.tsx
index 6a63c2cb..a76a6a47 100644
--- a/src/app/(main)/reports/ReportsPage.tsx
+++ b/src/app/(main)/reports/ReportsPage.tsx
@@ -1,4 +1,5 @@
'use client';
+import { Metadata } from 'next';
import ReportsHeader from './ReportsHeader';
import ReportsDataTable from './ReportsDataTable';
@@ -10,6 +11,7 @@ export default function ReportsPage({ teamId }: { teamId: string }) {
>
);
}
-export const metadata = {
+
+export const metadata: Metadata = {
title: 'Reports',
};
diff --git a/src/app/(main)/reports/[reportId]/ReportDetails.tsx b/src/app/(main)/reports/[reportId]/ReportDetails.tsx
deleted file mode 100644
index 40d58e92..00000000
--- a/src/app/(main)/reports/[reportId]/ReportDetails.tsx
+++ /dev/null
@@ -1,28 +0,0 @@
-import FunnelReport from '../funnel/FunnelReport';
-import EventDataReport from '../event-data/EventDataReport';
-import InsightsReport from '../insights/InsightsReport';
-import RetentionReport from '../retention/RetentionReport';
-import { useApi } from 'components/hooks';
-
-const reports = {
- funnel: FunnelReport,
- 'event-data': EventDataReport,
- insights: InsightsReport,
- retention: RetentionReport,
-};
-
-export default function ReportDetails({ reportId }: { reportId: string }) {
- const { get, useQuery } = useApi();
- const { data: report } = useQuery({
- queryKey: ['reports', reportId],
- queryFn: () => get(`/reports/${reportId}`),
- });
-
- if (!report) {
- return null;
- }
-
- const ReportComponent = reports[report.type];
-
- return ;
-}
diff --git a/src/app/(main)/reports/[reportId]/ReportPage.tsx b/src/app/(main)/reports/[reportId]/ReportPage.tsx
index 227efa8d..7ecebd31 100644
--- a/src/app/(main)/reports/[reportId]/ReportPage.tsx
+++ b/src/app/(main)/reports/[reportId]/ReportPage.tsx
@@ -1,6 +1,27 @@
'use client';
-import ReportDetails from './ReportDetails';
+import FunnelReport from '../funnel/FunnelReport';
+import EventDataReport from '../event-data/EventDataReport';
+import InsightsReport from '../insights/InsightsReport';
+import RetentionReport from '../retention/RetentionReport';
+import UTMReport from '../utm/UTMReport';
+import { useReport } from 'components/hooks';
-export default function ReportPage({ reportId }) {
- return ;
+const reports = {
+ funnel: FunnelReport,
+ 'event-data': EventDataReport,
+ insights: InsightsReport,
+ retention: RetentionReport,
+ utm: UTMReport,
+};
+
+export default function ReportPage({ reportId }: { reportId: string }) {
+ const { report } = useReport(reportId);
+
+ if (!report) {
+ return null;
+ }
+
+ const ReportComponent = reports[report.type];
+
+ return ;
}
diff --git a/src/app/(main)/reports/create/ReportTemplates.tsx b/src/app/(main)/reports/create/ReportTemplates.tsx
index ae84046a..1bd84aec 100644
--- a/src/app/(main)/reports/create/ReportTemplates.tsx
+++ b/src/app/(main)/reports/create/ReportTemplates.tsx
@@ -4,6 +4,7 @@ import PageHeader from 'components/layout/PageHeader';
import Funnel from 'assets/funnel.svg';
import Lightbulb from 'assets/lightbulb.svg';
import Magnet from 'assets/magnet.svg';
+import Tag from 'assets/tag.svg';
import styles from './ReportTemplates.module.css';
import { useMessages, useTeamUrl } from 'components/hooks';
@@ -30,6 +31,12 @@ export function ReportTemplates({ showHeader = true }: { showHeader?: boolean })
url: renderTeamUrl('/reports/retention'),
icon: ,
},
+ {
+ title: formatMessage(labels.utm),
+ description: formatMessage(labels.utmDescription),
+ url: renderTeamUrl('/reports/utm'),
+ icon: ,
+ },
];
return (
diff --git a/src/app/(main)/reports/insights/InsightsParameters.tsx b/src/app/(main)/reports/insights/InsightsParameters.tsx
index 4aaa9abd..a3e4e72f 100644
--- a/src/app/(main)/reports/insights/InsightsParameters.tsx
+++ b/src/app/(main)/reports/insights/InsightsParameters.tsx
@@ -53,11 +53,11 @@ export function InsightsParameters() {
filters,
};
- const handleSubmit = values => {
+ const handleSubmit = (values: any) => {
runReport(values);
};
- const handleAdd = (id, value) => {
+ const handleAdd = (id: string | number, value: { name: any }) => {
const data = parameterData[id];
if (!data.find(({ name }) => name === value.name)) {
@@ -65,7 +65,7 @@ export function InsightsParameters() {
}
};
- const handleRemove = (id, index) => {
+ const handleRemove = (id: string, index: number) => {
const data = [...parameterData[id]];
data.splice(index, 1);
updateReport({ parameters: { [id]: data } });
diff --git a/src/app/(main)/reports/retention/RetentionReportPage.tsx b/src/app/(main)/reports/retention/RetentionReportPage.tsx
index f2500fb2..4d3e19e9 100644
--- a/src/app/(main)/reports/retention/RetentionReportPage.tsx
+++ b/src/app/(main)/reports/retention/RetentionReportPage.tsx
@@ -1,6 +1,11 @@
'use client';
+import { Metadata } from 'next';
import RetentionReport from './RetentionReport';
export default function RetentionReportPage() {
return ;
}
+
+export const metadata: Metadata = {
+ title: 'Retention Report',
+};
diff --git a/src/app/(main)/reports/utm/UTMParameters.tsx b/src/app/(main)/reports/utm/UTMParameters.tsx
new file mode 100644
index 00000000..c76df77d
--- /dev/null
+++ b/src/app/(main)/reports/utm/UTMParameters.tsx
@@ -0,0 +1,36 @@
+import { useContext } from 'react';
+import { useMessages } from 'components/hooks';
+import { Form, FormButtons, SubmitButton } from 'react-basics';
+import { ReportContext } from '../[reportId]/Report';
+import BaseParameters from '../[reportId]/BaseParameters';
+
+export function UTMParameters() {
+ const { report, runReport, isRunning } = useContext(ReportContext);
+ const { formatMessage, labels } = useMessages();
+
+ const { id, parameters } = report || {};
+ const { websiteId, dateRange } = parameters || {};
+ const queryDisabled = !websiteId || !dateRange;
+
+ const handleSubmit = (data: any, e: any) => {
+ e.stopPropagation();
+ e.preventDefault();
+
+ if (!queryDisabled) {
+ runReport(data);
+ }
+ };
+
+ return (
+
+ );
+}
+
+export default UTMParameters;
diff --git a/src/app/(main)/reports/utm/UTMReport.tsx b/src/app/(main)/reports/utm/UTMReport.tsx
new file mode 100644
index 00000000..7183b9f7
--- /dev/null
+++ b/src/app/(main)/reports/utm/UTMReport.tsx
@@ -0,0 +1,28 @@
+'use client';
+import Report from '../[reportId]/Report';
+import ReportHeader from '../[reportId]/ReportHeader';
+import ReportMenu from '../[reportId]/ReportMenu';
+import ReportBody from '../[reportId]/ReportBody';
+import UTMParameters from './UTMParameters';
+import UTMView from './UTMView';
+import Tag from 'assets/tag.svg';
+import { REPORT_TYPES } from 'lib/constants';
+
+const defaultParameters = {
+ type: REPORT_TYPES.utm,
+ parameters: {},
+};
+
+export default function UTMReport({ reportId }: { reportId?: string }) {
+ return (
+
+ } />
+
+
+
+
+
+
+
+ );
+}
diff --git a/src/app/(main)/reports/utm/UTMReportPage.tsx b/src/app/(main)/reports/utm/UTMReportPage.tsx
new file mode 100644
index 00000000..926a4263
--- /dev/null
+++ b/src/app/(main)/reports/utm/UTMReportPage.tsx
@@ -0,0 +1,5 @@
+import UTMReport from './UTMReport';
+
+export default function UTMReportPage() {
+ return ;
+}
diff --git a/src/app/(main)/reports/utm/UTMView.module.css b/src/app/(main)/reports/utm/UTMView.module.css
new file mode 100644
index 00000000..9792e0f3
--- /dev/null
+++ b/src/app/(main)/reports/utm/UTMView.module.css
@@ -0,0 +1,14 @@
+.title {
+ font-size: 18px;
+ line-height: 36px;
+ font-weight: 700;
+}
+
+.row {
+ display: grid;
+ grid-template-columns: 50% 50%;
+ gap: 20px;
+ border-bottom: 1px solid var(--base300);
+ padding-bottom: 30px;
+ margin-bottom: 30px;
+}
diff --git a/src/app/(main)/reports/utm/UTMView.tsx b/src/app/(main)/reports/utm/UTMView.tsx
new file mode 100644
index 00000000..48fb6497
--- /dev/null
+++ b/src/app/(main)/reports/utm/UTMView.tsx
@@ -0,0 +1,65 @@
+import { useContext } from 'react';
+import { firstBy } from 'thenby';
+import { ReportContext } from '../[reportId]/Report';
+import { CHART_COLORS, UTM_PARAMS } from 'lib/constants';
+import PieChart from 'components/charts/PieChart';
+import ListTable from 'components/metrics/ListTable';
+import styles from './UTMView.module.css';
+import { useMessages } from 'components/hooks';
+
+function toArray(data: { [key: string]: number }) {
+ return Object.keys(data)
+ .map(key => {
+ return { name: key, value: data[key] };
+ })
+ .sort(firstBy('value', -1));
+}
+
+export default function UTMView() {
+ const { formatMessage, labels } = useMessages();
+ const { report } = useContext(ReportContext);
+ const { data } = report || {};
+
+ if (!data) {
+ return null;
+ }
+
+ return (
+
+ {UTM_PARAMS.map(key => {
+ const items = toArray(data[key]);
+ const chartData = {
+ labels: items.map(({ name }) => name),
+ datasets: [
+ {
+ data: items.map(({ value }) => value),
+ backgroundColor: CHART_COLORS,
+ },
+ ],
+ };
+ const total = items.reduce((sum, { value }) => {
+ return +sum + +value;
+ }, 0);
+
+ return (
+
+
+
{key}
+
({
+ x: name,
+ y: value,
+ z: (value / total) * 100,
+ }))}
+ />
+
+
+
+ );
+ })}
+
+ );
+}
diff --git a/src/app/(main)/reports/utm/page.tsx b/src/app/(main)/reports/utm/page.tsx
new file mode 100644
index 00000000..12b6cc5b
--- /dev/null
+++ b/src/app/(main)/reports/utm/page.tsx
@@ -0,0 +1,10 @@
+import { Metadata } from 'next';
+import UTMReportPage from './UTMReportPage';
+
+export default function () {
+ return ;
+}
+
+export const metadata: Metadata = {
+ title: 'UTM Report',
+};
diff --git a/src/app/(main)/websites/[websiteId]/realtime/Realtime.module.css b/src/app/(main)/websites/[websiteId]/realtime/Realtime.module.css
deleted file mode 100644
index 465be551..00000000
--- a/src/app/(main)/websites/[websiteId]/realtime/Realtime.module.css
+++ /dev/null
@@ -1,16 +0,0 @@
-.container {
- display: flex;
-}
-
-.chart {
- margin-bottom: 30px;
-}
-
-.sticky {
- position: fixed;
- top: 0;
- background: var(--base50);
- border-bottom: 1px solid var(--base300);
- z-index: 1;
- padding: 10px 0;
-}
diff --git a/src/app/(main)/websites/[websiteId]/realtime/Realtime.tsx b/src/app/(main)/websites/[websiteId]/realtime/Realtime.tsx
deleted file mode 100644
index 6314fbb8..00000000
--- a/src/app/(main)/websites/[websiteId]/realtime/Realtime.tsx
+++ /dev/null
@@ -1,113 +0,0 @@
-import { useMemo, useState, useEffect } from 'react';
-import { subMinutes, startOfMinute } from 'date-fns';
-import thenby from 'thenby';
-import { Grid, GridRow } from 'components/layout/Grid';
-import Page from 'components/layout/Page';
-import RealtimeChart from 'components/metrics/RealtimeChart';
-import WorldMap from 'components/metrics/WorldMap';
-import { useApi, useWebsite } from 'components/hooks';
-import { percentFilter } from 'lib/filters';
-import { REALTIME_RANGE, REALTIME_INTERVAL } from 'lib/constants';
-import { RealtimeData } from 'lib/types';
-import RealtimeLog from './RealtimeLog';
-import RealtimeHeader from './RealtimeHeader';
-import RealtimeUrls from './RealtimeUrls';
-import RealtimeCountries from './RealtimeCountries';
-import WebsiteHeader from '../WebsiteHeader';
-import styles from './Realtime.module.css';
-
-function mergeData(state = [], data = [], time: number) {
- const ids = state.map(({ id }) => id);
- return state
- .concat(data.filter(({ id }) => !ids.includes(id)))
- .filter(({ timestamp }) => timestamp >= time);
-}
-
-export function Realtime({ websiteId }) {
- const [currentData, setCurrentData] = useState();
- const { get, useQuery } = useApi();
- const { data: website } = useWebsite(websiteId);
- const { data, isLoading, error } = useQuery({
- queryKey: ['realtime', websiteId],
- queryFn: () => get(`/realtime/${websiteId}`, { startAt: currentData?.timestamp || 0 }),
- enabled: !!(websiteId && website),
- refetchInterval: REALTIME_INTERVAL,
- });
-
- useEffect(() => {
- if (data) {
- const date = subMinutes(startOfMinute(new Date()), REALTIME_RANGE);
- const time = date.getTime();
- const { pageviews, sessions, events, timestamp } = data;
-
- setCurrentData(state => ({
- pageviews: mergeData(state?.pageviews, pageviews, time),
- sessions: mergeData(state?.sessions, sessions, time),
- events: mergeData(state?.events, events, time),
- timestamp,
- }));
- }
- }, [data]);
-
- const realtimeData: RealtimeData = useMemo(() => {
- if (!currentData) {
- return { pageviews: [], sessions: [], events: [], countries: [], visitors: [], timestamp: 0 };
- }
-
- currentData.countries = percentFilter(
- currentData.sessions
- .reduce((arr, data) => {
- if (!arr.find(({ id }) => id === data.id)) {
- return arr.concat(data);
- }
- return arr;
- }, [])
- .reduce((arr: { x: any; y: number }[], { country }: any) => {
- if (country) {
- const row = arr.find(({ x }) => x === country);
-
- if (!row) {
- arr.push({ x: country, y: 1 });
- } else {
- row.y += 1;
- }
- }
- return arr;
- }, [])
- .sort(thenby.firstBy('y', -1)),
- );
-
- currentData.visitors = currentData.sessions.reduce((arr, val) => {
- if (!arr.find(({ id }) => id === val.id)) {
- return arr.concat(val);
- }
- return arr;
- }, []);
-
- return currentData;
- }, [currentData]);
-
- if (isLoading || error) {
- return ;
- }
-
- return (
- <>
-
-
-
-
-
-
-
-
-
-
-
-
-
- >
- );
-}
-
-export default Realtime;
diff --git a/src/app/(main)/websites/[websiteId]/realtime/RealtimeLog.module.css b/src/app/(main)/websites/[websiteId]/realtime/RealtimeLog.module.css
index fb5fdecf..19d02384 100644
--- a/src/app/(main)/websites/[websiteId]/realtime/RealtimeLog.module.css
+++ b/src/app/(main)/websites/[websiteId]/realtime/RealtimeLog.module.css
@@ -35,11 +35,6 @@
overflow: hidden;
}
-.website {
- text-align: right;
- padding: 0 20px;
-}
-
.detail {
display: flex;
align-items: center;
diff --git a/src/app/(main)/websites/[websiteId]/realtime/RealtimeLog.tsx b/src/app/(main)/websites/[websiteId]/realtime/RealtimeLog.tsx
index d9aad35b..c26d0629 100644
--- a/src/app/(main)/websites/[websiteId]/realtime/RealtimeLog.tsx
+++ b/src/app/(main)/websites/[websiteId]/realtime/RealtimeLog.tsx
@@ -1,4 +1,4 @@
-import { useMemo, useState } from 'react';
+import { useContext, useMemo, useState } from 'react';
import { StatusLight, Icon, Text, SearchField } from 'react-basics';
import { FixedSizeList } from 'react-window';
import { format } from 'date-fns';
@@ -11,6 +11,8 @@ import Icons from 'components/icons';
import useFormat from 'components//hooks/useFormat';
import { BROWSERS } from 'lib/constants';
import { stringToColor } from 'lib/format';
+import { RealtimeData } from 'lib/types';
+import { WebsiteContext } from '../WebsiteProvider';
import styles from './RealtimeLog.module.css';
const TYPE_ALL = 'all';
@@ -24,7 +26,8 @@ const icons = {
[TYPE_EVENT]: ,
};
-export function RealtimeLog({ data, websiteDomain }) {
+export function RealtimeLog({ data }: { data: RealtimeData }) {
+ const website = useContext(WebsiteContext);
const [search, setSearch] = useState('');
const { formatMessage, labels, messages, FormattedMessage } = useMessages();
const { formatValue } = useFormat();
@@ -76,7 +79,7 @@ export function RealtimeLog({ data, websiteDomain }) {
event: {eventName || formatMessage(labels.unknown)},
url: (
(FILTER_REFERRERS);
@@ -31,7 +27,7 @@ export function RealtimeUrls({
];
const renderLink = ({ x }) => {
- const domain = x.startsWith('/') ? websiteDomain : '';
+ const domain = x.startsWith('/') ? website?.domain : '';
return (
{x}
diff --git a/src/app/(main)/websites/[websiteId]/realtime/WebsiteRealtimePage.tsx b/src/app/(main)/websites/[websiteId]/realtime/WebsiteRealtimePage.tsx
index 7e538812..8c1e3800 100644
--- a/src/app/(main)/websites/[websiteId]/realtime/WebsiteRealtimePage.tsx
+++ b/src/app/(main)/websites/[websiteId]/realtime/WebsiteRealtimePage.tsx
@@ -1,6 +1,40 @@
'use client';
-import Realtime from './Realtime';
+import { Grid, GridRow } from 'components/layout/Grid';
+import Page from 'components/layout/Page';
+import RealtimeChart from 'components/metrics/RealtimeChart';
+import WorldMap from 'components/metrics/WorldMap';
+import { useRealtime } from 'components/hooks';
+import RealtimeLog from './RealtimeLog';
+import RealtimeHeader from './RealtimeHeader';
+import RealtimeUrls from './RealtimeUrls';
+import RealtimeCountries from './RealtimeCountries';
+import WebsiteHeader from '../WebsiteHeader';
+import WebsiteProvider from '../WebsiteProvider';
-export default function WebsiteRealtimePage({ websiteId }) {
- return ;
+export function WebsiteRealtimePage({ websiteId }) {
+ const { data, isLoading, error } = useRealtime(websiteId);
+
+ if (isLoading || error) {
+ return ;
+ }
+
+ return (
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ );
}
+
+export default WebsiteRealtimePage;
diff --git a/src/assets/bookmark.svg b/src/assets/bookmark.svg
new file mode 100644
index 00000000..5abc5ed2
--- /dev/null
+++ b/src/assets/bookmark.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/assets/flag.svg b/src/assets/flag.svg
new file mode 100644
index 00000000..c3750585
--- /dev/null
+++ b/src/assets/flag.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/assets/speaker.svg b/src/assets/speaker.svg
new file mode 100644
index 00000000..f243a494
--- /dev/null
+++ b/src/assets/speaker.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/assets/tag.svg b/src/assets/tag.svg
new file mode 100644
index 00000000..0e0f3668
--- /dev/null
+++ b/src/assets/tag.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/assets/visitor.svg b/src/assets/visitor.svg
index 4aeceafc..829eb8e1 100644
--- a/src/assets/visitor.svg
+++ b/src/assets/visitor.svg
@@ -1 +1 @@
-
\ No newline at end of file
+
\ No newline at end of file
diff --git a/src/components/charts/BarChart.tsx b/src/components/charts/BarChart.tsx
new file mode 100644
index 00000000..09ff5154
--- /dev/null
+++ b/src/components/charts/BarChart.tsx
@@ -0,0 +1,85 @@
+import { useTheme } from 'components/hooks';
+import Chart, { ChartProps } from 'components/charts/Chart';
+import { renderNumberLabels } from 'lib/charts';
+import { useState } from 'react';
+import BarChartTooltip from 'components/charts/BarChartTooltip';
+
+export interface BarChartProps extends ChartProps {
+ unit: string;
+ stacked?: boolean;
+ renderXLabel?: (label: string, index: number, values: any[]) => string;
+ renderYLabel?: (label: string, index: number, values: any[]) => string;
+ XAxisType?: string;
+ YAxisType?: string;
+}
+
+export function BarChart(props: BarChartProps) {
+ const [tooltip, setTooltip] = useState(null);
+ const { colors } = useTheme();
+ const {
+ renderXLabel,
+ renderYLabel,
+ unit,
+ XAxisType = 'time',
+ YAxisType = 'linear',
+ stacked = false,
+ } = props;
+
+ const options = {
+ scales: {
+ x: {
+ type: XAxisType,
+ stacked: true,
+ time: {
+ unit,
+ },
+ grid: {
+ display: false,
+ },
+ border: {
+ color: colors.chart.line,
+ },
+ ticks: {
+ color: colors.chart.text,
+ autoSkip: false,
+ maxRotation: 0,
+ callback: renderXLabel,
+ },
+ },
+ y: {
+ type: YAxisType,
+ min: 0,
+ beginAtZero: true,
+ stacked,
+ grid: {
+ color: colors.chart.line,
+ },
+ border: {
+ color: colors.chart.line,
+ },
+ ticks: {
+ color: colors.chart.text,
+ callback: renderYLabel || renderNumberLabels,
+ },
+ },
+ },
+ };
+
+ const handleTooltip = ({ tooltip }: { tooltip: any }) => {
+ const { opacity } = tooltip;
+
+ setTooltip(opacity ? : null);
+ };
+
+ return (
+
+ );
+}
+
+export default BarChart;
diff --git a/src/components/charts/BarChartTooltip.tsx b/src/components/charts/BarChartTooltip.tsx
new file mode 100644
index 00000000..b81d55fe
--- /dev/null
+++ b/src/components/charts/BarChartTooltip.tsx
@@ -0,0 +1,32 @@
+import { formatDate } from 'lib/date';
+import { Flexbox, StatusLight } from 'react-basics';
+import { formatLongNumber } from 'lib/format';
+import { useLocale } from 'components/hooks';
+
+const formats = {
+ millisecond: 'T',
+ second: 'pp',
+ minute: 'p',
+ hour: 'h:mm aaa - PP',
+ day: 'PPPP',
+ week: 'PPPP',
+ month: 'LLLL yyyy',
+ quarter: 'qqq',
+ year: 'yyyy',
+};
+
+export default function BarChartTooltip({ tooltip, unit }) {
+ const { locale } = useLocale();
+ const { labelColors, dataPoints } = tooltip;
+
+ return (
+
+ {formatDate(new Date(dataPoints[0].raw.x), formats[unit], locale)}
+
+
+ {formatLongNumber(dataPoints[0].raw.y)} {dataPoints[0].dataset.label}
+
+
+
+ );
+}
diff --git a/src/components/metrics/BarChart.module.css b/src/components/charts/Chart.module.css
similarity index 62%
rename from src/components/metrics/BarChart.module.css
rename to src/components/charts/Chart.module.css
index 6af22abe..ee61f29b 100644
--- a/src/components/metrics/BarChart.module.css
+++ b/src/components/charts/Chart.module.css
@@ -1,7 +1,3 @@
-.container {
- display: grid;
-}
-
.chart {
position: relative;
height: 400px;
@@ -13,7 +9,3 @@
flex-direction: column;
gap: 10px;
}
-
-.tooltip .value {
- text-transform: lowercase;
-}
diff --git a/src/components/charts/Chart.tsx b/src/components/charts/Chart.tsx
new file mode 100644
index 00000000..abaa6eb8
--- /dev/null
+++ b/src/components/charts/Chart.tsx
@@ -0,0 +1,141 @@
+import { useState, useRef, useEffect, ReactNode } from 'react';
+import { Loading } from 'react-basics';
+import classNames from 'classnames';
+import ChartJS, { LegendItem } from 'chart.js/auto';
+import HoverTooltip from 'components/common/HoverTooltip';
+import Legend from 'components/metrics/Legend';
+import { DEFAULT_ANIMATION_DURATION } from 'lib/constants';
+import styles from './Chart.module.css';
+
+export interface ChartProps {
+ type?: 'bar' | 'bubble' | 'doughnut' | 'pie' | 'line' | 'polarArea' | 'radar' | 'scatter';
+ data?: object;
+ isLoading?: boolean;
+ animationDuration?: number;
+ updateMode?: string;
+ onCreate?: (chart: any) => void;
+ onUpdate?: (chart: any) => void;
+ onTooltip?: (model: any) => void;
+ className?: string;
+ chartOptions?: { [key: string]: any };
+ tooltip?: ReactNode;
+}
+
+export function Chart({
+ type,
+ data,
+ isLoading = false,
+ animationDuration = DEFAULT_ANIMATION_DURATION,
+ tooltip,
+ updateMode,
+ onCreate,
+ onUpdate,
+ onTooltip,
+ className,
+ chartOptions,
+}: ChartProps) {
+ const canvas = useRef();
+ const chart = useRef(null);
+ const [legendItems, setLegendItems] = useState([]);
+
+ const options = {
+ responsive: true,
+ maintainAspectRatio: false,
+ animation: {
+ duration: animationDuration,
+ resize: {
+ duration: 0,
+ },
+ active: {
+ duration: 0,
+ },
+ },
+ plugins: {
+ legend: {
+ display: false,
+ },
+ tooltip: {
+ enabled: false,
+ external: onTooltip,
+ },
+ },
+ ...chartOptions,
+ };
+
+ const createChart = (data: any) => {
+ ChartJS.defaults.font.family = 'Inter';
+
+ chart.current = new ChartJS(canvas.current, {
+ type,
+ data,
+ options,
+ });
+
+ onCreate?.(chart.current);
+
+ setLegendItems(chart.current.legend.legendItems);
+ };
+
+ const updateChart = (data: any) => {
+ chart.current.data.datasets.forEach((dataset: { data: any }, index: string | number) => {
+ dataset.data = data?.datasets[index]?.data;
+ });
+
+ chart.current.options = options;
+
+ // Allow config changes before update
+ onUpdate?.(chart.current);
+
+ chart.current.update(updateMode);
+
+ setLegendItems(chart.current.legend.legendItems);
+ };
+
+ useEffect(() => {
+ if (data) {
+ if (!chart.current) {
+ createChart(data);
+ } else {
+ updateChart(data);
+ }
+ }
+ }, [data]);
+
+ const handleLegendClick = (item: LegendItem) => {
+ if (type === 'bar') {
+ const { datasetIndex } = item;
+ const meta = chart.current.getDatasetMeta(datasetIndex);
+
+ meta.hidden =
+ meta.hidden === null ? !chart.current.data.datasets[datasetIndex]?.hidden : null;
+ } else {
+ const { index } = item;
+ const meta = chart.current.getDatasetMeta(0);
+ const hidden = !!meta.data[index].hidden;
+
+ meta.data[index].hidden = !hidden;
+ chart.current.legend.legendItems[index].hidden = !hidden;
+ }
+
+ chart.current.update(updateMode);
+
+ setLegendItems(chart.current.legend.legendItems);
+ };
+
+ return (
+ <>
+
+ {isLoading && }
+
+
+
+ {tooltip && (
+
+ {tooltip}
+
+ )}
+ >
+ );
+}
+
+export default Chart;
diff --git a/src/components/charts/PieChart.tsx b/src/components/charts/PieChart.tsx
new file mode 100644
index 00000000..11ad125c
--- /dev/null
+++ b/src/components/charts/PieChart.tsx
@@ -0,0 +1,27 @@
+import { Chart, ChartProps } from 'components/charts/Chart';
+import { useState } from 'react';
+import { StatusLight } from 'react-basics';
+import { formatLongNumber } from 'lib/format';
+
+export interface PieChartProps extends ChartProps {
+ type?: 'doughnut' | 'pie';
+}
+
+export default function PieChart(props: PieChartProps) {
+ const [tooltip, setTooltip] = useState(null);
+ const { type } = props;
+
+ const handleTooltip = ({ tooltip }) => {
+ const { labelColors, dataPoints } = tooltip;
+
+ setTooltip(
+ tooltip.opacity ? (
+
+ {formatLongNumber(dataPoints?.[0]?.raw)} {dataPoints?.[0]?.label}
+
+ ) : null,
+ );
+ };
+
+ return ;
+}
diff --git a/src/components/common/Breadcrumb.module.css b/src/components/common/Breadcrumb.module.css
index 70d88f36..73e72bc6 100644
--- a/src/components/common/Breadcrumb.module.css
+++ b/src/components/common/Breadcrumb.module.css
@@ -1,5 +1,5 @@
.bar {
- font-size: 11px;
+ font-size: 14px;
font-weight: 700;
text-transform: uppercase;
color: var(--base600);
diff --git a/src/components/common/Breadcrumb.tsx b/src/components/common/Breadcrumb.tsx
index fa7bde15..ebdce497 100644
--- a/src/components/common/Breadcrumb.tsx
+++ b/src/components/common/Breadcrumb.tsx
@@ -1,6 +1,7 @@
import Link from 'next/link';
import { Flexbox, Icon, Icons, Text } from 'react-basics';
import styles from './Breadcrumb.module.css';
+import { Fragment } from 'react';
export interface BreadcrumbProps {
data: {
@@ -14,7 +15,7 @@ export function Breadcrumb({ data }: BreadcrumbProps) {
{data.map((a, i) => {
return (
- <>
+
{a.url ? (
{a.label}
@@ -27,7 +28,7 @@ export function Breadcrumb({ data }: BreadcrumbProps) {
) : null}
- >
+
);
})}
diff --git a/src/components/common/FilterLink.tsx b/src/components/common/FilterLink.tsx
index 2a4747ff..ef278ed2 100644
--- a/src/components/common/FilterLink.tsx
+++ b/src/components/common/FilterLink.tsx
@@ -1,10 +1,9 @@
+import classNames from 'classnames';
+import { useMessages, useNavigation } from 'components/hooks';
+import { safeDecodeURIComponent } from 'next-basics';
+import Link from 'next/link';
import { ReactNode } from 'react';
import { Icon, Icons } from 'react-basics';
-import classNames from 'classnames';
-import Link from 'next/link';
-import { safeDecodeURI } from 'next-basics';
-import { useNavigation } from 'components/hooks';
-import { useMessages } from 'components/hooks';
import styles from './FilterLink.module.css';
export interface FilterLinkProps {
@@ -40,7 +39,7 @@ export function FilterLink({
{!value && `(${label || formatMessage(labels.unknown)})`}
{value && (
- {safeDecodeURI(label || value)}
+ {safeDecodeURIComponent(label || value)}
)}
{externalUrl && (
diff --git a/src/components/hooks/index.ts b/src/components/hooks/index.ts
index 560d48a0..a737ba20 100644
--- a/src/components/hooks/index.ts
+++ b/src/components/hooks/index.ts
@@ -2,6 +2,7 @@ export * from './queries/useApi';
export * from './queries/useConfig';
export * from './queries/useFilterQuery';
export * from './queries/useLogin';
+export * from './queries/useRealtime';
export * from './queries/useReport';
export * from './queries/useReports';
export * from './queries/useShareToken';
diff --git a/src/components/hooks/queries/useRealtime.ts b/src/components/hooks/queries/useRealtime.ts
new file mode 100644
index 00000000..ccf6a62d
--- /dev/null
+++ b/src/components/hooks/queries/useRealtime.ts
@@ -0,0 +1,87 @@
+import { useMemo, useRef } from 'react';
+import { RealtimeData } from 'lib/types';
+import { useApi } from 'components/hooks';
+import { REALTIME_INTERVAL, REALTIME_RANGE } from 'lib/constants';
+import { startOfMinute, subMinutes } from 'date-fns';
+import { percentFilter } from 'lib/filters';
+import thenby from 'thenby';
+
+function mergeData(state = [], data = [], time: number) {
+ const ids = state.map(({ id }) => id);
+ return state
+ .concat(data.filter(({ id }) => !ids.includes(id)))
+ .filter(({ timestamp }) => timestamp >= time);
+}
+
+export function useRealtime(websiteId: string) {
+ const currentData = useRef({
+ pageviews: [],
+ sessions: [],
+ events: [],
+ countries: [],
+ visitors: [],
+ timestamp: 0,
+ });
+ const { get, useQuery } = useApi();
+ const { data, isLoading, error } = useQuery({
+ queryKey: ['realtime', websiteId],
+ queryFn: async () => {
+ const state = currentData.current;
+ const data = await get(`/realtime/${websiteId}`, { startAt: state?.timestamp || 0 });
+ const date = subMinutes(startOfMinute(new Date()), REALTIME_RANGE);
+ const time = date.getTime();
+ const { pageviews, sessions, events, timestamp } = data;
+
+ return {
+ pageviews: mergeData(state?.pageviews, pageviews, time),
+ sessions: mergeData(state?.sessions, sessions, time),
+ events: mergeData(state?.events, events, time),
+ timestamp,
+ };
+ },
+ enabled: !!websiteId,
+ refetchInterval: REALTIME_INTERVAL,
+ });
+
+ const realtimeData: RealtimeData = useMemo(() => {
+ if (!data) {
+ return { pageviews: [], sessions: [], events: [], countries: [], visitors: [], timestamp: 0 };
+ }
+
+ data.countries = percentFilter(
+ data.sessions
+ .reduce((arr, data) => {
+ if (!arr.find(({ id }) => id === data.id)) {
+ return arr.concat(data);
+ }
+ return arr;
+ }, [])
+ .reduce((arr: { x: any; y: number }[], { country }: any) => {
+ if (country) {
+ const row = arr.find(({ x }) => x === country);
+
+ if (!row) {
+ arr.push({ x: country, y: 1 });
+ } else {
+ row.y += 1;
+ }
+ }
+ return arr;
+ }, [])
+ .sort(thenby.firstBy('y', -1)),
+ );
+
+ data.visitors = data.sessions.reduce((arr, val) => {
+ if (!arr.find(({ id }) => id === val.id)) {
+ return arr.concat(val);
+ }
+ return arr;
+ }, []);
+
+ return data;
+ }, [data]);
+
+ return { data: realtimeData, isLoading, error };
+}
+
+export default useRealtime;
diff --git a/src/components/hooks/queries/useReport.ts b/src/components/hooks/queries/useReport.ts
index 38061761..ef571d00 100644
--- a/src/components/hooks/queries/useReport.ts
+++ b/src/components/hooks/queries/useReport.ts
@@ -4,7 +4,7 @@ import { useApi } from './useApi';
import { useTimezone } from '../useTimezone';
import { useMessages } from '../useMessages';
-export function useReport(reportId: string, defaultParameters: { [key: string]: any }) {
+export function useReport(reportId: string, defaultParameters: { [key: string]: any } = {}) {
const [report, setReport] = useState(null);
const [isRunning, setIsRunning] = useState(false);
const { get, post } = useApi();
diff --git a/src/components/hooks/useTheme.ts b/src/components/hooks/useTheme.ts
index 099bf962..f2a2d448 100644
--- a/src/components/hooks/useTheme.ts
+++ b/src/components/hooks/useTheme.ts
@@ -1,19 +1,13 @@
import { useEffect } from 'react';
import useStore, { setTheme } from 'store/app';
import { getItem, setItem } from 'next-basics';
-import { THEME_COLORS, THEME_CONFIG } from 'lib/constants';
+import { DEFAULT_THEME, THEME_COLORS, THEME_CONFIG } from 'lib/constants';
import { colord } from 'colord';
const selector = (state: { theme: string }) => state.theme;
export function useTheme() {
- const defaultTheme =
- typeof window !== 'undefined'
- ? window?.matchMedia('(prefers-color-scheme: dark)')?.matches
- ? 'dark'
- : 'light'
- : 'light';
- const theme = useStore(selector) || getItem(THEME_CONFIG) || defaultTheme;
+ const theme = useStore(selector) || getItem(THEME_CONFIG) || DEFAULT_THEME;
const primaryColor = colord(THEME_COLORS[theme].primary);
const colors = {
diff --git a/src/components/input/DateFilter.tsx b/src/components/input/DateFilter.tsx
index afe44e6f..f025da97 100644
--- a/src/components/input/DateFilter.tsx
+++ b/src/components/input/DateFilter.tsx
@@ -32,18 +32,14 @@ export function DateFilter({
const { locale } = useLocale();
const options = [
- { label: formatMessage(labels.today), value: '1day' },
+ { label: formatMessage(labels.today), value: '0day' },
{
label: formatMessage(labels.lastHours, { x: 24 }),
value: '24hour',
},
- {
- label: formatMessage(labels.yesterday),
- value: '-1day',
- },
{
label: formatMessage(labels.thisWeek),
- value: '1week',
+ value: '0week',
divider: true,
},
{
@@ -52,7 +48,7 @@ export function DateFilter({
},
{
label: formatMessage(labels.thisMonth),
- value: '1month',
+ value: '0month',
divider: true,
},
{
@@ -63,7 +59,7 @@ export function DateFilter({
label: formatMessage(labels.lastDays, { x: 90 }),
value: '90day',
},
- { label: formatMessage(labels.thisYear), value: '1year' },
+ { label: formatMessage(labels.thisYear), value: '0year' },
showAllTime && {
label: formatMessage(labels.allTime),
value: 'all',
diff --git a/src/components/messages.ts b/src/components/messages.ts
index 36bdf057..9f2deb84 100644
--- a/src/components/messages.ts
+++ b/src/components/messages.ts
@@ -15,6 +15,7 @@ export const labels = defineMessages({
username: { id: 'label.username', defaultMessage: 'Username' },
password: { id: 'label.password', defaultMessage: 'Password' },
role: { id: 'label.role', defaultMessage: 'Role' },
+ admin: { id: 'label.admin', defaultMessage: 'Admin' },
user: { id: 'label.user', defaultMessage: 'User' },
viewOnly: { id: 'label.view-only', defaultMessage: 'View only' },
manage: { id: 'label.manage', defaultMessage: 'Manage' },
@@ -222,6 +223,11 @@ export const labels = defineMessages({
id: 'message.visitors-dropped-off',
defaultMessage: 'Visitors dropped off',
},
+ utm: { id: 'label.utm', defaultMessage: 'UTM' },
+ utmDescription: {
+ id: 'label.utm-description',
+ defaultMessage: 'Track your campaigns through UTM parameters.',
+ },
});
export const messages = defineMessages({
diff --git a/src/components/metrics/BarChart.tsx b/src/components/metrics/BarChart.tsx
deleted file mode 100644
index 1b1c7588..00000000
--- a/src/components/metrics/BarChart.tsx
+++ /dev/null
@@ -1,174 +0,0 @@
-import { useState, useRef, useEffect, useCallback } from 'react';
-import { Loading } from 'react-basics';
-import classNames from 'classnames';
-import Chart from 'chart.js/auto';
-import HoverTooltip from 'components/common/HoverTooltip';
-import Legend from 'components/metrics/Legend';
-import { useLocale } from 'components/hooks';
-import { useTheme } from 'components/hooks';
-import { DEFAULT_ANIMATION_DURATION } from 'lib/constants';
-import { renderNumberLabels } from 'lib/charts';
-import styles from './BarChart.module.css';
-
-export interface BarChartProps {
- datasets?: any[];
- unit?: string;
- animationDuration?: number;
- stacked?: boolean;
- isLoading?: boolean;
- renderXLabel?: (label: string, index: number, values: any[]) => string;
- renderYLabel?: (label: string, index: number, values: any[]) => string;
- XAxisType?: string;
- YAxisType?: string;
- renderTooltipPopup?: (setTooltipPopup: (data: any) => void, model: any) => void;
- onCreate?: (chart: any) => void;
- onUpdate?: (chart: any) => void;
- className?: string;
-}
-
-export function BarChart({
- datasets = [],
- unit,
- animationDuration = DEFAULT_ANIMATION_DURATION,
- stacked = false,
- isLoading = false,
- renderXLabel,
- renderYLabel,
- XAxisType = 'time',
- YAxisType = 'linear',
- renderTooltipPopup,
- onCreate,
- onUpdate,
- className,
-}: BarChartProps) {
- const canvas = useRef();
- const chart = useRef(null);
- const [tooltip, setTooltipPopup] = useState(null);
- const { locale } = useLocale();
- const { theme, colors } = useTheme();
-
- const getOptions = useCallback(() => {
- return {
- responsive: true,
- maintainAspectRatio: false,
- animation: {
- duration: animationDuration,
- resize: {
- duration: 0,
- },
- active: {
- duration: 0,
- },
- },
- plugins: {
- legend: {
- display: false,
- },
- tooltip: {
- enabled: false,
- external: renderTooltipPopup ? renderTooltipPopup.bind(null, setTooltipPopup) : undefined,
- },
- },
- scales: {
- x: {
- type: XAxisType,
- stacked: true,
- time: {
- unit,
- },
- grid: {
- display: false,
- },
- border: {
- color: colors.chart.line,
- },
- ticks: {
- color: colors.chart.text,
- autoSkip: false,
- maxRotation: 0,
- callback: renderXLabel,
- },
- },
- y: {
- type: YAxisType,
- min: 0,
- beginAtZero: true,
- stacked,
- grid: {
- color: colors.chart.line,
- },
- border: {
- color: colors.chart.line,
- },
- ticks: {
- color: colors.chart.text,
- callback: renderYLabel || renderNumberLabels,
- },
- },
- },
- };
- }, [
- animationDuration,
- renderTooltipPopup,
- renderXLabel,
- XAxisType,
- YAxisType,
- stacked,
- colors,
- unit,
- locale,
- ]);
-
- const createChart = () => {
- Chart.defaults.font.family = 'Inter';
-
- chart.current = new Chart(canvas.current, {
- type: 'bar',
- data: {
- datasets,
- },
- options: getOptions() as any,
- });
-
- onCreate?.(chart.current);
- };
-
- const updateChart = () => {
- setTooltipPopup(null);
-
- chart.current.data.datasets = datasets;
-
- chart.current.options = getOptions();
-
- onUpdate?.(chart.current);
-
- chart.current.update();
- };
-
- useEffect(() => {
- if (datasets) {
- if (!chart.current) {
- createChart();
- } else {
- updateChart();
- }
- }
- }, [datasets, unit, theme, animationDuration, locale]);
-
- return (
- <>
-
- {isLoading && }
-
-
-
- {tooltip && (
-
- {tooltip}
-
- )}
- >
- );
-}
-
-export default BarChart;
diff --git a/src/components/metrics/EventsChart.tsx b/src/components/metrics/EventsChart.tsx
index b1c581fc..87e65276 100644
--- a/src/components/metrics/EventsChart.tsx
+++ b/src/components/metrics/EventsChart.tsx
@@ -1,7 +1,7 @@
import { useMemo } from 'react';
import { Loading } from 'react-basics';
import { colord } from 'colord';
-import BarChart from './BarChart';
+import BarChart from 'components/charts/BarChart';
import { getDateArray } from 'lib/date';
import {
useLocale,
@@ -10,8 +10,8 @@ import {
useNavigation,
useWebsiteEvents,
} from 'components/hooks';
-import { EVENT_COLORS } from 'lib/constants';
-import { renderDateLabels, renderStatusTooltipPopup } from 'lib/charts';
+import { CHART_COLORS } from 'lib/constants';
+import { renderDateLabels } from 'lib/charts';
export interface EventsChartProps {
websiteId: string;
@@ -26,7 +26,6 @@ export function EventsChart({ websiteId, className, token }: EventsChartProps) {
const {
query: { url, event },
} = useNavigation();
-
const { data, isLoading } = useWebsiteEvents(websiteId, {
startAt: +startDate,
endAt: +endDate,
@@ -38,9 +37,8 @@ export function EventsChart({ websiteId, className, token }: EventsChartProps) {
offset,
});
- const datasets = useMemo(() => {
+ const chartData = useMemo(() => {
if (!data) return [];
- if (isLoading) return data;
const map = (data as any[]).reduce((obj, { x, t, y }) => {
if (!obj[x]) {
@@ -56,18 +54,20 @@ export function EventsChart({ websiteId, className, token }: EventsChartProps) {
map[key] = getDateArray(map[key], startDate, endDate, unit);
});
- return Object.keys(map).map((key, index) => {
- const color = colord(EVENT_COLORS[index % EVENT_COLORS.length]);
- return {
- label: key,
- data: map[key],
- lineTension: 0,
- backgroundColor: color.alpha(0.6).toRgbString(),
- borderColor: color.alpha(0.7).toRgbString(),
- borderWidth: 1,
- };
- });
- }, [data, isLoading, startDate, endDate, unit]);
+ return {
+ datasets: Object.keys(map).map((key, index) => {
+ const color = colord(CHART_COLORS[index % CHART_COLORS.length]);
+ return {
+ label: key,
+ data: map[key],
+ lineTension: 0,
+ backgroundColor: color.alpha(0.6).toRgbString(),
+ borderColor: color.alpha(0.7).toRgbString(),
+ borderWidth: 1,
+ };
+ }),
+ };
+ }, [data, startDate, endDate, unit]);
if (isLoading) {
return ;
@@ -76,11 +76,10 @@ export function EventsChart({ websiteId, className, token }: EventsChartProps) {
return (
);
diff --git a/src/components/metrics/Legend.tsx b/src/components/metrics/Legend.tsx
index 6349b3d4..5fbee827 100644
--- a/src/components/metrics/Legend.tsx
+++ b/src/components/metrics/Legend.tsx
@@ -1,43 +1,34 @@
-import { useEffect } from 'react';
import { StatusLight } from 'react-basics';
import { colord } from 'colord';
import classNames from 'classnames';
+import { LegendItem } from 'chart.js/auto';
import { useLocale } from 'components/hooks';
-import { useForceUpdate } from 'components/hooks';
import styles from './Legend.module.css';
-export function Legend({ chart }) {
+export function Legend({
+ items = [],
+ onClick,
+}: {
+ items: any[];
+ onClick: (index: LegendItem) => void;
+}) {
const { locale } = useLocale();
- const forceUpdate = useForceUpdate();
- const handleClick = (index: string | number) => {
- const meta = chart.getDatasetMeta(index);
-
- meta.hidden = meta.hidden === null ? !chart.data.datasets[index].hidden : null;
-
- chart.update();
-
- forceUpdate();
- };
-
- useEffect(() => {
- forceUpdate();
- }, [locale, forceUpdate]);
-
- if (!chart?.legend?.legendItems.find(({ text }) => text)) {
+ if (!items.find(({ text }) => text)) {
return null;
}
return (
- {chart.legend.legendItems.map(({ text, fillStyle, datasetIndex, hidden }) => {
+ {items.map(item => {
+ const { text, fillStyle, hidden } = item;
const color = colord(fillStyle);
return (
handleClick(datasetIndex)}
+ onClick={() => onClick(item)}
>
{text}
diff --git a/src/components/metrics/PageviewsChart.tsx b/src/components/metrics/PageviewsChart.tsx
index 48e2b4f1..ea9720fd 100644
--- a/src/components/metrics/PageviewsChart.tsx
+++ b/src/components/metrics/PageviewsChart.tsx
@@ -1,7 +1,7 @@
import { useMemo } from 'react';
-import BarChart, { BarChartProps } from './BarChart';
+import BarChart, { BarChartProps } from 'components/charts/BarChart';
import { useLocale, useTheme, useMessages } from 'components/hooks';
-import { renderDateLabels, renderStatusTooltipPopup } from 'lib/charts';
+import { renderDateLabels } from 'lib/charts';
export interface PageviewsChartProps extends BarChartProps {
data: {
@@ -17,33 +17,36 @@ export function PageviewsChart({ data, unit, isLoading, ...props }: PageviewsCha
const { colors } = useTheme();
const { locale } = useLocale();
- const datasets = useMemo(() => {
- if (!data) return [];
+ const chartData = useMemo(() => {
+ if (!data) {
+ return {};
+ }
- return [
- {
- label: formatMessage(labels.visitors),
- data: data.sessions,
- borderWidth: 1,
- ...colors.chart.visitors,
- },
- {
- label: formatMessage(labels.views),
- data: data.pageviews,
- borderWidth: 1,
- ...colors.chart.views,
- },
- ];
- }, [data, colors, formatMessage, labels]);
+ return {
+ datasets: [
+ {
+ label: formatMessage(labels.visitors),
+ data: data.sessions,
+ borderWidth: 1,
+ ...colors.chart.visitors,
+ },
+ {
+ label: formatMessage(labels.views),
+ data: data.pageviews,
+ borderWidth: 1,
+ ...colors.chart.views,
+ },
+ ],
+ };
+ }, [data]);
return (
);
}
diff --git a/src/lang/es-ES.json b/src/lang/es-ES.json
index 7fbb841a..7f77e893 100644
--- a/src/lang/es-ES.json
+++ b/src/lang/es-ES.json
@@ -196,7 +196,7 @@
"label.window": "Ventana",
"label.yesterday": "Ayer",
"message.action-confirmation": "Escriba {confirmation} en el cuadro a continuación para confirmar.",
- "message.active-users": "{x} {x, plural, uno {activo} otros {activos}}",
+ "message.active-users": "{x} {x, plural, one {activo} other {activos}}",
"message.confirm-delete": "¿Seguro que quieres eliminar {target}?",
"message.confirm-leave": "¿Seguro que quieres abandonar {target}?",
"message.confirm-remove": "¿Estás seguro de que desea eliminar {target}?",
diff --git a/src/lang/zh-CN.json b/src/lang/zh-CN.json
index 93b29b7c..08ec5b0a 100644
--- a/src/lang/zh-CN.json
+++ b/src/lang/zh-CN.json
@@ -4,7 +4,7 @@
"label.activity-log": "活动日志",
"label.add": "添加",
"label.add-description": "添加描述",
- "label.add-member": "Add member",
+ "label.add-member": "添加成员",
"label.add-website": "添加网站",
"label.administrator": "管理员",
"label.after": "之后",
@@ -35,7 +35,7 @@
"label.create-team": "创建团队",
"label.create-user": "创建用户",
"label.created": "已创建",
- "label.created-by": "Created By",
+ "label.created-by": "创建者",
"label.current-password": "目前密码",
"label.custom-range": "自定义时间段",
"label.dashboard": "仪表板",
@@ -45,7 +45,7 @@
"label.day": "日",
"label.default-date-range": "默认时间段",
"label.delete": "删除",
- "label.delete-report": "Delete report",
+ "label.delete-report": "删除报告",
"label.delete-team": "删除团队",
"label.delete-user": "删除用户",
"label.delete-website": "删除网站",
@@ -60,7 +60,7 @@
"label.dropoff": "丢弃",
"label.edit": "编辑",
"label.edit-dashboard": "编辑仪表板",
- "label.edit-member": "Edit member",
+ "label.edit-member": "编辑成员",
"label.enable-share-url": "启用共享链接",
"label.event": "事件",
"label.event-data": "事件数据",
@@ -95,24 +95,24 @@
"label.less-than-equals": "少于等于",
"label.login": "登录",
"label.logout": "退出",
- "label.manage": "Manage",
+ "label.manage": "管理",
"label.max": "最大",
- "label.member": "Member",
+ "label.member": "成员",
"label.members": "成员",
"label.min": "最小",
"label.mobile": "手机",
"label.more": "更多",
- "label.my-account": "My account",
+ "label.my-account": "我的账户",
"label.my-websites": "我的网站",
"label.name": "名字",
"label.new-password": "新密码",
"label.none": "无",
"label.number-of-records": "{x} {x, plural, one {record} other {records}}",
"label.ok": "OK",
- "label.os": "OS",
+ "label.os": "操作系统",
"label.overview": "概览",
"label.owner": "所有者",
- "label.page-of": "总{total}中的第{current}页",
+ "label.page-of": "总 {total} 中的第 {current} 页",
"label.page-views": "页面浏览量",
"label.pageTitle": "标题",
"label.pages": "网页",
@@ -130,7 +130,7 @@
"label.region": "州/省",
"label.regions": "州/省",
"label.remove": "移除",
- "label.remove-member": "Remove member",
+ "label.remove-member": "移除成员",
"label.reports": "报告",
"label.required": "必填",
"label.reset": "重置",
@@ -142,9 +142,9 @@
"label.save": "保存",
"label.screens": "屏幕尺寸",
"label.search": "搜索",
- "label.select": "Select",
+ "label.select": "选择",
"label.select-date": "选择数据",
- "label.select-role": "Select role",
+ "label.select-role": "选择角色",
"label.select-website": "选择网站",
"label.sessions": "会话",
"label.settings": "设置",
@@ -157,7 +157,7 @@
"label.team-member": "团队成员",
"label.team-name": "团队名称",
"label.team-owner": "团队所有者",
- "label.team-view-only": "Team view only",
+ "label.team-view-only": "仅团队视图",
"label.team-websites": "团队网站",
"label.teams": "团队",
"label.theme": "主题",
@@ -171,8 +171,8 @@
"label.total": "总数",
"label.total-records": "总记录数",
"label.tracking-code": "跟踪代码",
- "label.transfer": "Transfer",
- "label.transfer-website": "Transfer website",
+ "label.transfer": "转移",
+ "label.transfer-website": "转移网站",
"label.true": "是",
"label.type": "类型",
"label.unique": "独立",
@@ -195,21 +195,21 @@
"label.websites": "网站",
"label.window": "窗口",
"label.yesterday": "昨天",
- "message.action-confirmation": "Type {confirmation} in the box below to confirm.",
+ "message.action-confirmation": "在下面的框中输入 {confirmation} 以确认。",
"message.active-users": "当前在线 {x} 人",
"message.confirm-delete": "你确定要删除 {target} 吗?",
"message.confirm-leave": "你确定要离开 {target} 吗?",
- "message.confirm-remove": "Are you sure you want to remove {target}?",
- "message.confirm-reset": "您确定要重置 {target} 的数据吗?",
- "message.delete-team-warning": "Deleting a team will also delete all team websites.",
+ "message.confirm-remove": "您确定要移除 {target} ?",
+ "message.confirm-reset": "您确定要重置 {target} 的数据吗?",
+ "message.delete-team-warning": "删除团队也会删除所有团队的网站。",
"message.delete-website-warning": "所有相关数据将会被删除。",
"message.error": "出现错误。",
- "message.event-log": "{url}上的{event}",
+ "message.event-log": "{url} 上的 {event}",
"message.go-to-settings": "去设置",
"message.incorrect-username-password": "用户名或密码不正确。",
"message.invalid-domain": "无效域名",
"message.min-password-length": "密码最短长度为 {n} 个字符",
- "message.new-version-available": "Umami的新版本{version}已推出!",
+ "message.new-version-available": "Umami 的新版本 {version} 已推出!",
"message.no-data-available": "无可用数据。",
"message.no-event-data": "无可用事件。",
"message.no-match-password": "密码不一致",
@@ -219,7 +219,7 @@
"message.no-users": "没有任何用户。",
"message.no-websites-configured": "你还没有设置任何网站。",
"message.page-not-found": "网页未找到。",
- "message.reset-website": "如果确定重置该网站, 请在下面的输入框中输入 {confirmation} 进行二次确认。",
+ "message.reset-website": "如果确定重置该网站,请在下面的输入框中输入 {confirmation} 进行二次确认。",
"message.reset-website-warning": "本网站的所有统计数据将被删除,但您的跟踪代码将保持不变。",
"message.saved": "保存成功。",
"message.share-url": "这是 {target} 的共享链接。",
@@ -227,12 +227,12 @@
"message.team-not-found": "未找到团队。",
"message.team-websites-info": "团队中的任何人都可查看网站。",
"message.tracking-code": "跟踪代码",
- "message.transfer-team-website-to-user": "Transfer this website to your account?",
- "message.transfer-user-website-to-team": "Select the team to transfer this website to.",
- "message.transfer-website": "Transfer website ownership to your account or another team.",
- "message.triggered-event": "Triggered event",
+ "message.transfer-team-website-to-user": "将该网站转入您的账户?",
+ "message.transfer-user-website-to-team": "选择要将该网站转移到哪个团队。",
+ "message.transfer-website": "将网站所有权转移到您的账户或其他团队。",
+ "message.triggered-event": "触发事件",
"message.user-deleted": "用户已删除。",
- "message.viewed-page": "Viewed page",
- "message.visitor-log": "来自{country}的访客在搭载 {os} 的{device}上使用 {browser} 浏览器进行访问。",
- "message.visitors-dropped-off": "Visitors dropped off"
+ "message.viewed-page": "已浏览页面",
+ "message.visitor-log": "来自 {country} 的访客在搭载 {os} 的 {device} 上使用 {browser} 浏览器进行访问。",
+ "message.visitors-dropped-off": "访客减少"
}
diff --git a/src/lib/charts.ts b/src/lib/charts.ts
new file mode 100644
index 00000000..8939b3c1
--- /dev/null
+++ b/src/lib/charts.ts
@@ -0,0 +1,27 @@
+import { formatDate } from 'lib/date';
+import { formatLongNumber } from 'lib/format';
+
+export function renderNumberLabels(label: string) {
+ return +label > 1000 ? formatLongNumber(+label) : label;
+}
+
+export function renderDateLabels(unit: string, locale: string) {
+ return (label: string, index: number, values: any[]) => {
+ const d = new Date(values[index].value);
+
+ switch (unit) {
+ case 'minute':
+ return formatDate(d, 'h:mm', locale);
+ case 'hour':
+ return formatDate(d, 'p', locale);
+ case 'day':
+ return formatDate(d, 'MMM d', locale);
+ case 'month':
+ return formatDate(d, 'MMM', locale);
+ case 'year':
+ return formatDate(d, 'YYY', locale);
+ default:
+ return label;
+ }
+ };
+}
diff --git a/src/lib/charts.tsx b/src/lib/charts.tsx
deleted file mode 100644
index c80bfe3f..00000000
--- a/src/lib/charts.tsx
+++ /dev/null
@@ -1,62 +0,0 @@
-import { StatusLight } from 'react-basics';
-import { formatDate } from 'lib/date';
-import { formatLongNumber } from 'lib/format';
-
-export function renderNumberLabels(label: string) {
- return +label > 1000 ? formatLongNumber(+label) : label;
-}
-
-export function renderDateLabels(unit: string, locale: string) {
- return (label: string, index: number, values: any[]) => {
- const d = new Date(values[index].value);
-
- switch (unit) {
- case 'minute':
- return formatDate(d, 'h:mm', locale);
- case 'hour':
- return formatDate(d, 'p', locale);
- case 'day':
- return formatDate(d, 'MMM d', locale);
- case 'month':
- return formatDate(d, 'MMM', locale);
- case 'year':
- return formatDate(d, 'YYY', locale);
- default:
- return label;
- }
- };
-}
-
-export function renderStatusTooltipPopup(unit: string, locale: string) {
- return (setTooltipPopup: (data: any) => void, model: any) => {
- const { opacity, labelColors, dataPoints } = model.tooltip;
-
- if (!dataPoints?.length || !opacity) {
- setTooltipPopup(null);
- return;
- }
-
- const formats = {
- millisecond: 'T',
- second: 'pp',
- minute: 'p',
- hour: 'h:mm aaa - PP',
- day: 'PPPP',
- week: 'PPPP',
- month: 'LLLL yyyy',
- quarter: 'qqq',
- year: 'yyyy',
- };
-
- setTooltipPopup(
- <>
- {formatDate(new Date(dataPoints[0].raw.x), formats[unit], locale)}
-
-
- {formatLongNumber(dataPoints[0].raw.y)} {dataPoints[0].dataset.label}
-
-
- >,
- );
- };
-}
diff --git a/src/lib/constants.ts b/src/lib/constants.ts
index f728837a..78e7a71e 100644
--- a/src/lib/constants.ts
+++ b/src/lib/constants.ts
@@ -106,6 +106,7 @@ export const REPORT_TYPES = {
funnel: 'funnel',
insights: 'insights',
retention: 'retention',
+ utm: 'utm',
} as const;
export const REPORT_PARAMETERS = {
@@ -193,7 +194,7 @@ export const THEME_COLORS = {
},
};
-export const EVENT_COLORS = [
+export const CHART_COLORS = [
'#2680eb',
'#9256d9',
'#44b556',
@@ -224,8 +225,11 @@ export const LAPTOP_SCREEN_WIDTH = 1024;
export const MOBILE_SCREEN_WIDTH = 479;
export const URL_LENGTH = 500;
+export const PAGE_TITLE_LENGTH = 500;
export const EVENT_NAME_LENGTH = 50;
+export const UTM_PARAMS = ['source', 'medium', 'campaign', 'term', 'content'];
+
export const DESKTOP_OS = [
'BeOS',
'Chrome OS',
diff --git a/src/lib/date.ts b/src/lib/date.ts
index 79dd8976..a7112029 100644
--- a/src/lib/date.ts
+++ b/src/lib/date.ts
@@ -151,105 +151,50 @@ export function parseDateRange(value: string | object, locale = 'en-US'): DateRa
const dateLocale = getDateLocale(locale);
const { num, unit } = parseDateValue(value);
- if (num === 1) {
- switch (unit) {
- case 'day':
- return {
- startDate: startOfDay(now),
- endDate: endOfDay(now),
- unit: 'hour',
- num: +num,
- offset: 0,
- value,
- };
- case 'week':
- return {
- startDate: startOfWeek(now, { locale: dateLocale }),
- endDate: endOfWeek(now, { locale: dateLocale }),
- unit: 'day',
- num: +num,
- offset: 0,
- value,
- };
- case 'month':
- return {
- startDate: startOfMonth(now),
- endDate: endOfMonth(now),
- unit: 'day',
- num: +num,
- offset: 0,
- value,
- };
- case 'year':
- return {
- startDate: startOfYear(now),
- endDate: endOfYear(now),
- unit: 'month',
- num: +num,
- offset: 0,
- value,
- };
- }
- }
-
- if (num === -1) {
- switch (unit) {
- case 'day':
- return {
- startDate: subDays(startOfDay(now), 1),
- endDate: subDays(endOfDay(now), 1),
- unit: 'hour',
- num: +num,
- offset: 0,
- value,
- };
- case 'week':
- return {
- startDate: subDays(startOfWeek(now, { locale: dateLocale }), 7),
- endDate: subDays(endOfWeek(now, { locale: dateLocale }), 1),
- unit: 'day',
- num: +num,
- offset: 0,
- value,
- };
- case 'month':
- return {
- startDate: subMonths(startOfMonth(now), 1),
- endDate: subMonths(endOfMonth(now), 1),
- unit: 'day',
- num: +num,
- offset: 0,
- value,
- };
- case 'year':
- return {
- startDate: subYears(startOfYear(now), 1),
- endDate: subYears(endOfYear(now), 1),
- unit: 'month',
- num: +num,
- offset: 0,
- value,
- };
- }
- }
-
switch (unit) {
- case 'day':
+ case 'hour':
return {
- startDate: subDays(startOfDay(now), +num - 1),
- endDate: endOfDay(now),
- num: +num,
+ startDate: subHours(startOfHour(now), num),
+ endDate: endOfHour(now),
offset: 0,
+ num: num || 1,
unit,
value,
};
- case 'hour':
+ case 'day':
return {
- startDate: subHours(startOfHour(now), +num - 1),
- endDate: endOfHour(now),
- num: +num,
+ startDate: subDays(startOfDay(now), num),
+ endDate: endOfDay(now),
+ unit: num ? 'day' : 'hour',
offset: 0,
- unit,
+ num: num || 1,
+ value,
+ };
+ case 'week':
+ return {
+ startDate: subWeeks(startOfWeek(now, { locale: dateLocale }), num),
+ endDate: subWeeks(endOfWeek(now, { locale: dateLocale }), num),
+ unit: 'day',
+ offset: 0,
+ num: num || 1,
+ value,
+ };
+ case 'month':
+ return {
+ startDate: subMonths(startOfMonth(now), 1),
+ endDate: subMonths(endOfMonth(now), 1),
+ unit: 'day',
+ offset: 0,
+ num: num || 1,
+ value,
+ };
+ case 'year':
+ return {
+ startDate: subYears(startOfYear(now), 1),
+ endDate: subYears(endOfYear(now), 1),
+ unit: 'month',
+ offset: 0,
+ num: num || 1,
value,
};
}
@@ -266,29 +211,29 @@ export function getOffsetDateRange(dateRange: DateRange, increment: number) {
case 'day':
return {
...dateRange,
- startDate: addDays(startDate, increment),
- endDate: addDays(endDate, increment),
+ startDate: addDays(startDate, change),
+ endDate: addDays(endDate, change),
offset: offset + increment,
};
case 'week':
return {
...dateRange,
- startDate: addWeeks(startDate, increment),
- endDate: addWeeks(endDate, increment),
+ startDate: addWeeks(startDate, change),
+ endDate: addWeeks(endDate, change),
offset: offset + increment,
};
case 'month':
return {
...dateRange,
- startDate: addMonths(startDate, increment),
- endDate: addMonths(endDate, increment),
+ startDate: addMonths(startDate, change),
+ endDate: addMonths(endDate, change),
offset: offset + increment,
};
case 'year':
return {
...dateRange,
- startDate: addYears(startDate, increment),
- endDate: addYears(endDate, increment),
+ startDate: addYears(startDate, change),
+ endDate: addYears(endDate, change),
offset: offset + increment,
};
default:
diff --git a/src/pages/api/reports/[reportId].ts b/src/pages/api/reports/[reportId].ts
index 9c113514..db7d0bcc 100644
--- a/src/pages/api/reports/[reportId].ts
+++ b/src/pages/api/reports/[reportId].ts
@@ -27,7 +27,7 @@ const schema: YupRequest = {
websiteId: yup.string().uuid().required(),
type: yup
.string()
- .matches(/funnel|insights|retention/i)
+ .matches(/funnel|insights|retention|utm/i)
.required(),
name: yup.string().max(200).required(),
description: yup.string().max(500),
diff --git a/src/pages/api/reports/index.ts b/src/pages/api/reports/index.ts
index 701ef649..d231f0b7 100644
--- a/src/pages/api/reports/index.ts
+++ b/src/pages/api/reports/index.ts
@@ -27,7 +27,7 @@ const schema = {
name: yup.string().max(200).required(),
type: yup
.string()
- .matches(/funnel|insights|retention/i)
+ .matches(/funnel|insights|retention|utm/i)
.required(),
description: yup.string().max(500),
parameters: yup
diff --git a/src/pages/api/reports/utm.ts b/src/pages/api/reports/utm.ts
new file mode 100644
index 00000000..59399ee4
--- /dev/null
+++ b/src/pages/api/reports/utm.ts
@@ -0,0 +1,54 @@
+import { canViewWebsite } from 'lib/auth';
+import { useAuth, useCors, useValidate } from 'lib/middleware';
+import { NextApiRequestQueryBody } from 'lib/types';
+import { TimezoneTest } from 'lib/yup';
+import { NextApiResponse } from 'next';
+import { methodNotAllowed, ok, unauthorized } from 'next-basics';
+import { getUTM } from 'queries';
+import * as yup from 'yup';
+
+export interface UTMRequestBody {
+ websiteId: string;
+ dateRange: { startDate: string; endDate: string; timezone: string };
+}
+
+const schema = {
+ POST: yup.object().shape({
+ websiteId: yup.string().uuid().required(),
+ dateRange: yup
+ .object()
+ .shape({
+ startDate: yup.date().required(),
+ endDate: yup.date().required(),
+ timezone: TimezoneTest,
+ })
+ .required(),
+ }),
+};
+
+export default async (req: NextApiRequestQueryBody, res: NextApiResponse) => {
+ await useCors(req, res);
+ await useAuth(req, res);
+ await useValidate(schema, req, res);
+
+ if (req.method === 'POST') {
+ const {
+ websiteId,
+ dateRange: { startDate, endDate, timezone },
+ } = req.body;
+
+ if (!(await canViewWebsite(req.auth, websiteId))) {
+ return unauthorized(res);
+ }
+
+ const data = await getUTM(websiteId, {
+ startDate: new Date(startDate),
+ endDate: new Date(endDate),
+ timezone,
+ });
+
+ return ok(res, data);
+ }
+
+ return methodNotAllowed(res);
+};
diff --git a/src/pages/api/send.ts b/src/pages/api/send.ts
index 7734bff7..5aa367f0 100644
--- a/src/pages/api/send.ts
+++ b/src/pages/api/send.ts
@@ -111,7 +111,7 @@ export default async (req: NextApiRequestCollect, res: NextApiResponse) => {
}
if (process.env.REMOVE_TRAILING_SLASH) {
- urlPath = urlPath.replace(/.+\/$/, '');
+ urlPath = urlPath.replace(/(.+)\/$/, '$1');
}
await saveEvent({
diff --git a/src/pages/api/teams/[teamId]/websites/index.ts b/src/pages/api/teams/[teamId]/websites/index.ts
index dd2fdeff..fe244857 100644
--- a/src/pages/api/teams/[teamId]/websites/index.ts
+++ b/src/pages/api/teams/[teamId]/websites/index.ts
@@ -11,26 +11,15 @@ export interface TeamWebsiteRequestQuery extends SearchFilter {
teamId: string;
}
-export interface TeamWebsiteRequestBody {
- name: string;
- domain: string;
- shareId: string;
-}
-
const schema = {
GET: yup.object().shape({
teamId: yup.string().uuid().required(),
...pageInfo,
}),
- POST: yup.object().shape({
- name: yup.string().max(100).required(),
- domain: yup.string().max(500).required(),
- shareId: yup.string().max(50).nullable(),
- }),
};
export default async (
- req: NextApiRequestQueryBody,
+ req: NextApiRequestQueryBody,
res: NextApiResponse,
) => {
await useAuth(req, res);
diff --git a/src/pages/api/users/[userId]/teams.ts b/src/pages/api/users/[userId]/teams.ts
index 279df1e3..ad4af648 100644
--- a/src/pages/api/users/[userId]/teams.ts
+++ b/src/pages/api/users/[userId]/teams.ts
@@ -10,12 +10,6 @@ export interface UserTeamsRequestQuery extends SearchFilter {
userId: string;
}
-export interface UserTeamsRequestBody {
- name: string;
- domain: string;
- shareId: string;
-}
-
const schema = {
GET: yup.object().shape({
userId: yup.string().uuid().required(),
@@ -24,7 +18,7 @@ const schema = {
};
export default async (
- req: NextApiRequestQueryBody,
+ req: NextApiRequestQueryBody,
res: NextApiResponse,
) => {
await useCors(req, res);
diff --git a/src/pages/api/users/[userId]/websites.ts b/src/pages/api/users/[userId]/websites.ts
index 2d48c177..f443deb8 100644
--- a/src/pages/api/users/[userId]/websites.ts
+++ b/src/pages/api/users/[userId]/websites.ts
@@ -9,8 +9,7 @@ import * as yup from 'yup';
const schema = {
GET: yup.object().shape({
userId: yup.string().uuid().required(),
- includeTeams: yup.boolean(),
- onlyTeams: yup.boolean(),
+ teamId: yup.string().uuid(),
...pageInfo,
}),
};
diff --git a/src/queries/analytics/eventData/saveEventData.ts b/src/queries/analytics/eventData/saveEventData.ts
index 345409ce..c37dd896 100644
--- a/src/queries/analytics/eventData/saveEventData.ts
+++ b/src/queries/analytics/eventData/saveEventData.ts
@@ -32,7 +32,7 @@ async function relationalQuery(data: {
const jsonKeys = flattenJSON(eventData);
// id, websiteEventId, eventStringValue
- const flattendData = jsonKeys.map(a => ({
+ const flattenedData = jsonKeys.map(a => ({
id: uuid(),
websiteEventId: eventId,
websiteId,
@@ -44,7 +44,7 @@ async function relationalQuery(data: {
}));
return prisma.client.eventData.createMany({
- data: flattendData,
+ data: flattenedData,
});
}
diff --git a/src/queries/analytics/events/saveEvent.ts b/src/queries/analytics/events/saveEvent.ts
index a6457d7e..0596023b 100644
--- a/src/queries/analytics/events/saveEvent.ts
+++ b/src/queries/analytics/events/saveEvent.ts
@@ -1,4 +1,4 @@
-import { EVENT_NAME_LENGTH, URL_LENGTH, EVENT_TYPE } from 'lib/constants';
+import { EVENT_NAME_LENGTH, URL_LENGTH, EVENT_TYPE, PAGE_TITLE_LENGTH } from 'lib/constants';
import { CLICKHOUSE, PRISMA, runQuery } from 'lib/db';
import kafka from 'lib/kafka';
import prisma from 'lib/prisma';
@@ -69,7 +69,7 @@ async function relationalQuery(data: {
referrerPath: referrerPath?.substring(0, URL_LENGTH),
referrerQuery: referrerQuery?.substring(0, URL_LENGTH),
referrerDomain: referrerDomain?.substring(0, URL_LENGTH),
- pageTitle,
+ pageTitle: pageTitle?.substring(0, PAGE_TITLE_LENGTH),
eventType: eventName ? EVENT_TYPE.customEvent : EVENT_TYPE.pageView,
eventName: eventName ? eventName?.substring(0, EVENT_NAME_LENGTH) : null,
},
@@ -151,7 +151,7 @@ async function clickhouseQuery(data: {
referrer_path: referrerPath?.substring(0, URL_LENGTH),
referrer_query: referrerQuery?.substring(0, URL_LENGTH),
referrer_domain: referrerDomain?.substring(0, URL_LENGTH),
- page_title: pageTitle,
+ page_title: pageTitle?.substring(0, PAGE_TITLE_LENGTH),
event_type: eventName ? EVENT_TYPE.customEvent : EVENT_TYPE.pageView,
event_name: eventName ? eventName?.substring(0, EVENT_NAME_LENGTH) : null,
created_at: createdAt,
diff --git a/src/queries/analytics/reports/getUTM.ts b/src/queries/analytics/reports/getUTM.ts
new file mode 100644
index 00000000..118caa23
--- /dev/null
+++ b/src/queries/analytics/reports/getUTM.ts
@@ -0,0 +1,120 @@
+import clickhouse from 'lib/clickhouse';
+import { CLICKHOUSE, PRISMA, runQuery } from 'lib/db';
+import prisma from 'lib/prisma';
+
+export async function getUTM(
+ ...args: [
+ websiteId: string,
+ filters: {
+ startDate: Date;
+ endDate: Date;
+ timezone?: string;
+ },
+ ]
+) {
+ return runQuery({
+ [PRISMA]: () => relationalQuery(...args),
+ [CLICKHOUSE]: () => clickhouseQuery(...args),
+ });
+}
+
+async function relationalQuery(
+ websiteId: string,
+ filters: {
+ startDate: Date;
+ endDate: Date;
+ timezone?: string;
+ },
+): Promise<
+ {
+ date: string;
+ day: number;
+ visitors: number;
+ returnVisitors: number;
+ percentage: number;
+ }[]
+> {
+ const { startDate, endDate } = filters;
+ const { rawQuery } = prisma;
+
+ return rawQuery(
+ `
+ select url_query, count(*) as "num"
+ from website_event
+ where website_id = {{websiteId::uuid}}
+ and created_at between {{startDate}} and {{endDate}}
+ and url_query is not null
+ group by 1
+ `,
+ {
+ websiteId,
+ startDate,
+ endDate,
+ },
+ ).then(results => {
+ return results;
+ });
+}
+
+async function clickhouseQuery(
+ websiteId: string,
+ filters: {
+ startDate: Date;
+ endDate: Date;
+ timezone?: string;
+ },
+): Promise<
+ {
+ date: string;
+ day: number;
+ visitors: number;
+ returnVisitors: number;
+ percentage: number;
+ }[]
+> {
+ const { startDate, endDate } = filters;
+ const { rawQuery } = clickhouse;
+
+ return rawQuery(
+ `
+ select url_query, count(*) as "num"
+ from website_event
+ where website_id = {websiteId:UUID}
+ and created_at between {startDate:DateTime64} and {endDate:DateTime64}
+ and url_query != ''
+ group by 1
+ `,
+ {
+ websiteId,
+ startDate,
+ endDate,
+ },
+ ).then(result => parseParameters(result as any[]));
+}
+
+function parseParameters(result: any[]) {
+ return Object.values(result).reduce((data, { url_query, num }) => {
+ const params = url_query.split('&').map(n => decodeURIComponent(n));
+
+ for (const param of params) {
+ const [key, value] = param.split('=');
+
+ const match = key.match(/^utm_(\w+)$/);
+
+ if (match) {
+ const group = match[1];
+ const name = decodeURIComponent(value);
+
+ if (!data[group]) {
+ data[group] = { [name]: +num };
+ } else if (!data[group][name]) {
+ data[group][name] = +num;
+ } else {
+ data[group][name] += +num;
+ }
+ }
+ }
+
+ return data;
+ }, {});
+}
diff --git a/src/queries/analytics/sessions/saveSessionData.ts b/src/queries/analytics/sessions/saveSessionData.ts
index b1c5759b..efd4898f 100644
--- a/src/queries/analytics/sessions/saveSessionData.ts
+++ b/src/queries/analytics/sessions/saveSessionData.ts
@@ -14,7 +14,7 @@ export async function saveSessionData(data: {
const jsonKeys = flattenJSON(sessionData);
- const flattendData = jsonKeys.map(a => ({
+ const flattenedData = jsonKeys.map(a => ({
id: uuid(),
websiteId,
sessionId,
@@ -32,7 +32,7 @@ export async function saveSessionData(data: {
},
}),
client.sessionData.createMany({
- data: flattendData as any,
+ data: flattenedData as any,
}),
]);
}
diff --git a/src/queries/index.ts b/src/queries/index.ts
index afec8e4e..f0002881 100644
--- a/src/queries/index.ts
+++ b/src/queries/index.ts
@@ -14,6 +14,7 @@ export * from './analytics/events/saveEvent';
export * from './analytics/reports/getFunnel';
export * from './analytics/reports/getRetention';
export * from './analytics/reports/getInsights';
+export * from './analytics/reports/getUTM';
export * from './analytics/pageviews/getPageviewMetrics';
export * from './analytics/pageviews/getPageviewStats';
export * from './analytics/sessions/createSession';
diff --git a/src/store/app.ts b/src/store/app.ts
index 8fa1a0d5..f71a245b 100644
--- a/src/store/app.ts
+++ b/src/store/app.ts
@@ -9,9 +9,17 @@ import {
} from 'lib/constants';
import { getItem } from 'next-basics';
+function getDefaultTheme() {
+ return typeof window !== 'undefined'
+ ? window?.matchMedia('(prefers-color-scheme: dark)')?.matches
+ ? 'dark'
+ : 'light'
+ : 'light';
+}
+
const initialState = {
locale: getItem(LOCALE_CONFIG) || DEFAULT_LOCALE,
- theme: getItem(THEME_CONFIG) || DEFAULT_THEME,
+ theme: getItem(THEME_CONFIG) || getDefaultTheme() || DEFAULT_THEME,
dateRange: getItem(DATE_RANGE_CONFIG) || DEFAULT_DATE_RANGE,
shareToken: null,
user: null,
@@ -40,7 +48,7 @@ export function setConfig(config: object) {
store.setState({ config });
}
-export function setDateRange(dateRange: object) {
+export function setDateRange(dateRange: string | object) {
store.setState({ dateRange });
}
diff --git a/src/styles/variables.css b/src/styles/variables.css
index 686fac84..5b8c067e 100644
--- a/src/styles/variables.css
+++ b/src/styles/variables.css
@@ -4,3 +4,10 @@ html body {
--primary600: var(--blue1000);
--primary700: var(--blue1100);
}
+
+[data-theme='dark'] {
+ --primary400: var(--blue600);
+ --primary500: var(--blue700);
+ --primary600: var(--blue800);
+ --primary700: var(--blue900);
+}
diff --git a/src/tracker/index.js b/src/tracker/index.js
index 87e79ef6..ff08aa19 100644
--- a/src/tracker/index.js
+++ b/src/tracker/index.js
@@ -14,16 +14,17 @@
const _data = 'data-';
const _false = 'false';
+ const _true = 'true';
const attr = currentScript.getAttribute.bind(currentScript);
const website = attr(_data + 'website-id');
const hostUrl = attr(_data + 'host-url');
const autoTrack = attr(_data + 'auto-track') !== _false;
+ const stripSearch = attr(_data + 'strip-search') === _true;
const domain = attr(_data + 'domains') || '';
const domains = domain.split(',').map(n => n.trim());
- const root = hostUrl
- ? hostUrl.replace(/\/$/, '')
- : currentScript.src.split('/').slice(0, -1).join('/');
- const endpoint = `${root}/api/send`;
+ const host =
+ hostUrl || '__COLLECT_API_HOST__' || currentScript.src.split('/').slice(0, -1).join('/');
+ const endpoint = `${host.replace(/\/$/, '')}__COLLECT_API_ENDPOINT__`;
const screen = `${width}x${height}`;
const eventRegex = /data-umami-event-([\w-_]+)/;
const eventNameAttribute = _data + 'umami-event';
@@ -221,7 +222,7 @@
};
}
- let currentUrl = `${pathname}${search}`;
+ let currentUrl = `${pathname}${stripSearch ? '' : search}`;
let currentRef = document.referrer;
let title = document.title;
let cache;
diff --git a/yarn.lock b/yarn.lock
index a376eeea..55199fe0 100644
--- a/yarn.lock
+++ b/yarn.lock
@@ -1105,13 +1105,20 @@
resolved "https://registry.yarnpkg.com/@babel/regjsgen/-/regjsgen-0.8.0.tgz#f0ba69b075e1f05fb2825b7fad991e7adbb18310"
integrity sha512-x/rqGMdzj+fWZvCOYForTghzbtqPDZ5gPwaoNGHdgDfF2QA/XZbCBp4Moo5scrkAMPhB7z26XM/AaHuIJdgauA==
-"@babel/runtime@^7.0.0", "@babel/runtime@^7.12.5", "@babel/runtime@^7.23.2":
+"@babel/runtime@^7.0.0":
version "7.23.6"
resolved "https://registry.yarnpkg.com/@babel/runtime/-/runtime-7.23.6.tgz#c05e610dc228855dc92ef1b53d07389ed8ab521d"
integrity sha512-zHd0eUrf5GZoOWVCXp6koAKQTfZV07eit6bGPmJgnZdnSAvvZee6zniW2XMF7Cmc4ISOOnPy3QaSiIJGJkVEDQ==
dependencies:
regenerator-runtime "^0.14.0"
+"@babel/runtime@^7.12.5", "@babel/runtime@^7.23.2":
+ version "7.24.0"
+ resolved "https://registry.yarnpkg.com/@babel/runtime/-/runtime-7.24.0.tgz#584c450063ffda59697021430cb47101b085951e"
+ integrity sha512-Chk32uHMg6TnQdvw2e9IlqPpFX/6NLuK0Ys2PqLb7/gL5uFn9mXvK715FGLlOLQrcO4qIkNHkvPGktzzXexsFw==
+ dependencies:
+ regenerator-runtime "^0.14.0"
+
"@babel/runtime@^7.15.4", "@babel/runtime@^7.21.0", "@babel/runtime@^7.8.4", "@babel/runtime@^7.9.2":
version "7.23.2"
resolved "https://registry.yarnpkg.com/@babel/runtime/-/runtime-7.23.2.tgz#062b0ac103261d68a966c4c7baf2ae3e62ec3885"
@@ -1192,17 +1199,17 @@
resolved "https://registry.yarnpkg.com/@bcoe/v8-coverage/-/v8-coverage-0.2.3.tgz#75a2e8b51cb758a7553d6804a5932d7aace75c39"
integrity sha512-0hYQ8SB4Db5zvZB4axdMHGwEaQjkZzFjQiN9LVYvIFB2nSUHW9tYpxWriPrWDASIxiaXax83REcLxuSdnGPZtw==
-"@clickhouse/client-common@0.2.7":
- version "0.2.7"
- resolved "https://registry.yarnpkg.com/@clickhouse/client-common/-/client-common-0.2.7.tgz#c238ef9f5386f7d7a18e09931bb765a4ad4d7ebb"
- integrity sha512-vgZm+8c5Cu1toIx1/xplF5dEHlCPw+7pJDOOEtLv2CIUVZ0Bl6nGVZ43EWxRdHeah9ivTfoRWhN1zI1PxjH0xQ==
+"@clickhouse/client-common@0.2.10":
+ version "0.2.10"
+ resolved "https://registry.yarnpkg.com/@clickhouse/client-common/-/client-common-0.2.10.tgz#62f454d2cc2ee27a325034a2cca47c6f5c90d22e"
+ integrity sha512-BvTY0IXS96y9RUeNCpKL4HUzHmY80L0lDcGN0lmUD6zjOqYMn78+xyHYJ/AIAX7JQsc+/KwFt2soZutQTKxoGQ==
"@clickhouse/client@^0.2.2":
- version "0.2.7"
- resolved "https://registry.yarnpkg.com/@clickhouse/client/-/client-0.2.7.tgz#f13103d7a4ab39d86307e6211504f46b8c71faae"
- integrity sha512-ZiyarrGngHc+f5AjZSA7mkQfvnE/71jgXk304B0ps8V+aBpE2CsFB6AQmE/Mk2YkP5j+8r/JfG+m0AZWmE27ig==
+ version "0.2.10"
+ resolved "https://registry.yarnpkg.com/@clickhouse/client/-/client-0.2.10.tgz#519561f3a4fff837bb606c52abfe74e5e7e9abb3"
+ integrity sha512-ZwBgzjEAFN/ogS0ym5KHVbR7Hx/oYCX01qGp2baEyfN2HM73kf/7Vp3GvMHWRy+zUXISONEtFv7UTViOXnmFrg==
dependencies:
- "@clickhouse/client-common" "0.2.7"
+ "@clickhouse/client-common" "0.2.10"
"@colors/colors@1.5.0":
version "1.5.0"
@@ -1511,10 +1518,10 @@
minimatch "^3.1.2"
strip-json-comments "^3.1.1"
-"@eslint/js@8.56.0":
- version "8.56.0"
- resolved "https://registry.yarnpkg.com/@eslint/js/-/js-8.56.0.tgz#ef20350fec605a7f7035a01764731b2de0f3782b"
- integrity sha512-gMsVel9D7f2HLkBma9VbtzZRehRogVRfbr++f06nL2vnCGCNlzOD+/MUov/F4p8myyAHspEhVobgjpX64q5m6A==
+"@eslint/js@8.57.0":
+ version "8.57.0"
+ resolved "https://registry.yarnpkg.com/@eslint/js/-/js-8.57.0.tgz#a5417ae8427873f1dd08b70b3574b453e67b5f7f"
+ integrity sha512-Ys+3g2TaW7gADOJzPt83SJtCDhMjndcDMFVQ/Tj9iA1BfJzFKD9mAUXT3OenpuPHbI6P/myECxRJrofUsDx/5g==
"@fastify/accept-negotiator@^1.1.0":
version "1.1.0"
@@ -1556,12 +1563,12 @@
"@formatjs/intl-localematcher" "0.2.25"
tslib "^2.1.0"
-"@formatjs/ecma402-abstract@1.18.0":
- version "1.18.0"
- resolved "https://registry.yarnpkg.com/@formatjs/ecma402-abstract/-/ecma402-abstract-1.18.0.tgz#e2120e7101020140661b58430a7ff4262705a2f2"
- integrity sha512-PEVLoa3zBevWSCZzPIM/lvPCi8P5l4G+NXQMc/CjEiaCWgyHieUoo0nM7Bs0n/NbuQ6JpXEolivQ9pKSBHaDlA==
+"@formatjs/ecma402-abstract@1.18.2":
+ version "1.18.2"
+ resolved "https://registry.yarnpkg.com/@formatjs/ecma402-abstract/-/ecma402-abstract-1.18.2.tgz#bf103712a406874eb1e387858d5be2371ab3aa14"
+ integrity sha512-+QoPW4csYALsQIl8GbN14igZzDbuwzcpWrku9nyMXlaqAlwRBgl5V+p0vWMGFqHOw37czNXaP/lEk4wbLgcmtA==
dependencies:
- "@formatjs/intl-localematcher" "0.5.2"
+ "@formatjs/intl-localematcher" "0.5.4"
tslib "^2.4.0"
"@formatjs/ecma402-abstract@1.4.0":
@@ -1594,13 +1601,13 @@
"@formatjs/icu-skeleton-parser" "1.3.6"
tslib "^2.1.0"
-"@formatjs/icu-messageformat-parser@2.7.3":
- version "2.7.3"
- resolved "https://registry.yarnpkg.com/@formatjs/icu-messageformat-parser/-/icu-messageformat-parser-2.7.3.tgz#c8c95e7c9f8141bdb93bea0e92e4fcace19d3c9f"
- integrity sha512-X/jy10V9S/vW+qlplqhMUxR8wErQ0mmIYSq4mrjpjDl9mbuGcCILcI1SUYkL5nlM4PJqpc0KOS0bFkkJNPxYRw==
+"@formatjs/icu-messageformat-parser@2.7.6":
+ version "2.7.6"
+ resolved "https://registry.yarnpkg.com/@formatjs/icu-messageformat-parser/-/icu-messageformat-parser-2.7.6.tgz#3d69806de056d2919d53dad895a5ff4851e4e9ff"
+ integrity sha512-etVau26po9+eewJKYoiBKP6743I1br0/Ie00Pb/S/PtmYfmjTcOn2YCh2yNkSZI12h6Rg+BOgQYborXk46BvkA==
dependencies:
- "@formatjs/ecma402-abstract" "1.18.0"
- "@formatjs/icu-skeleton-parser" "1.7.0"
+ "@formatjs/ecma402-abstract" "1.18.2"
+ "@formatjs/icu-skeleton-parser" "1.8.0"
tslib "^2.4.0"
"@formatjs/icu-skeleton-parser@1.3.6":
@@ -1611,30 +1618,30 @@
"@formatjs/ecma402-abstract" "1.11.4"
tslib "^2.1.0"
-"@formatjs/icu-skeleton-parser@1.7.0":
- version "1.7.0"
- resolved "https://registry.yarnpkg.com/@formatjs/icu-skeleton-parser/-/icu-skeleton-parser-1.7.0.tgz#796938d6d0ba8fc75bb9edee038d1350bfee32cb"
- integrity sha512-Cfdo/fgbZzpN/jlN/ptQVe0lRHora+8ezrEeg2RfrNjyp+YStwBy7cqDY8k5/z2LzXg6O0AdzAV91XS0zIWv+A==
+"@formatjs/icu-skeleton-parser@1.8.0":
+ version "1.8.0"
+ resolved "https://registry.yarnpkg.com/@formatjs/icu-skeleton-parser/-/icu-skeleton-parser-1.8.0.tgz#5f3d3a620c687d6f8c180d80d1241e8f213acf79"
+ integrity sha512-QWLAYvM0n8hv7Nq5BEs4LKIjevpVpbGLAJgOaYzg9wABEoX1j0JO1q2/jVkO6CVlq0dbsxZCngS5aXbysYueqA==
dependencies:
- "@formatjs/ecma402-abstract" "1.18.0"
+ "@formatjs/ecma402-abstract" "1.18.2"
tslib "^2.4.0"
-"@formatjs/intl-displaynames@6.6.4":
- version "6.6.4"
- resolved "https://registry.yarnpkg.com/@formatjs/intl-displaynames/-/intl-displaynames-6.6.4.tgz#dd9ca9bb2d1f4b140cc8814667bc830802621674"
- integrity sha512-ET8KQ+L9Q0K8x1SnJQa4DNssUcbATlMopWqYvGGR8yAvw5qwAQc1fv+DshCoZNIE9pbcue0IGC4kWNAkWqlFag==
+"@formatjs/intl-displaynames@6.6.6":
+ version "6.6.6"
+ resolved "https://registry.yarnpkg.com/@formatjs/intl-displaynames/-/intl-displaynames-6.6.6.tgz#be9fea4d24f577bb1a9d0f3ef4f2dcdabb4fe42d"
+ integrity sha512-Dg5URSjx0uzF8VZXtHb6KYZ6LFEEhCbAbKoYChYHEOnMFTw/ZU3jIo/NrujzQD2EfKPgQzIq73LOUvW6Z/LpFA==
dependencies:
- "@formatjs/ecma402-abstract" "1.18.0"
- "@formatjs/intl-localematcher" "0.5.2"
+ "@formatjs/ecma402-abstract" "1.18.2"
+ "@formatjs/intl-localematcher" "0.5.4"
tslib "^2.4.0"
-"@formatjs/intl-listformat@7.5.3":
- version "7.5.3"
- resolved "https://registry.yarnpkg.com/@formatjs/intl-listformat/-/intl-listformat-7.5.3.tgz#c6f028471839cd1014760498f783fdfe011422d5"
- integrity sha512-l7EOr0Yh1m8KagytukB90yw81uyzrM7amKFrgxXqphz4KeSIL0KPa68lPsdtZ+JmQB73GaDQRwLOwUKFZ1VZPQ==
+"@formatjs/intl-listformat@7.5.5":
+ version "7.5.5"
+ resolved "https://registry.yarnpkg.com/@formatjs/intl-listformat/-/intl-listformat-7.5.5.tgz#e4c7d741f2201c65e7da71326726e61332c7161e"
+ integrity sha512-XoI52qrU6aBGJC9KJddqnacuBbPlb/bXFN+lIFVFhQ1RnFHpzuFrlFdjD9am2O7ZSYsyqzYRpkVcXeT1GHkwDQ==
dependencies:
- "@formatjs/ecma402-abstract" "1.18.0"
- "@formatjs/intl-localematcher" "0.5.2"
+ "@formatjs/ecma402-abstract" "1.18.2"
+ "@formatjs/intl-localematcher" "0.5.4"
tslib "^2.4.0"
"@formatjs/intl-localematcher@0.2.25":
@@ -1644,10 +1651,10 @@
dependencies:
tslib "^2.1.0"
-"@formatjs/intl-localematcher@0.5.2":
- version "0.5.2"
- resolved "https://registry.yarnpkg.com/@formatjs/intl-localematcher/-/intl-localematcher-0.5.2.tgz#5fcf029fd218905575e5080fa33facdcb623d532"
- integrity sha512-txaaE2fiBMagLrR4jYhxzFO6wEdEG4TPMqrzBAcbr4HFUYzH/YC+lg6OIzKCHm8WgDdyQevxbAAV1OgcXctuGw==
+"@formatjs/intl-localematcher@0.5.4":
+ version "0.5.4"
+ resolved "https://registry.yarnpkg.com/@formatjs/intl-localematcher/-/intl-localematcher-0.5.4.tgz#caa71f2e40d93e37d58be35cfffe57865f2b366f"
+ integrity sha512-zTwEpWOzZ2CiKcB93BLngUX59hQkuZjT2+SAQEscSm52peDW/getsawMcWF1rGRpMCX6D7nSJA3CzJ8gn13N/g==
dependencies:
tslib "^2.4.0"
@@ -1659,17 +1666,17 @@
"@formatjs/ecma402-abstract" "1.4.0"
tslib "^2.0.1"
-"@formatjs/intl@2.9.9":
- version "2.9.9"
- resolved "https://registry.yarnpkg.com/@formatjs/intl/-/intl-2.9.9.tgz#866629b565e20dd7490f9e77ee41a00748913e8f"
- integrity sha512-JI3CNgL2Zdg5lv9ncT2sYKqbAj2RGrCbdzaCckIxMPxn4QuHuOVvYUGmBAXVusBmfG/0sxLmMrnwnBioz+QKdA==
+"@formatjs/intl@2.10.0":
+ version "2.10.0"
+ resolved "https://registry.yarnpkg.com/@formatjs/intl/-/intl-2.10.0.tgz#d7bb557e172ceb0bb0be9298b61e9de957119985"
+ integrity sha512-X3xT9guVkKDS86EKV80lS0KxoazUglkJTGZO66sKY7otgl0VeStPA8B3u8UkKT47PexVV98fUzjpkchYmbe9nw==
dependencies:
- "@formatjs/ecma402-abstract" "1.18.0"
+ "@formatjs/ecma402-abstract" "1.18.2"
"@formatjs/fast-memoize" "2.2.0"
- "@formatjs/icu-messageformat-parser" "2.7.3"
- "@formatjs/intl-displaynames" "6.6.4"
- "@formatjs/intl-listformat" "7.5.3"
- intl-messageformat "10.5.8"
+ "@formatjs/icu-messageformat-parser" "2.7.6"
+ "@formatjs/intl-displaynames" "6.6.6"
+ "@formatjs/intl-listformat" "7.5.5"
+ intl-messageformat "10.5.11"
tslib "^2.4.0"
"@formatjs/ts-transformer@3.9.4":
@@ -1692,13 +1699,13 @@
tslib "^2.0.1"
typescript "^4.0"
-"@humanwhocodes/config-array@^0.11.13":
- version "0.11.13"
- resolved "https://registry.yarnpkg.com/@humanwhocodes/config-array/-/config-array-0.11.13.tgz#075dc9684f40a531d9b26b0822153c1e832ee297"
- integrity sha512-JSBDMiDKSzQVngfRjOdFXgFfklaXI4K9nLF49Auh21lmBWRLIK3+xTErTWD4KU54pb6coM6ESE7Awz/FNU3zgQ==
+"@humanwhocodes/config-array@^0.11.14":
+ version "0.11.14"
+ resolved "https://registry.yarnpkg.com/@humanwhocodes/config-array/-/config-array-0.11.14.tgz#d78e481a039f7566ecc9660b4ea7fe6b1fec442b"
+ integrity sha512-3T8LkOmg45BV5FICb15QQMsyUSWrQ8AygVfC7ZG32zOalnqrilm018ZVCw0eapXux8FtA33q8PSRSstjee3jSg==
dependencies:
- "@humanwhocodes/object-schema" "^2.0.1"
- debug "^4.1.1"
+ "@humanwhocodes/object-schema" "^2.0.2"
+ debug "^4.3.1"
minimatch "^3.0.5"
"@humanwhocodes/module-importer@^1.0.1":
@@ -1706,16 +1713,28 @@
resolved "https://registry.yarnpkg.com/@humanwhocodes/module-importer/-/module-importer-1.0.1.tgz#af5b2691a22b44be847b0ca81641c5fb6ad0172c"
integrity sha512-bxveV4V8v5Yb4ncFTT3rPSgZBOpCkjfK0y4oVVVJwIuDVBRMDXrPyXRL988i5ap9m9bnyEEjWfm5WkBmtffLfA==
-"@humanwhocodes/object-schema@^2.0.1":
- version "2.0.1"
- resolved "https://registry.yarnpkg.com/@humanwhocodes/object-schema/-/object-schema-2.0.1.tgz#e5211452df060fa8522b55c7b3c0c4d1981cb044"
- integrity sha512-dvuCeX5fC9dXgJn9t+X5atfmgQAzUOWqS1254Gh0m6i8wKd10ebXkfNKiRK+1GWi/yTvvLDHpoxLr0xxxeslWw==
+"@humanwhocodes/object-schema@^2.0.2":
+ version "2.0.2"
+ resolved "https://registry.yarnpkg.com/@humanwhocodes/object-schema/-/object-schema-2.0.2.tgz#d9fae00a2d5cb40f92cfe64b47ad749fbc38f917"
+ integrity sha512-6EwiSjwWYP7pTckG6I5eyFANjPhmPjUX9JRLUSfNPC7FX7zK9gyZAfUEaECL6ALTpGX5AjnBq3C9XmVWPitNpw==
"@ioredis/commands@^1.1.1":
version "1.2.0"
resolved "https://registry.yarnpkg.com/@ioredis/commands/-/commands-1.2.0.tgz#6d61b3097470af1fdbbe622795b8921d42018e11"
integrity sha512-Sx1pU8EM64o2BrqNpEO1CNLtKQwyhuXuqyfH7oGKCk+1a33d2r5saW8zNwm3j6BTExtjrv2BxTgzzkMwts6vGg==
+"@isaacs/cliui@^8.0.2":
+ version "8.0.2"
+ resolved "https://registry.yarnpkg.com/@isaacs/cliui/-/cliui-8.0.2.tgz#b37667b7bc181c168782259bab42474fbf52b550"
+ integrity sha512-O8jcjabXaleOG9DQ0+ARXWZBTfnP4WNAqzuiJK7ll44AmxGKv/J2M4TPjxjY3znBCfvBXFzucm1twdyFybFqEA==
+ dependencies:
+ string-width "^5.1.2"
+ string-width-cjs "npm:string-width@^4.2.0"
+ strip-ansi "^7.0.1"
+ strip-ansi-cjs "npm:strip-ansi@^6.0.1"
+ wrap-ansi "^8.1.0"
+ wrap-ansi-cjs "npm:wrap-ansi@^7.0.0"
+
"@istanbuljs/load-nyc-config@^1.0.0":
version "1.1.0"
resolved "https://registry.yarnpkg.com/@istanbuljs/load-nyc-config/-/load-nyc-config-1.1.0.tgz#fd3db1d59ecf7cf121e80650bb86712f9b55eced"
@@ -2124,12 +2143,11 @@
is-promise "^4.0.0"
"@netlify/functions@^2.4.0":
- version "2.4.1"
- resolved "https://registry.yarnpkg.com/@netlify/functions/-/functions-2.4.1.tgz#93bc87313474285993b4de7cde6335ada0665870"
- integrity sha512-sRFYBaz6dJP1MdUtk/5QNmshhg5UDmB+DUssmH6v9WUG85MrwyExEfGfJA5eClXATjXm0coTvO5nLAlyCpK7QQ==
+ version "2.6.0"
+ resolved "https://registry.yarnpkg.com/@netlify/functions/-/functions-2.6.0.tgz#801a6fe8ceef2ce1512c637a28e53e6a3aae289b"
+ integrity sha512-vU20tij0fb4nRGACqb+5SQvKd50JYyTyEhQetCMHdakcJFzjLDivvRR16u1G2Oy4A7xNAtGJF1uz8reeOtTVcQ==
dependencies:
- "@netlify/serverless-functions-api" "1.12.3"
- is-promise "^4.0.0"
+ "@netlify/serverless-functions-api" "1.14.0"
"@netlify/ipx@^1.4.6":
version "1.4.6"
@@ -2182,70 +2200,70 @@
slash "^3.0.0"
tiny-glob "^0.2.9"
-"@netlify/serverless-functions-api@1.12.3":
- version "1.12.3"
- resolved "https://registry.yarnpkg.com/@netlify/serverless-functions-api/-/serverless-functions-api-1.12.3.tgz#cf1abc7ca2c9d3f920fea458c44bdda4d3e614e4"
- integrity sha512-g1AZ78pCvMnalZtbnViVLGfG5ufjKyKoi3plLSUtZqh0wVuMR7ZGegeZHhOoY4wRfkkETVvWfhgfcpLMbGM5Lg==
+"@netlify/serverless-functions-api@1.14.0":
+ version "1.14.0"
+ resolved "https://registry.yarnpkg.com/@netlify/serverless-functions-api/-/serverless-functions-api-1.14.0.tgz#2bedff76cf898e24e48161aa2508776c4d261ed1"
+ integrity sha512-HUNETLNvNiC2J+SB/YuRwJA9+agPrc0azSoWVk8H85GC+YE114hcS5JW+dstpKwVerp2xILE3vNWN7IMXP5Q5Q==
dependencies:
"@netlify/node-cookies" "^0.1.0"
urlpattern-polyfill "8.0.2"
-"@next/env@14.1.0":
- version "14.1.0"
- resolved "https://registry.yarnpkg.com/@next/env/-/env-14.1.0.tgz#43d92ebb53bc0ae43dcc64fb4d418f8f17d7a341"
- integrity sha512-Py8zIo+02ht82brwwhTg36iogzFqGLPXlRGKQw5s+qP/kMNc4MAyDeEwBKDijk6zTIbegEgu8Qy7C1LboslQAw==
+"@next/env@14.1.3":
+ version "14.1.3"
+ resolved "https://registry.yarnpkg.com/@next/env/-/env-14.1.3.tgz#73007b64d487bbb95ed83145195f734fc1182d10"
+ integrity sha512-VhgXTvrgeBRxNPjyfBsDIMvgsKDxjlpw4IAUsHCX8Gjl1vtHUYRT3+xfQ/wwvLPDd/6kqfLqk9Pt4+7gysuCKQ==
-"@next/eslint-plugin-next@14.0.4":
- version "14.0.4"
- resolved "https://registry.yarnpkg.com/@next/eslint-plugin-next/-/eslint-plugin-next-14.0.4.tgz#474fd88d92209270021186043513fbdc4203f5ec"
- integrity sha512-U3qMNHmEZoVmHA0j/57nRfi3AscXNvkOnxDmle/69Jz/G0o/gWjXTDdlgILZdrxQ0Lw/jv2mPW8PGy0EGIHXhQ==
+"@next/eslint-plugin-next@14.1.3":
+ version "14.1.3"
+ resolved "https://registry.yarnpkg.com/@next/eslint-plugin-next/-/eslint-plugin-next-14.1.3.tgz#31ffb36dbd5d04537aff83eb69ec23007d081608"
+ integrity sha512-VCnZI2cy77Yaj3L7Uhs3+44ikMM1VD/fBMwvTBb3hIaTIuqa+DmG4dhUDq+MASu3yx97KhgsVJbsas0XuiKyww==
dependencies:
- glob "7.1.7"
+ glob "10.3.10"
-"@next/swc-darwin-arm64@14.1.0":
- version "14.1.0"
- resolved "https://registry.yarnpkg.com/@next/swc-darwin-arm64/-/swc-darwin-arm64-14.1.0.tgz#70a57c87ab1ae5aa963a3ba0f4e59e18f4ecea39"
- integrity sha512-nUDn7TOGcIeyQni6lZHfzNoo9S0euXnu0jhsbMOmMJUBfgsnESdjN97kM7cBqQxZa8L/bM9om/S5/1dzCrW6wQ==
+"@next/swc-darwin-arm64@14.1.3":
+ version "14.1.3"
+ resolved "https://registry.yarnpkg.com/@next/swc-darwin-arm64/-/swc-darwin-arm64-14.1.3.tgz#b4c218fdb49275972d91e9a9a0ccadba243b6739"
+ integrity sha512-LALu0yIBPRiG9ANrD5ncB3pjpO0Gli9ZLhxdOu6ZUNf3x1r3ea1rd9Q+4xxUkGrUXLqKVK9/lDkpYIJaCJ6AHQ==
-"@next/swc-darwin-x64@14.1.0":
- version "14.1.0"
- resolved "https://registry.yarnpkg.com/@next/swc-darwin-x64/-/swc-darwin-x64-14.1.0.tgz#0863a22feae1540e83c249384b539069fef054e9"
- integrity sha512-1jgudN5haWxiAl3O1ljUS2GfupPmcftu2RYJqZiMJmmbBT5M1XDffjUtRUzP4W3cBHsrvkfOFdQ71hAreNQP6g==
+"@next/swc-darwin-x64@14.1.3":
+ version "14.1.3"
+ resolved "https://registry.yarnpkg.com/@next/swc-darwin-x64/-/swc-darwin-x64-14.1.3.tgz#aa0d4357179d68daaa6f400708b76666708ffec9"
+ integrity sha512-E/9WQeXxkqw2dfcn5UcjApFgUq73jqNKaE5bysDm58hEUdUGedVrnRhblhJM7HbCZNhtVl0j+6TXsK0PuzXTCg==
-"@next/swc-linux-arm64-gnu@14.1.0":
- version "14.1.0"
- resolved "https://registry.yarnpkg.com/@next/swc-linux-arm64-gnu/-/swc-linux-arm64-gnu-14.1.0.tgz#893da533d3fce4aec7116fe772d4f9b95232423c"
- integrity sha512-RHo7Tcj+jllXUbK7xk2NyIDod3YcCPDZxj1WLIYxd709BQ7WuRYl3OWUNG+WUfqeQBds6kvZYlc42NJJTNi4tQ==
+"@next/swc-linux-arm64-gnu@14.1.3":
+ version "14.1.3"
+ resolved "https://registry.yarnpkg.com/@next/swc-linux-arm64-gnu/-/swc-linux-arm64-gnu-14.1.3.tgz#1ba8df39c04368ede185f268c3a817a8f4290e4c"
+ integrity sha512-USArX9B+3rZSXYLFvgy0NVWQgqh6LHWDmMt38O4lmiJNQcwazeI6xRvSsliDLKt+78KChVacNiwvOMbl6g6BBw==
-"@next/swc-linux-arm64-musl@14.1.0":
- version "14.1.0"
- resolved "https://registry.yarnpkg.com/@next/swc-linux-arm64-musl/-/swc-linux-arm64-musl-14.1.0.tgz#d81ddcf95916310b8b0e4ad32b637406564244c0"
- integrity sha512-v6kP8sHYxjO8RwHmWMJSq7VZP2nYCkRVQ0qolh2l6xroe9QjbgV8siTbduED4u0hlk0+tjS6/Tuy4n5XCp+l6g==
+"@next/swc-linux-arm64-musl@14.1.3":
+ version "14.1.3"
+ resolved "https://registry.yarnpkg.com/@next/swc-linux-arm64-musl/-/swc-linux-arm64-musl-14.1.3.tgz#2fa8fe435862eb186aca6d6068c8aef2126ab11e"
+ integrity sha512-esk1RkRBLSIEp1qaQXv1+s6ZdYzuVCnDAZySpa62iFTMGTisCyNQmqyCTL9P+cLJ4N9FKCI3ojtSfsyPHJDQNw==
-"@next/swc-linux-x64-gnu@14.1.0":
- version "14.1.0"
- resolved "https://registry.yarnpkg.com/@next/swc-linux-x64-gnu/-/swc-linux-x64-gnu-14.1.0.tgz#18967f100ec19938354332dcb0268393cbacf581"
- integrity sha512-zJ2pnoFYB1F4vmEVlb/eSe+VH679zT1VdXlZKX+pE66grOgjmKJHKacf82g/sWE4MQ4Rk2FMBCRnX+l6/TVYzQ==
+"@next/swc-linux-x64-gnu@14.1.3":
+ version "14.1.3"
+ resolved "https://registry.yarnpkg.com/@next/swc-linux-x64-gnu/-/swc-linux-x64-gnu-14.1.3.tgz#57a687b44337af219e07a79ecc8c63a3c1b2d020"
+ integrity sha512-8uOgRlYEYiKo0L8YGeS+3TudHVDWDjPVDUcST+z+dUzgBbTEwSSIaSgF/vkcC1T/iwl4QX9iuUyUdQEl0Kxalg==
-"@next/swc-linux-x64-musl@14.1.0":
- version "14.1.0"
- resolved "https://registry.yarnpkg.com/@next/swc-linux-x64-musl/-/swc-linux-x64-musl-14.1.0.tgz#77077cd4ba8dda8f349dc7ceb6230e68ee3293cf"
- integrity sha512-rbaIYFt2X9YZBSbH/CwGAjbBG2/MrACCVu2X0+kSykHzHnYH5FjHxwXLkcoJ10cX0aWCEynpu+rP76x0914atg==
+"@next/swc-linux-x64-musl@14.1.3":
+ version "14.1.3"
+ resolved "https://registry.yarnpkg.com/@next/swc-linux-x64-musl/-/swc-linux-x64-musl-14.1.3.tgz#8c057f8f7fb9679915df25eda6ab0ea1b7af85ff"
+ integrity sha512-DX2zqz05ziElLoxskgHasaJBREC5Y9TJcbR2LYqu4r7naff25B4iXkfXWfcp69uD75/0URmmoSgT8JclJtrBoQ==
-"@next/swc-win32-arm64-msvc@14.1.0":
- version "14.1.0"
- resolved "https://registry.yarnpkg.com/@next/swc-win32-arm64-msvc/-/swc-win32-arm64-msvc-14.1.0.tgz#5f0b8cf955644104621e6d7cc923cad3a4c5365a"
- integrity sha512-o1N5TsYc8f/HpGt39OUQpQ9AKIGApd3QLueu7hXk//2xq5Z9OxmV6sQfNp8C7qYmiOlHYODOGqNNa0e9jvchGQ==
+"@next/swc-win32-arm64-msvc@14.1.3":
+ version "14.1.3"
+ resolved "https://registry.yarnpkg.com/@next/swc-win32-arm64-msvc/-/swc-win32-arm64-msvc-14.1.3.tgz#5367333e701f722009592013502aa8e735bee782"
+ integrity sha512-HjssFsCdsD4GHstXSQxsi2l70F/5FsRTRQp8xNgmQs15SxUfUJRvSI9qKny/jLkY3gLgiCR3+6A7wzzK0DBlfA==
-"@next/swc-win32-ia32-msvc@14.1.0":
- version "14.1.0"
- resolved "https://registry.yarnpkg.com/@next/swc-win32-ia32-msvc/-/swc-win32-ia32-msvc-14.1.0.tgz#21f4de1293ac5e5a168a412b139db5d3420a89d0"
- integrity sha512-XXIuB1DBRCFwNO6EEzCTMHT5pauwaSj4SWs7CYnME57eaReAKBXCnkUE80p/pAZcewm7hs+vGvNqDPacEXHVkw==
+"@next/swc-win32-ia32-msvc@14.1.3":
+ version "14.1.3"
+ resolved "https://registry.yarnpkg.com/@next/swc-win32-ia32-msvc/-/swc-win32-ia32-msvc-14.1.3.tgz#dc455021fee85e037f6fb4134e85895dce5a0495"
+ integrity sha512-DRuxD5axfDM1/Ue4VahwSxl1O5rn61hX8/sF0HY8y0iCbpqdxw3rB3QasdHn/LJ6Wb2y5DoWzXcz3L1Cr+Thrw==
-"@next/swc-win32-x64-msvc@14.1.0":
- version "14.1.0"
- resolved "https://registry.yarnpkg.com/@next/swc-win32-x64-msvc/-/swc-win32-x64-msvc-14.1.0.tgz#e561fb330466d41807123d932b365cf3d33ceba2"
- integrity sha512-9WEbVRRAqJ3YFVqEZIxUqkiO8l1nool1LmNxygr5HWF8AcSYsEpneUDhmjUVJEzO2A04+oPtZdombzzPPkTtgg==
+"@next/swc-win32-x64-msvc@14.1.3":
+ version "14.1.3"
+ resolved "https://registry.yarnpkg.com/@next/swc-win32-x64-msvc/-/swc-win32-x64-msvc-14.1.3.tgz#4a8d4384901f0c48ece9dbb60cb9aea107d39e7c"
+ integrity sha512-uC2DaDoWH7h1P/aJ4Fok3Xiw6P0Lo4ez7NbowW2VGNXw/Xv6tOuLUcxhBYZxsSUJtpeknCi8/fvnSpyCFp4Rcg==
"@nodelib/fs.scandir@2.1.5":
version "2.1.5"
@@ -2360,51 +2378,56 @@
"@parcel/watcher-win32-ia32" "2.3.0"
"@parcel/watcher-win32-x64" "2.3.0"
-"@prisma/client@5.9.1":
- version "5.9.1"
- resolved "https://registry.yarnpkg.com/@prisma/client/-/client-5.9.1.tgz#d92bd2f7f006e0316cb4fda9d73f235965cf2c64"
- integrity sha512-caSOnG4kxcSkhqC/2ShV7rEoWwd3XrftokxJqOCMVvia4NYV/TPtJlS9C2os3Igxw/Qyxumj9GBQzcStzECvtQ==
+"@pkgjs/parseargs@^0.11.0":
+ version "0.11.0"
+ resolved "https://registry.yarnpkg.com/@pkgjs/parseargs/-/parseargs-0.11.0.tgz#a77ea742fab25775145434eb1d2328cf5013ac33"
+ integrity sha512-+1VkjdD0QBLPodGrJUeqarH8VAIvQODIbwh9XpP5Syisf7YoQgsJKPNFoqqLQlu+VQ/tVSshMR6loPMn8U+dPg==
-"@prisma/debug@5.9.1":
- version "5.9.1"
- resolved "https://registry.yarnpkg.com/@prisma/debug/-/debug-5.9.1.tgz#906274e73d3267f88b69459199fa3c51cd9511a3"
- integrity sha512-yAHFSFCg8KVoL0oRUno3m60GAjsUKYUDkQ+9BA2X2JfVR3kRVSJFc/GpQ2fSORi4pSHZR9orfM4UC9OVXIFFTA==
+"@prisma/client@5.10.2":
+ version "5.10.2"
+ resolved "https://registry.yarnpkg.com/@prisma/client/-/client-5.10.2.tgz#e087b40a4de8e3171eb9cbf0a873465cd2068e17"
+ integrity sha512-ef49hzB2yJZCvM5gFHMxSFL9KYrIP9udpT5rYo0CsHD4P9IKj473MbhU1gjKKftiwWBTIyrt9jukprzZXazyag==
-"@prisma/engines-version@5.9.0-32.23fdc5965b1e05fc54e5f26ed3de66776b93de64":
- version "5.9.0-32.23fdc5965b1e05fc54e5f26ed3de66776b93de64"
- resolved "https://registry.yarnpkg.com/@prisma/engines-version/-/engines-version-5.9.0-32.23fdc5965b1e05fc54e5f26ed3de66776b93de64.tgz#54d2164f28d23e09d41cf9eb0bddbbe7f3aaa660"
- integrity sha512-HFl7275yF0FWbdcNvcSRbbu9JCBSLMcurYwvWc8WGDnpu7APxQo2ONtZrUggU3WxLxUJ2uBX+0GOFIcJeVeOOQ==
+"@prisma/debug@5.10.2":
+ version "5.10.2"
+ resolved "https://registry.yarnpkg.com/@prisma/debug/-/debug-5.10.2.tgz#74be81d8969978f4d53c1b4e76d61f04bfbc3951"
+ integrity sha512-bkBOmH9dpEBbMKFJj8V+Zp8IZHIBjy3fSyhLhxj4FmKGb/UBSt9doyfA6k1UeUREsMJft7xgPYBbHSOYBr8XCA==
-"@prisma/engines@5.9.1":
- version "5.9.1"
- resolved "https://registry.yarnpkg.com/@prisma/engines/-/engines-5.9.1.tgz#767539afc6f193a182d0495b30b027f61f279073"
- integrity sha512-gkdXmjxQ5jktxWNdDA5aZZ6R8rH74JkoKq6LD5mACSvxd2vbqWeWIOV0Py5wFC8vofOYShbt6XUeCIUmrOzOnQ==
+"@prisma/engines-version@5.10.0-34.5a9203d0590c951969e85a7d07215503f4672eb9":
+ version "5.10.0-34.5a9203d0590c951969e85a7d07215503f4672eb9"
+ resolved "https://registry.yarnpkg.com/@prisma/engines-version/-/engines-version-5.10.0-34.5a9203d0590c951969e85a7d07215503f4672eb9.tgz#1502335d4d72d2014cb25b8ad8a740a3a13400ea"
+ integrity sha512-uCy/++3Jx/O3ufM+qv2H1L4tOemTNqcP/gyEVOlZqTpBvYJUe0tWtW0y3o2Ueq04mll4aM5X3f6ugQftOSLdFQ==
+
+"@prisma/engines@5.10.2":
+ version "5.10.2"
+ resolved "https://registry.yarnpkg.com/@prisma/engines/-/engines-5.10.2.tgz#a4851d90f76ad6d22e783d5fd2e2e8c0640f1e81"
+ integrity sha512-HkSJvix6PW8YqEEt3zHfCYYJY69CXsNdhU+wna+4Y7EZ+AwzeupMnUThmvaDA7uqswiHkgm5/SZ6/4CStjaGmw==
dependencies:
- "@prisma/debug" "5.9.1"
- "@prisma/engines-version" "5.9.0-32.23fdc5965b1e05fc54e5f26ed3de66776b93de64"
- "@prisma/fetch-engine" "5.9.1"
- "@prisma/get-platform" "5.9.1"
+ "@prisma/debug" "5.10.2"
+ "@prisma/engines-version" "5.10.0-34.5a9203d0590c951969e85a7d07215503f4672eb9"
+ "@prisma/fetch-engine" "5.10.2"
+ "@prisma/get-platform" "5.10.2"
"@prisma/extension-read-replicas@^0.3.0":
version "0.3.0"
resolved "https://registry.yarnpkg.com/@prisma/extension-read-replicas/-/extension-read-replicas-0.3.0.tgz#2842a7c928f957c1dd58a6256104797596d43426"
integrity sha512-F9+rSmYday6GT2qjhJtkZcBOpLO5LtpvFcMGqrBDHf+78LEdSuxfFjOxYlNuqk4B+th62yxpbhfpmB9/Mca14Q==
-"@prisma/fetch-engine@5.9.1":
- version "5.9.1"
- resolved "https://registry.yarnpkg.com/@prisma/fetch-engine/-/fetch-engine-5.9.1.tgz#5d3b2c9af54a242e37b3f9561b59ab72f8e92818"
- integrity sha512-l0goQOMcNVOJs1kAcwqpKq3ylvkD9F04Ioe1oJoCqmz05mw22bNAKKGWuDd3zTUoUZr97va0c/UfLNru+PDmNA==
+"@prisma/fetch-engine@5.10.2":
+ version "5.10.2"
+ resolved "https://registry.yarnpkg.com/@prisma/fetch-engine/-/fetch-engine-5.10.2.tgz#a061f6727d395c7033b55f9c6e92f8741a70d5c5"
+ integrity sha512-dSmXcqSt6DpTmMaLQ9K8ZKzVAMH3qwGCmYEZr/uVnzVhxRJ1EbT/w2MMwIdBNq1zT69Rvh0h75WMIi0mrIw7Hg==
dependencies:
- "@prisma/debug" "5.9.1"
- "@prisma/engines-version" "5.9.0-32.23fdc5965b1e05fc54e5f26ed3de66776b93de64"
- "@prisma/get-platform" "5.9.1"
+ "@prisma/debug" "5.10.2"
+ "@prisma/engines-version" "5.10.0-34.5a9203d0590c951969e85a7d07215503f4672eb9"
+ "@prisma/get-platform" "5.10.2"
-"@prisma/get-platform@5.9.1":
- version "5.9.1"
- resolved "https://registry.yarnpkg.com/@prisma/get-platform/-/get-platform-5.9.1.tgz#a66bb46ab4d30db786c84150ef074ab0aad4549e"
- integrity sha512-6OQsNxTyhvG+T2Ksr8FPFpuPeL4r9u0JF0OZHUBI/Uy9SS43sPyAIutt4ZEAyqWQt104ERh70EZedkHZKsnNbg==
+"@prisma/get-platform@5.10.2":
+ version "5.10.2"
+ resolved "https://registry.yarnpkg.com/@prisma/get-platform/-/get-platform-5.10.2.tgz#7af97b1d82e5574a474e3fbf6eaf04f4156bc535"
+ integrity sha512-nqXP6vHiY2PIsebBAuDeWiUYg8h8mfjBckHh6Jezuwej0QJNnjDiOq30uesmg+JXxGk99nqyG3B7wpcOODzXvg==
dependencies:
- "@prisma/debug" "5.9.1"
+ "@prisma/debug" "5.10.2"
"@react-spring/animated@~9.7.3":
version "9.7.3"
@@ -2544,9 +2567,9 @@
picomatch "^2.3.1"
"@rushstack/eslint-patch@^1.3.3":
- version "1.6.0"
- resolved "https://registry.yarnpkg.com/@rushstack/eslint-patch/-/eslint-patch-1.6.0.tgz#1898e7a7b943680d757417a47fb10f5fcc230b39"
- integrity sha512-2/U3GXA6YiPYQDLGwtGlnNgKYBSwCFIHf8Y9LUY5VATHdtbLlU0Y1R3QoBnT0aB4qv/BEiVVsj7LJXoQCgJ2vA==
+ version "1.7.2"
+ resolved "https://registry.yarnpkg.com/@rushstack/eslint-patch/-/eslint-patch-1.7.2.tgz#2d4260033e199b3032a08b41348ac10de21c47e9"
+ integrity sha512-RbhOOTCNoCrbfkRyoXODZp75MlpiHMgbE5MEBZAnnnLyQNgrigEj4p0lzsMDyc1zVsJDLrivB58tgg3emX0eEA==
"@sinclair/typebox@^0.27.8":
version "0.27.8"
@@ -2695,17 +2718,17 @@
dependencies:
tslib "^2.4.0"
-"@tanstack/query-core@5.14.1":
- version "5.14.1"
- resolved "https://registry.yarnpkg.com/@tanstack/query-core/-/query-core-5.14.1.tgz#4f7df092127124fdd2797cbd70ea469f878c12c5"
- integrity sha512-TlZarySCVEiap4K7BCvrsYZnX7jBbEkR55YMrk8ELcRbuAx6ydL+qoxqUt8Fq8VMvQyGt52icn6T7eJL1Q35KQ==
+"@tanstack/query-core@5.25.0":
+ version "5.25.0"
+ resolved "https://registry.yarnpkg.com/@tanstack/query-core/-/query-core-5.25.0.tgz#e08ed0a9fad34c8005d1a282e57280031ac50cdc"
+ integrity sha512-vlobHP64HTuSE68lWF1mEhwSRC5Q7gaT+a/m9S+ItuN+ruSOxe1rFnR9j0ACWQ314BPhBEVKfBQ6mHL0OWfdbQ==
"@tanstack/react-query@^5.12.2":
- version "5.14.1"
- resolved "https://registry.yarnpkg.com/@tanstack/react-query/-/react-query-5.14.1.tgz#d56bfedaa4c75cbcfcec856d89848a225f3d4f15"
- integrity sha512-v7jhe/3jhChiR0XJbGHaG5WNPd/cURwzDGBCr4rzpUTeudPzxrtVRKsF1xJRLcJK3qH/0gIwTYHIPZ3gj+01Yw==
+ version "5.25.0"
+ resolved "https://registry.yarnpkg.com/@tanstack/react-query/-/react-query-5.25.0.tgz#f4dac794cf10dd956aa56dbbdf67049a5ba2669d"
+ integrity sha512-u+n5R7mLO7RmeiIonpaCRVXNRWtZEef/aVZ/XGWRPa7trBIvGtzlfo0Ah7ZtnTYfrKEVwnZ/tzRCBcoiqJ/tFw==
dependencies:
- "@tanstack/query-core" "5.14.1"
+ "@tanstack/query-core" "5.25.0"
"@trysound/sax@0.2.0":
version "0.2.0"
@@ -2834,7 +2857,7 @@
dependencies:
"@types/node" "*"
-"@types/hoist-non-react-statics@^3.3.0", "@types/hoist-non-react-statics@^3.3.1":
+"@types/hoist-non-react-statics@^3.3.0":
version "3.3.4"
resolved "https://registry.yarnpkg.com/@types/hoist-non-react-statics/-/hoist-non-react-statics-3.3.4.tgz#cc477ce0283bb9d19ea0cbfa2941fe2c8493a1be"
integrity sha512-ZchYkbieA+7tnxwX/SCBySx9WwvWR8TaP5tb2jRAzwvLb/rWchGw3v0w3pqUbUvj0GCwW2Xz/AVPSk6kUGctXQ==
@@ -2842,6 +2865,14 @@
"@types/react" "*"
hoist-non-react-statics "^3.3.0"
+"@types/hoist-non-react-statics@^3.3.1":
+ version "3.3.5"
+ resolved "https://registry.yarnpkg.com/@types/hoist-non-react-statics/-/hoist-non-react-statics-3.3.5.tgz#dab7867ef789d87e2b4b0003c9d65c49cc44a494"
+ integrity sha512-SbcrWzkKBw2cdwRTwQAswfpB9g9LJWfjtUeW/jvNwbhC8cpmmNYVePa+ncbUe0rGTQ7G3Ff6mYUN2VMfLVr+Sg==
+ dependencies:
+ "@types/react" "*"
+ hoist-non-react-statics "^3.3.0"
+
"@types/istanbul-lib-coverage@*", "@types/istanbul-lib-coverage@^2.0.0", "@types/istanbul-lib-coverage@^2.0.1":
version "2.0.6"
resolved "https://registry.yarnpkg.com/@types/istanbul-lib-coverage/-/istanbul-lib-coverage-2.0.6.tgz#7739c232a1fee9b4d3ce8985f314c0c6d33549d7"
@@ -2927,9 +2958,9 @@
integrity sha512-w+tIMs3rq2afQdsPJlODhoUEKzFP1ayaoyl1CcnwtIlsVe7K7bA1NGm4s3PraqTLlXnbIN84zuBlxBWo1u9BLw==
"@types/node@^20.9.0":
- version "20.10.5"
- resolved "https://registry.yarnpkg.com/@types/node/-/node-20.10.5.tgz#47ad460b514096b7ed63a1dae26fad0914ed3ab2"
- integrity sha512-nNPsNE65wjMxEKI93yOP+NPGGBJz/PoN3kZsVLee0XMiJolxSekEVD8wRwBUBqkwc7UWop0edW50yrCQW4CyRw==
+ version "20.11.25"
+ resolved "https://registry.yarnpkg.com/@types/node/-/node-20.11.25.tgz#0f50d62f274e54dd7a49f7704cc16bfbcccaf49f"
+ integrity sha512-TBHyJxk2b7HceLVGFcpAUjsa5zIdsPWlR6XHfyGzd0SFu+/NFgQgMAl96MSDZgQDvJAvV6BKsFOrt6zIL09JDw==
dependencies:
undici-types "~5.26.4"
@@ -2944,9 +2975,9 @@
integrity sha512-ga8y9v9uyeiLdpKddhxYQkxNDrfvuPrlFb0N1qnZZByvcElJaXthF1UhvCh9TLWJBEHeNtdnbysW7Y6Uq8CVng==
"@types/react-dom@^18.2.17":
- version "18.2.18"
- resolved "https://registry.yarnpkg.com/@types/react-dom/-/react-dom-18.2.18.tgz#16946e6cd43971256d874bc3d0a72074bb8571dd"
- integrity sha512-TJxDm6OfAX2KJWJdMEVTwWke5Sc/E/RlnPGvGfS0W7+6ocy2xhDVQVh/KvC2Uf7kACs+gDytdusDSdWfWkaNzw==
+ version "18.2.21"
+ resolved "https://registry.yarnpkg.com/@types/react-dom/-/react-dom-18.2.21.tgz#b8c81715cebdebb2994378616a8d54ace54f043a"
+ integrity sha512-gnvBA/21SA4xxqNXEwNiVcP0xSGHh/gi1VhWv9Bl46a0ItbTT5nFY+G9VSQpaG/8N/qdJpJ+vftQ4zflTtnjLw==
dependencies:
"@types/react" "*"
@@ -2967,19 +2998,10 @@
dependencies:
"@types/react" "*"
-"@types/react@*", "@types/react@^18.2.41":
- version "18.2.45"
- resolved "https://registry.yarnpkg.com/@types/react/-/react-18.2.45.tgz#253f4fac288e7e751ab3dc542000fb687422c15c"
- integrity sha512-TtAxCNrlrBp8GoeEp1npd5g+d/OejJHFxS3OWmrPBMFaVQMSN0OFySozJio5BHxTuTeug00AVXVAjfDSfk+lUg==
- dependencies:
- "@types/prop-types" "*"
- "@types/scheduler" "*"
- csstype "^3.0.2"
-
-"@types/react@16 || 17 || 18":
- version "18.2.30"
- resolved "https://registry.yarnpkg.com/@types/react/-/react-18.2.30.tgz#b84f786864fc46f18545364a54d5e1316308e59b"
- integrity sha512-OfqdJnDsSo4UNw0bqAjFCuBpLYQM7wvZidz0hVxHRjrEkzRlvZL1pJVyOSY55HMiKvRNEo9DUBRuEl7FNlJ/Vg==
+"@types/react@*", "@types/react@16 || 17 || 18", "@types/react@^18.2.41":
+ version "18.2.64"
+ resolved "https://registry.yarnpkg.com/@types/react/-/react-18.2.64.tgz#3700fbb6b2fa60a6868ec1323ae4cbd446a2197d"
+ integrity sha512-MlmPvHgjj2p3vZaxbQgFUQFvD8QiZwACfGqEdDSWou5yISWxDQ4/74nCAwsUiX7UFLKZz3BbVSPj+YxeoGGCfg==
dependencies:
"@types/prop-types" "*"
"@types/scheduler" "*"
@@ -3002,16 +3024,11 @@
dependencies:
schema-utils "*"
-"@types/semver@^7.3.12":
+"@types/semver@^7.3.12", "@types/semver@^7.5.0":
version "7.5.8"
resolved "https://registry.yarnpkg.com/@types/semver/-/semver-7.5.8.tgz#8268a8c57a3e4abd25c165ecd36237db7948a55e"
integrity sha512-I8EUhyrgfLrcTkzV3TSsGyl1tSuPrEDzr0yd5m90UgNxQkyDXULk3b6MlQqTCpZpNtWe1K0hzclnZkTcLBe2UQ==
-"@types/semver@^7.5.0":
- version "7.5.6"
- resolved "https://registry.yarnpkg.com/@types/semver/-/semver-7.5.6.tgz#c65b2bfce1bec346582c07724e3f8c1017a20339"
- integrity sha512-dn1l8LaMea/IjDoHNd9J52uBbInB796CDffS6VdIxvqYCPSG0V0DzHp76GpaWnlhg88uYyPbXCDIowa86ybd5A==
-
"@types/sinonjs__fake-timers@8.1.1":
version "8.1.1"
resolved "https://registry.yarnpkg.com/@types/sinonjs__fake-timers/-/sinonjs__fake-timers-8.1.1.tgz#b49c2c70150141a15e0fa7e79cf1f92a72934ce3"
@@ -3047,15 +3064,15 @@
"@types/node" "*"
"@typescript-eslint/eslint-plugin@^6.7.3":
- version "6.14.0"
- resolved "https://registry.yarnpkg.com/@typescript-eslint/eslint-plugin/-/eslint-plugin-6.14.0.tgz#fc1ab5f23618ba590c87e8226ff07a760be3dd7b"
- integrity sha512-1ZJBykBCXaSHG94vMMKmiHoL0MhNHKSVlcHVYZNw+BKxufhqQVTOawNpwwI1P5nIFZ/4jLVop0mcY6mJJDFNaw==
+ version "6.21.0"
+ resolved "https://registry.yarnpkg.com/@typescript-eslint/eslint-plugin/-/eslint-plugin-6.21.0.tgz#30830c1ca81fd5f3c2714e524c4303e0194f9cd3"
+ integrity sha512-oy9+hTPCUFpngkEZUSzbf9MxI65wbKFoQYsgPdILTfbUldp5ovUuphZVe4i30emU9M/kP+T64Di0mxl7dSw3MA==
dependencies:
"@eslint-community/regexpp" "^4.5.1"
- "@typescript-eslint/scope-manager" "6.14.0"
- "@typescript-eslint/type-utils" "6.14.0"
- "@typescript-eslint/utils" "6.14.0"
- "@typescript-eslint/visitor-keys" "6.14.0"
+ "@typescript-eslint/scope-manager" "6.21.0"
+ "@typescript-eslint/type-utils" "6.21.0"
+ "@typescript-eslint/utils" "6.21.0"
+ "@typescript-eslint/visitor-keys" "6.21.0"
debug "^4.3.4"
graphemer "^1.4.0"
ignore "^5.2.4"
@@ -3064,14 +3081,14 @@
ts-api-utils "^1.0.1"
"@typescript-eslint/parser@^5.4.2 || ^6.0.0", "@typescript-eslint/parser@^6.7.3":
- version "6.14.0"
- resolved "https://registry.yarnpkg.com/@typescript-eslint/parser/-/parser-6.14.0.tgz#a2d6a732e0d2b95c73f6a26ae7362877cc1b4212"
- integrity sha512-QjToC14CKacd4Pa7JK4GeB/vHmWFJckec49FR4hmIRf97+KXole0T97xxu9IFiPxVQ1DBWrQ5wreLwAGwWAVQA==
+ version "6.21.0"
+ resolved "https://registry.yarnpkg.com/@typescript-eslint/parser/-/parser-6.21.0.tgz#af8fcf66feee2edc86bc5d1cf45e33b0630bf35b"
+ integrity sha512-tbsV1jPne5CkFQCgPBcDOt30ItF7aJoZL997JSF7MhGQqOeT3svWRYxiqlfA5RUdlHN6Fi+EI9bxqbdyAUZjYQ==
dependencies:
- "@typescript-eslint/scope-manager" "6.14.0"
- "@typescript-eslint/types" "6.14.0"
- "@typescript-eslint/typescript-estree" "6.14.0"
- "@typescript-eslint/visitor-keys" "6.14.0"
+ "@typescript-eslint/scope-manager" "6.21.0"
+ "@typescript-eslint/types" "6.21.0"
+ "@typescript-eslint/typescript-estree" "6.21.0"
+ "@typescript-eslint/visitor-keys" "6.21.0"
debug "^4.3.4"
"@typescript-eslint/scope-manager@5.62.0":
@@ -3082,21 +3099,21 @@
"@typescript-eslint/types" "5.62.0"
"@typescript-eslint/visitor-keys" "5.62.0"
-"@typescript-eslint/scope-manager@6.14.0":
- version "6.14.0"
- resolved "https://registry.yarnpkg.com/@typescript-eslint/scope-manager/-/scope-manager-6.14.0.tgz#53d24363fdb5ee0d1d8cda4ed5e5321272ab3d48"
- integrity sha512-VT7CFWHbZipPncAZtuALr9y3EuzY1b1t1AEkIq2bTXUPKw+pHoXflGNG5L+Gv6nKul1cz1VH8fz16IThIU0tdg==
+"@typescript-eslint/scope-manager@6.21.0":
+ version "6.21.0"
+ resolved "https://registry.yarnpkg.com/@typescript-eslint/scope-manager/-/scope-manager-6.21.0.tgz#ea8a9bfc8f1504a6ac5d59a6df308d3a0630a2b1"
+ integrity sha512-OwLUIWZJry80O99zvqXVEioyniJMa+d2GrqpUTqi5/v5D5rOrppJVBPa0yKCblcigC0/aYAzxxqQ1B+DS2RYsg==
dependencies:
- "@typescript-eslint/types" "6.14.0"
- "@typescript-eslint/visitor-keys" "6.14.0"
+ "@typescript-eslint/types" "6.21.0"
+ "@typescript-eslint/visitor-keys" "6.21.0"
-"@typescript-eslint/type-utils@6.14.0":
- version "6.14.0"
- resolved "https://registry.yarnpkg.com/@typescript-eslint/type-utils/-/type-utils-6.14.0.tgz#ac9cb5ba0615c837f1a6b172feeb273d36e4f8af"
- integrity sha512-x6OC9Q7HfYKqjnuNu5a7kffIYs3No30isapRBJl1iCHLitD8O0lFbRcVGiOcuyN837fqXzPZ1NS10maQzZMKqw==
+"@typescript-eslint/type-utils@6.21.0":
+ version "6.21.0"
+ resolved "https://registry.yarnpkg.com/@typescript-eslint/type-utils/-/type-utils-6.21.0.tgz#6473281cfed4dacabe8004e8521cee0bd9d4c01e"
+ integrity sha512-rZQI7wHfao8qMX3Rd3xqeYSMCL3SoiSQLBATSiVKARdFGCYSRvmViieZjqc58jKgs8Y8i9YvVVhRbHSTA4VBag==
dependencies:
- "@typescript-eslint/typescript-estree" "6.14.0"
- "@typescript-eslint/utils" "6.14.0"
+ "@typescript-eslint/typescript-estree" "6.21.0"
+ "@typescript-eslint/utils" "6.21.0"
debug "^4.3.4"
ts-api-utils "^1.0.1"
@@ -3105,10 +3122,10 @@
resolved "https://registry.yarnpkg.com/@typescript-eslint/types/-/types-5.62.0.tgz#258607e60effa309f067608931c3df6fed41fd2f"
integrity sha512-87NVngcbVXUahrRTqIK27gD2t5Cu1yuCXxbLcFtCzZGlfyVWWh8mLHkoxzjsB6DDNnvdL+fW8MiwPEJyGJQDgQ==
-"@typescript-eslint/types@6.14.0":
- version "6.14.0"
- resolved "https://registry.yarnpkg.com/@typescript-eslint/types/-/types-6.14.0.tgz#935307f7a931016b7a5eb25d494ea3e1f613e929"
- integrity sha512-uty9H2K4Xs8E47z3SnXEPRNDfsis8JO27amp2GNCnzGETEW3yTqEIVg5+AI7U276oGF/tw6ZA+UesxeQ104ceA==
+"@typescript-eslint/types@6.21.0":
+ version "6.21.0"
+ resolved "https://registry.yarnpkg.com/@typescript-eslint/types/-/types-6.21.0.tgz#205724c5123a8fef7ecd195075fa6e85bac3436d"
+ integrity sha512-1kFmZ1rOm5epu9NZEZm1kckCDGj5UJEf7P1kliH4LKu/RkwpsfqqGmY2OOcUs18lSlQBKLDYBOGxRVtrMN5lpg==
"@typescript-eslint/typescript-estree@5.62.0":
version "5.62.0"
@@ -3123,30 +3140,31 @@
semver "^7.3.7"
tsutils "^3.21.0"
-"@typescript-eslint/typescript-estree@6.14.0":
- version "6.14.0"
- resolved "https://registry.yarnpkg.com/@typescript-eslint/typescript-estree/-/typescript-estree-6.14.0.tgz#90c7ddd45cd22139adf3d4577580d04c9189ac13"
- integrity sha512-yPkaLwK0yH2mZKFE/bXkPAkkFgOv15GJAUzgUVonAbv0Hr4PK/N2yaA/4XQbTZQdygiDkpt5DkxPELqHguNvyw==
+"@typescript-eslint/typescript-estree@6.21.0":
+ version "6.21.0"
+ resolved "https://registry.yarnpkg.com/@typescript-eslint/typescript-estree/-/typescript-estree-6.21.0.tgz#c47ae7901db3b8bddc3ecd73daff2d0895688c46"
+ integrity sha512-6npJTkZcO+y2/kr+z0hc4HwNfrrP4kNYh57ek7yCNlrBjWQ1Y0OS7jiZTkgumrvkX5HkEKXFZkkdFNkaW2wmUQ==
dependencies:
- "@typescript-eslint/types" "6.14.0"
- "@typescript-eslint/visitor-keys" "6.14.0"
+ "@typescript-eslint/types" "6.21.0"
+ "@typescript-eslint/visitor-keys" "6.21.0"
debug "^4.3.4"
globby "^11.1.0"
is-glob "^4.0.3"
+ minimatch "9.0.3"
semver "^7.5.4"
ts-api-utils "^1.0.1"
-"@typescript-eslint/utils@6.14.0":
- version "6.14.0"
- resolved "https://registry.yarnpkg.com/@typescript-eslint/utils/-/utils-6.14.0.tgz#856a9e274367d99ffbd39c48128b93a86c4261e3"
- integrity sha512-XwRTnbvRr7Ey9a1NT6jqdKX8y/atWG+8fAIu3z73HSP8h06i3r/ClMhmaF/RGWGW1tHJEwij1uEg2GbEmPYvYg==
+"@typescript-eslint/utils@6.21.0":
+ version "6.21.0"
+ resolved "https://registry.yarnpkg.com/@typescript-eslint/utils/-/utils-6.21.0.tgz#4714e7a6b39e773c1c8e97ec587f520840cd8134"
+ integrity sha512-NfWVaC8HP9T8cbKQxHcsJBY5YE1O33+jpMwN45qzWWaPDZgLIbo12toGMWnmhvCpd3sIxkpDw3Wv1B3dYrbDQQ==
dependencies:
"@eslint-community/eslint-utils" "^4.4.0"
"@types/json-schema" "^7.0.12"
"@types/semver" "^7.5.0"
- "@typescript-eslint/scope-manager" "6.14.0"
- "@typescript-eslint/types" "6.14.0"
- "@typescript-eslint/typescript-estree" "6.14.0"
+ "@typescript-eslint/scope-manager" "6.21.0"
+ "@typescript-eslint/types" "6.21.0"
+ "@typescript-eslint/typescript-estree" "6.21.0"
semver "^7.5.4"
"@typescript-eslint/utils@^5.10.0":
@@ -3171,12 +3189,12 @@
"@typescript-eslint/types" "5.62.0"
eslint-visitor-keys "^3.3.0"
-"@typescript-eslint/visitor-keys@6.14.0":
- version "6.14.0"
- resolved "https://registry.yarnpkg.com/@typescript-eslint/visitor-keys/-/visitor-keys-6.14.0.tgz#1d1d486581819287de824a56c22f32543561138e"
- integrity sha512-fB5cw6GRhJUz03MrROVuj5Zm/Q+XWlVdIsFj+Zb1Hvqouc8t+XP2H5y53QYU/MGtd2dPg6/vJJlhoX3xc2ehfw==
+"@typescript-eslint/visitor-keys@6.21.0":
+ version "6.21.0"
+ resolved "https://registry.yarnpkg.com/@typescript-eslint/visitor-keys/-/visitor-keys-6.21.0.tgz#87a99d077aa507e20e238b11d56cc26ade45fe47"
+ integrity sha512-JJtkDduxLi9bivAB+cYOVMtbkqdPOhZ+ZI5LC47MIRrDV4Yn2o+ZnW10Nkmr28xRpSpdJ6Sm42Hjf2+REYXm0A==
dependencies:
- "@typescript-eslint/types" "6.14.0"
+ "@typescript-eslint/types" "6.21.0"
eslint-visitor-keys "^3.4.1"
"@umami/prisma-client@^0.14.0":
@@ -3306,7 +3324,7 @@ acorn-walk@^8.1.1:
resolved "https://registry.yarnpkg.com/acorn-walk/-/acorn-walk-8.3.1.tgz#2f10f5b69329d90ae18c58bf1fa8fccd8b959a43"
integrity sha512-TgUZgYvqZprrl7YldZNoa9OciCAyZR+Ejm9eXzKCmjsF5IKp/wgQ7Z/ZpjpGTIUPwrHQIcYeI8qDh4PsEwxMbw==
-acorn@^8.10.0, acorn@^8.4.1, acorn@^8.9.0:
+acorn@^8.10.0, acorn@^8.4.1:
version "8.11.2"
resolved "https://registry.yarnpkg.com/acorn/-/acorn-8.11.2.tgz#ca0d78b51895be5390a5903c5b3bdcdaf78ae40b"
integrity sha512-nc0Axzp/0FILLEVsm4fNwLCwMttvhEI263QtVPQcbpfZZ3ts0hLsZGOpE6czNlid7CJ9MlyH8reXkpsf3YUY4w==
@@ -3316,6 +3334,11 @@ acorn@^8.8.2:
resolved "https://registry.yarnpkg.com/acorn/-/acorn-8.10.0.tgz#8be5b3907a67221a81ab23c7889c4c5526b62ec5"
integrity sha512-F0SAmZ8iUtS//m8DmCTA0jlh6TDKkHQyK6xc6V4KDTyZKA9dnvX9/3sRTVQrWm79glUAZbnmmNcdYwUIHWVybw==
+acorn@^8.9.0:
+ version "8.11.3"
+ resolved "https://registry.yarnpkg.com/acorn/-/acorn-8.11.3.tgz#71e0b14e13a4ec160724b38fb7b0f233b1b81d7a"
+ integrity sha512-Y9rRfJG5jcKOE0CLisYbojUjIrIEE7AGMzA/Sm4BslANhbS+cDMpgBdcPT91oJ7OuJ9hYJBx59RjbhxVnrF8Xg==
+
aggregate-error@^3.0.0:
version "3.1.0"
resolved "https://registry.yarnpkg.com/aggregate-error/-/aggregate-error-3.1.0.tgz#92670ff50f5359bdb7a3e0d40d0ec30c5737687a"
@@ -3453,13 +3476,13 @@ aria-query@^5.3.0:
dependencies:
dequal "^2.0.3"
-array-buffer-byte-length@^1.0.0:
- version "1.0.0"
- resolved "https://registry.yarnpkg.com/array-buffer-byte-length/-/array-buffer-byte-length-1.0.0.tgz#fabe8bc193fea865f317fe7807085ee0dee5aead"
- integrity sha512-LPuwb2P+NrQw3XhxGc36+XSvuBPopovXYTR9Ew++Du9Yb/bx5AzBfrIsBoj0EZUifjQU+sHL21sseZ3jerWO/A==
+array-buffer-byte-length@^1.0.1:
+ version "1.0.1"
+ resolved "https://registry.yarnpkg.com/array-buffer-byte-length/-/array-buffer-byte-length-1.0.1.tgz#1e5583ec16763540a27ae52eed99ff899223568f"
+ integrity sha512-ahC5W1xgou+KTXix4sAO8Ki12Q+jf4i0+tmk3sC+zgcynshkHxzpXdImBehiUYKKKDwvfFiJl1tZt6ewscS1Mg==
dependencies:
- call-bind "^1.0.2"
- is-array-buffer "^3.0.1"
+ call-bind "^1.0.5"
+ is-array-buffer "^3.0.4"
array-find-index@^1.0.1:
version "1.0.2"
@@ -3482,16 +3505,38 @@ array-union@^2.1.0:
resolved "https://registry.yarnpkg.com/array-union/-/array-union-2.1.0.tgz#b798420adbeb1de828d84acd8a2e23d3efe85e8d"
integrity sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw==
-array.prototype.findlastindex@^1.2.3:
- version "1.2.3"
- resolved "https://registry.yarnpkg.com/array.prototype.findlastindex/-/array.prototype.findlastindex-1.2.3.tgz#b37598438f97b579166940814e2c0493a4f50207"
- integrity sha512-LzLoiOMAxvy+Gd3BAq3B7VeIgPdo+Q8hthvKtXybMvRV0jrXfJM/t8mw7nNlpEcVlVUnCnM2KSX4XU5HmpodOA==
+array.prototype.filter@^1.0.3:
+ version "1.0.3"
+ resolved "https://registry.yarnpkg.com/array.prototype.filter/-/array.prototype.filter-1.0.3.tgz#423771edeb417ff5914111fff4277ea0624c0d0e"
+ integrity sha512-VizNcj/RGJiUyQBgzwxzE5oHdeuXY5hSbbmKMlphj1cy1Vl7Pn2asCGbSrru6hSQjmCzqTBPVWAF/whmEOVHbw==
dependencies:
call-bind "^1.0.2"
define-properties "^1.2.0"
es-abstract "^1.22.1"
- es-shim-unscopables "^1.0.0"
- get-intrinsic "^1.2.1"
+ es-array-method-boxes-properly "^1.0.0"
+ is-string "^1.0.7"
+
+array.prototype.findlast@^1.2.4:
+ version "1.2.4"
+ resolved "https://registry.yarnpkg.com/array.prototype.findlast/-/array.prototype.findlast-1.2.4.tgz#eeb9e45fc894055c82e5675c463e8077b827ad36"
+ integrity sha512-BMtLxpV+8BD+6ZPFIWmnUBpQoy+A+ujcg4rhp2iwCRJYA7PEh2MS4NL3lz8EiDlLrJPp2hg9qWihr5pd//jcGw==
+ dependencies:
+ call-bind "^1.0.5"
+ define-properties "^1.2.1"
+ es-abstract "^1.22.3"
+ es-errors "^1.3.0"
+ es-shim-unscopables "^1.0.2"
+
+array.prototype.findlastindex@^1.2.3:
+ version "1.2.4"
+ resolved "https://registry.yarnpkg.com/array.prototype.findlastindex/-/array.prototype.findlastindex-1.2.4.tgz#d1c50f0b3a9da191981ff8942a0aedd82794404f"
+ integrity sha512-hzvSHUshSpCflDR1QMUBLHGHP1VIEBegT4pix9H/Z92Xw3ySoy6c2qh7lJWTJnRJ8JCZ9bJNCgTyYaJGcJu6xQ==
+ dependencies:
+ call-bind "^1.0.5"
+ define-properties "^1.2.1"
+ es-abstract "^1.22.3"
+ es-errors "^1.3.0"
+ es-shim-unscopables "^1.0.2"
array.prototype.flat@^1.3.1, array.prototype.flat@^1.3.2:
version "1.3.2"
@@ -3503,7 +3548,7 @@ array.prototype.flat@^1.3.1, array.prototype.flat@^1.3.2:
es-abstract "^1.22.1"
es-shim-unscopables "^1.0.0"
-array.prototype.flatmap@^1.3.1, array.prototype.flatmap@^1.3.2:
+array.prototype.flatmap@^1.3.2:
version "1.3.2"
resolved "https://registry.yarnpkg.com/array.prototype.flatmap/-/array.prototype.flatmap-1.3.2.tgz#c9a7c6831db8e719d6ce639190146c24bbd3e527"
integrity sha512-Ewyx0c9PmpcsByhSW4r+9zDU7sGjFc86qf/kKtuSCRdhfbk0SNLLkaT5qvcHnRGgc5NP/ly/y+qkXkqONX54CQ==
@@ -3513,28 +3558,39 @@ array.prototype.flatmap@^1.3.1, array.prototype.flatmap@^1.3.2:
es-abstract "^1.22.1"
es-shim-unscopables "^1.0.0"
-array.prototype.tosorted@^1.1.1:
+array.prototype.toreversed@^1.1.2:
version "1.1.2"
- resolved "https://registry.yarnpkg.com/array.prototype.tosorted/-/array.prototype.tosorted-1.1.2.tgz#620eff7442503d66c799d95503f82b475745cefd"
- integrity sha512-HuQCHOlk1Weat5jzStICBCd83NxiIMwqDg/dHEsoefabn/hJRj5pVdWcPUSpRrwhwxZOsQassMpgN/xRYFBMIg==
+ resolved "https://registry.yarnpkg.com/array.prototype.toreversed/-/array.prototype.toreversed-1.1.2.tgz#b989a6bf35c4c5051e1dc0325151bf8088954eba"
+ integrity sha512-wwDCoT4Ck4Cz7sLtgUmzR5UV3YF5mFHUlbChCzZBQZ+0m2cl/DH3tKgvphv1nKgFsJ48oCSg6p91q2Vm0I/ZMA==
dependencies:
call-bind "^1.0.2"
define-properties "^1.2.0"
es-abstract "^1.22.1"
es-shim-unscopables "^1.0.0"
- get-intrinsic "^1.2.1"
-arraybuffer.prototype.slice@^1.0.2:
- version "1.0.2"
- resolved "https://registry.yarnpkg.com/arraybuffer.prototype.slice/-/arraybuffer.prototype.slice-1.0.2.tgz#98bd561953e3e74bb34938e77647179dfe6e9f12"
- integrity sha512-yMBKppFur/fbHu9/6USUe03bZ4knMYiwFBcyiaXB8Go0qNehwX6inYPzK9U0NeQvGxKthcmHcaR8P5MStSRBAw==
+array.prototype.tosorted@^1.1.3:
+ version "1.1.3"
+ resolved "https://registry.yarnpkg.com/array.prototype.tosorted/-/array.prototype.tosorted-1.1.3.tgz#c8c89348337e51b8a3c48a9227f9ce93ceedcba8"
+ integrity sha512-/DdH4TiTmOKzyQbp/eadcCVexiCb36xJg7HshYOYJnNZFDj33GEv0P7GxsynpShhq4OLYJzbGcBDkLsDt7MnNg==
dependencies:
- array-buffer-byte-length "^1.0.0"
- call-bind "^1.0.2"
- define-properties "^1.2.0"
- es-abstract "^1.22.1"
- get-intrinsic "^1.2.1"
- is-array-buffer "^3.0.2"
+ call-bind "^1.0.5"
+ define-properties "^1.2.1"
+ es-abstract "^1.22.3"
+ es-errors "^1.1.0"
+ es-shim-unscopables "^1.0.2"
+
+arraybuffer.prototype.slice@^1.0.3:
+ version "1.0.3"
+ resolved "https://registry.yarnpkg.com/arraybuffer.prototype.slice/-/arraybuffer.prototype.slice-1.0.3.tgz#097972f4255e41bc3425e37dc3f6421cf9aefde6"
+ integrity sha512-bMxMKAjg13EBSVscxTaYA4mRc5t1UAXa2kXiGTNfZ079HIWXEkKmkgFrh/nJqamaLSrXO5H4WFFkPEaLJWbs3A==
+ dependencies:
+ array-buffer-byte-length "^1.0.1"
+ call-bind "^1.0.5"
+ define-properties "^1.2.1"
+ es-abstract "^1.22.3"
+ es-errors "^1.2.1"
+ get-intrinsic "^1.2.3"
+ is-array-buffer "^3.0.4"
is-shared-array-buffer "^1.0.2"
arrify@^1.0.1:
@@ -3598,10 +3654,12 @@ autoprefixer@^10.4.13:
picocolors "^1.0.0"
postcss-value-parser "^4.2.0"
-available-typed-arrays@^1.0.5:
- version "1.0.5"
- resolved "https://registry.yarnpkg.com/available-typed-arrays/-/available-typed-arrays-1.0.5.tgz#92f95616501069d07d10edb2fc37d3e1c65123b7"
- integrity sha512-DMD0KiN46eipeziST1LPP/STfDU0sufISXmjSgvVsoU2tqxctQeASejWcfNtxYKqETM1UxQ8sp2OrSBWpHY6sw==
+available-typed-arrays@^1.0.6, available-typed-arrays@^1.0.7:
+ version "1.0.7"
+ resolved "https://registry.yarnpkg.com/available-typed-arrays/-/available-typed-arrays-1.0.7.tgz#a5cc375d6a03c2efc87a553f3e0b1522def14846"
+ integrity sha512-wvUjBtSGN7+7SjNpq/9M2Tg350UZD3q62IFZLbRAR1bSMlCo1ZaeW+BJ+D090e4hIIZLBcTDWe4Mh4jvUDajzQ==
+ dependencies:
+ possible-typed-array-names "^1.0.0"
aws-sign2@~0.7.0:
version "0.7.0"
@@ -3882,14 +3940,16 @@ cachedir@^2.3.0:
resolved "https://registry.yarnpkg.com/cachedir/-/cachedir-2.4.0.tgz#7fef9cf7367233d7c88068fe6e34ed0d355a610d"
integrity sha512-9EtFOZR8g22CL7BWjJ9BUx1+A/djkofnyW3aOXZORNW2kxoUpx2h+uN2cOqwPmFhnpVmxg+KW2OjOSgChTEvsQ==
-call-bind@^1.0.0, call-bind@^1.0.2, call-bind@^1.0.4, call-bind@^1.0.5:
- version "1.0.5"
- resolved "https://registry.yarnpkg.com/call-bind/-/call-bind-1.0.5.tgz#6fa2b7845ce0ea49bf4d8b9ef64727a2c2e2e513"
- integrity sha512-C3nQxfFZxFRVoJoGKKI8y3MOEo129NQ+FgQ08iye+Mk4zNZZGdjfs06bVTr+DBSlA66Q2VEcMki/cUCP4SercQ==
+call-bind@^1.0.2, call-bind@^1.0.5, call-bind@^1.0.6, call-bind@^1.0.7:
+ version "1.0.7"
+ resolved "https://registry.yarnpkg.com/call-bind/-/call-bind-1.0.7.tgz#06016599c40c56498c18769d2730be242b6fa3b9"
+ integrity sha512-GHTSNSYICQ7scH7sZ+M2rFopRoLh8t2bLSW6BbgrtLsahOIB5iyAVJf9GjWK3cYTDaMj4XdBpM1cA6pIS0Kv2w==
dependencies:
+ es-define-property "^1.0.0"
+ es-errors "^1.3.0"
function-bind "^1.1.2"
- get-intrinsic "^1.2.1"
- set-function-length "^1.1.1"
+ get-intrinsic "^1.2.4"
+ set-function-length "^1.2.1"
callsites@^3.0.0:
version "3.1.0"
@@ -3987,10 +4047,10 @@ charenc@0.0.2:
resolved "https://registry.yarnpkg.com/charenc/-/charenc-0.0.2.tgz#c0a1d2f3a7092e03774bfa83f14c0fc5790a8667"
integrity sha512-yrLQ/yVUFXkzg7EDQsPieE/53+0RlaWTs+wBrvW36cyilJ2SaDWfl4Yj7MtLTXleV9uEKefbAGUPv2/iWSooRA==
-chart.js@^4.2.1:
- version "4.4.1"
- resolved "https://registry.yarnpkg.com/chart.js/-/chart.js-4.4.1.tgz#ac5dc0e69a7758909158a96fe80ce43b3bb96a9f"
- integrity sha512-C74QN1bxwV1v2PEujhmKjOZ7iUM4w6BWs23Md/6aOZZSlwMzeCIDGuZay++rBgChYru7/+QFeoQW0fQoP534Dg==
+chart.js@^4.4.2:
+ version "4.4.2"
+ resolved "https://registry.yarnpkg.com/chart.js/-/chart.js-4.4.2.tgz#95962fa6430828ed325a480cc2d5f2b4e385ac31"
+ integrity sha512-6GD7iKwFpP5kbSD4MeRRRlTnQvxfQREy36uEtm1hzHzcOqwWx0YEHuspuoNlslu+nciLIB7fjjsHkUv/FzFcOg==
dependencies:
"@kurkle/color" "^0.3.0"
@@ -4047,9 +4107,9 @@ cjs-module-lexer@^1.0.0:
integrity sha512-0TNiGstbQmCFwt4akjjBg5pLRTSyj/PkWQ1ZoO2zntmg9yLqSRxwEa4iCfQLGjqhiqBfOJa7W/E8wfGrTDmlZQ==
classnames@^2.3.1:
- version "2.3.2"
- resolved "https://registry.yarnpkg.com/classnames/-/classnames-2.3.2.tgz#351d813bf0137fcc6a76a16b88208d2560a0d924"
- integrity sha512-CSbhY4cFEJRe6/GQzIk5qXZ4Jeg5pcsP7b5peFSDpffpe1cqjASH/n9UTjBwOp6XpMSTwQ8Za2K5V02ueA7Tmw==
+ version "2.5.1"
+ resolved "https://registry.yarnpkg.com/classnames/-/classnames-2.5.1.tgz#ba774c614be0f016da105c858e7159eae8e7687b"
+ integrity sha512-saHYOzhIQs6wy2sVxTM6bUDsQO4F50V9RQ22qBpEdCW+I+/Wmke2HOl6lS6dTpdxVhb88/I6+Hs+438c3lfUow==
clean-stack@^2.0.0:
version "2.2.0"
@@ -4751,14 +4811,14 @@ deepmerge@^4.2.2, deepmerge@^4.3.1:
resolved "https://registry.yarnpkg.com/deepmerge/-/deepmerge-4.3.1.tgz#44b5f2147cd3b00d4b56137685966f26fd25dd4a"
integrity sha512-3sUqbMEc77XqpdNO7FRyRog+eW3ph+GYCbj+rK+uYyRMuwsVy0rMiVtPn+QJlKFvWP/1PYpapqYn0Me2knFn+A==
-define-data-property@^1.0.1, define-data-property@^1.1.1:
- version "1.1.1"
- resolved "https://registry.yarnpkg.com/define-data-property/-/define-data-property-1.1.1.tgz#c35f7cd0ab09883480d12ac5cb213715587800b3"
- integrity sha512-E7uGkTzkk1d0ByLeSc6ZsFS79Axg+m1P/VsgYsxHgiuc3tFSj+MjMIwe90FC4lOAZzNBdY7kkO2P2wKdsQ1vgQ==
+define-data-property@^1.0.1, define-data-property@^1.1.4:
+ version "1.1.4"
+ resolved "https://registry.yarnpkg.com/define-data-property/-/define-data-property-1.1.4.tgz#894dc141bb7d3060ae4366f6a0107e68fbe48c5e"
+ integrity sha512-rBMvIzlpA8v6E+SJZoo++HAYqsLrkg7MSfIinMPFhmkorw7X+dOXVJQs+QT69zGkzMyfDnIMN2Wid1+NbL3T+A==
dependencies:
- get-intrinsic "^1.2.1"
+ es-define-property "^1.0.0"
+ es-errors "^1.3.0"
gopd "^1.0.1"
- has-property-descriptors "^1.0.0"
define-properties@^1.1.3, define-properties@^1.2.0, define-properties@^1.2.1:
version "1.2.1"
@@ -5004,9 +5064,9 @@ end-of-stream@^1.1.0, end-of-stream@^1.4.1:
once "^1.4.0"
enhanced-resolve@^5.12.0:
- version "5.15.0"
- resolved "https://registry.yarnpkg.com/enhanced-resolve/-/enhanced-resolve-5.15.0.tgz#1af946c7d93603eb88e9896cee4904dc012e9c35"
- integrity sha512-LXYT42KJ7lpIKECr2mAXIaMldcNCh/7E0KBKOu4KSfkHmP+mZmSs+8V5gBAqisWBy0OO4W5Oyys0GO1Y8KtdKg==
+ version "5.15.1"
+ resolved "https://registry.yarnpkg.com/enhanced-resolve/-/enhanced-resolve-5.15.1.tgz#384391e025f099e67b4b00bfd7f0906a408214e1"
+ integrity sha512-3d3JRbwsCLJsYgvb6NuWEG44jjPSOMuS73L/6+7BZuoKm3W+qXnSoIYVHi8dG7Qcg4inAY4jbzkZ7MnskePeDg==
dependencies:
graceful-fs "^4.2.4"
tapable "^2.2.0"
@@ -5036,86 +5096,106 @@ error-ex@^1.3.1:
dependencies:
is-arrayish "^0.2.1"
-es-abstract@^1.22.1:
- version "1.22.3"
- resolved "https://registry.yarnpkg.com/es-abstract/-/es-abstract-1.22.3.tgz#48e79f5573198de6dee3589195727f4f74bc4f32"
- integrity sha512-eiiY8HQeYfYH2Con2berK+To6GrK2RxbPawDkGq4UiCQQfZHb6wX9qQqkbpPqaxQFcl8d9QzZqo0tGE0VcrdwA==
+es-abstract@^1.22.1, es-abstract@^1.22.3, es-abstract@^1.22.4:
+ version "1.22.5"
+ resolved "https://registry.yarnpkg.com/es-abstract/-/es-abstract-1.22.5.tgz#1417df4e97cc55f09bf7e58d1e614bc61cb8df46"
+ integrity sha512-oW69R+4q2wG+Hc3KZePPZxOiisRIqfKBVo/HLx94QcJeWGU/8sZhCvc829rd1kS366vlJbzBfXf9yWwf0+Ko7w==
dependencies:
- array-buffer-byte-length "^1.0.0"
- arraybuffer.prototype.slice "^1.0.2"
- available-typed-arrays "^1.0.5"
- call-bind "^1.0.5"
- es-set-tostringtag "^2.0.1"
+ array-buffer-byte-length "^1.0.1"
+ arraybuffer.prototype.slice "^1.0.3"
+ available-typed-arrays "^1.0.7"
+ call-bind "^1.0.7"
+ es-define-property "^1.0.0"
+ es-errors "^1.3.0"
+ es-set-tostringtag "^2.0.3"
es-to-primitive "^1.2.1"
function.prototype.name "^1.1.6"
- get-intrinsic "^1.2.2"
- get-symbol-description "^1.0.0"
+ get-intrinsic "^1.2.4"
+ get-symbol-description "^1.0.2"
globalthis "^1.0.3"
gopd "^1.0.1"
- has-property-descriptors "^1.0.0"
- has-proto "^1.0.1"
+ has-property-descriptors "^1.0.2"
+ has-proto "^1.0.3"
has-symbols "^1.0.3"
- hasown "^2.0.0"
- internal-slot "^1.0.5"
- is-array-buffer "^3.0.2"
+ hasown "^2.0.1"
+ internal-slot "^1.0.7"
+ is-array-buffer "^3.0.4"
is-callable "^1.2.7"
- is-negative-zero "^2.0.2"
+ is-negative-zero "^2.0.3"
is-regex "^1.1.4"
- is-shared-array-buffer "^1.0.2"
+ is-shared-array-buffer "^1.0.3"
is-string "^1.0.7"
- is-typed-array "^1.1.12"
+ is-typed-array "^1.1.13"
is-weakref "^1.0.2"
object-inspect "^1.13.1"
object-keys "^1.1.1"
- object.assign "^4.1.4"
- regexp.prototype.flags "^1.5.1"
- safe-array-concat "^1.0.1"
- safe-regex-test "^1.0.0"
+ object.assign "^4.1.5"
+ regexp.prototype.flags "^1.5.2"
+ safe-array-concat "^1.1.0"
+ safe-regex-test "^1.0.3"
string.prototype.trim "^1.2.8"
string.prototype.trimend "^1.0.7"
string.prototype.trimstart "^1.0.7"
- typed-array-buffer "^1.0.0"
- typed-array-byte-length "^1.0.0"
- typed-array-byte-offset "^1.0.0"
- typed-array-length "^1.0.4"
+ typed-array-buffer "^1.0.2"
+ typed-array-byte-length "^1.0.1"
+ typed-array-byte-offset "^1.0.2"
+ typed-array-length "^1.0.5"
unbox-primitive "^1.0.2"
- which-typed-array "^1.1.13"
+ which-typed-array "^1.1.14"
-es-iterator-helpers@^1.0.12, es-iterator-helpers@^1.0.15:
- version "1.0.15"
- resolved "https://registry.yarnpkg.com/es-iterator-helpers/-/es-iterator-helpers-1.0.15.tgz#bd81d275ac766431d19305923707c3efd9f1ae40"
- integrity sha512-GhoY8uYqd6iwUl2kgjTm4CZAf6oo5mHK7BPqx3rKgx893YSsy0LGHV6gfqqQvZt/8xM8xeOnfXBCfqclMKkJ5g==
+es-array-method-boxes-properly@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/es-array-method-boxes-properly/-/es-array-method-boxes-properly-1.0.0.tgz#873f3e84418de4ee19c5be752990b2e44718d09e"
+ integrity sha512-wd6JXUmyHmt8T5a2xreUwKcGPq6f1f+WwIJkijUqiGcJz1qqnZgP6XIK+QyIWU5lT7imeNxUll48bziG+TSYcA==
+
+es-define-property@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/es-define-property/-/es-define-property-1.0.0.tgz#c7faefbdff8b2696cf5f46921edfb77cc4ba3845"
+ integrity sha512-jxayLKShrEqqzJ0eumQbVhTYQM27CfT1T35+gCgDFoL82JLsXqTJ76zv6A0YLOgEnLUMvLzsDsGIrl8NFpT2gQ==
+ dependencies:
+ get-intrinsic "^1.2.4"
+
+es-errors@^1.0.0, es-errors@^1.1.0, es-errors@^1.2.1, es-errors@^1.3.0:
+ version "1.3.0"
+ resolved "https://registry.yarnpkg.com/es-errors/-/es-errors-1.3.0.tgz#05f75a25dab98e4fb1dcd5e1472c0546d5057c8f"
+ integrity sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw==
+
+es-iterator-helpers@^1.0.15, es-iterator-helpers@^1.0.17:
+ version "1.0.17"
+ resolved "https://registry.yarnpkg.com/es-iterator-helpers/-/es-iterator-helpers-1.0.17.tgz#123d1315780df15b34eb181022da43e734388bb8"
+ integrity sha512-lh7BsUqelv4KUbR5a/ZTaGGIMLCjPGPqJ6q+Oq24YP0RdyptX1uzm4vvaqzk7Zx3bpl/76YLTTDj9L7uYQ92oQ==
dependencies:
asynciterator.prototype "^1.0.0"
- call-bind "^1.0.2"
+ call-bind "^1.0.7"
define-properties "^1.2.1"
- es-abstract "^1.22.1"
- es-set-tostringtag "^2.0.1"
- function-bind "^1.1.1"
- get-intrinsic "^1.2.1"
+ es-abstract "^1.22.4"
+ es-errors "^1.3.0"
+ es-set-tostringtag "^2.0.2"
+ function-bind "^1.1.2"
+ get-intrinsic "^1.2.4"
globalthis "^1.0.3"
- has-property-descriptors "^1.0.0"
+ has-property-descriptors "^1.0.2"
has-proto "^1.0.1"
has-symbols "^1.0.3"
- internal-slot "^1.0.5"
+ internal-slot "^1.0.7"
iterator.prototype "^1.1.2"
- safe-array-concat "^1.0.1"
+ safe-array-concat "^1.1.0"
es-module-lexer@^1.0.5:
version "1.3.1"
resolved "https://registry.yarnpkg.com/es-module-lexer/-/es-module-lexer-1.3.1.tgz#c1b0dd5ada807a3b3155315911f364dc4e909db1"
integrity sha512-JUFAyicQV9mXc3YRxPnDlrfBKpqt6hUYzz9/boprUJHs4e4KVr3XwOF70doO6gwXUor6EWZJAyWAfKki84t20Q==
-es-set-tostringtag@^2.0.1:
- version "2.0.2"
- resolved "https://registry.yarnpkg.com/es-set-tostringtag/-/es-set-tostringtag-2.0.2.tgz#11f7cc9f63376930a5f20be4915834f4bc74f9c9"
- integrity sha512-BuDyupZt65P9D2D2vA/zqcI3G5xRsklm5N3xCwuiy+/vKy8i0ifdsQP1sLgO4tZDSCaQUSnmC48khknGMV3D2Q==
+es-set-tostringtag@^2.0.2, es-set-tostringtag@^2.0.3:
+ version "2.0.3"
+ resolved "https://registry.yarnpkg.com/es-set-tostringtag/-/es-set-tostringtag-2.0.3.tgz#8bb60f0a440c2e4281962428438d58545af39777"
+ integrity sha512-3T8uNMC3OQTHkFUsFq8r/BwAXLHvU/9O9mE0fBc/MY5iq/8H7ncvO947LmYA6ldWw9Uh8Yhf25zu6n7nML5QWQ==
dependencies:
- get-intrinsic "^1.2.2"
- has-tostringtag "^1.0.0"
- hasown "^2.0.0"
+ get-intrinsic "^1.2.4"
+ has-tostringtag "^1.0.2"
+ hasown "^2.0.1"
-es-shim-unscopables@^1.0.0:
+es-shim-unscopables@^1.0.0, es-shim-unscopables@^1.0.2:
version "1.0.2"
resolved "https://registry.yarnpkg.com/es-shim-unscopables/-/es-shim-unscopables-1.0.2.tgz#1f6942e71ecc7835ed1c8a83006d8771a63a3763"
integrity sha512-J3yBRXCzDu4ULnQwxyToo/OjdMx6akgVC7K6few0a7F/0wLtmKKN7I73AH5T2836UuXRqN7Qg+IIUw/+YJksRw==
@@ -5180,11 +5260,11 @@ escape-string-regexp@^4.0.0:
integrity sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==
eslint-config-next@^14.0.4:
- version "14.0.4"
- resolved "https://registry.yarnpkg.com/eslint-config-next/-/eslint-config-next-14.0.4.tgz#7cd2c0a3b310203d41cf0dbf9d31f9b0a6235b4a"
- integrity sha512-9/xbOHEQOmQtqvQ1UsTQZpnA7SlDMBtuKJ//S4JnoyK3oGLhILKXdBgu/UO7lQo/2xOykQULS1qQ6p2+EpHgAQ==
+ version "14.1.3"
+ resolved "https://registry.yarnpkg.com/eslint-config-next/-/eslint-config-next-14.1.3.tgz#f5c75c088c5df35da2a02129cbf5dec9defb3f13"
+ integrity sha512-sUCpWlGuHpEhI0pIT0UtdSLJk5Z8E2DYinPTwsBiWaSYQomchdl0i60pjynY48+oXvtyWMQ7oE+G3m49yrfacg==
dependencies:
- "@next/eslint-plugin-next" "14.0.4"
+ "@next/eslint-plugin-next" "14.1.3"
"@rushstack/eslint-patch" "^1.3.3"
"@typescript-eslint/parser" "^5.4.2 || ^6.0.0"
eslint-import-resolver-node "^0.3.6"
@@ -5227,9 +5307,9 @@ eslint-import-resolver-typescript@^3.5.2:
is-glob "^4.0.3"
eslint-module-utils@^2.7.4, eslint-module-utils@^2.8.0:
- version "2.8.0"
- resolved "https://registry.yarnpkg.com/eslint-module-utils/-/eslint-module-utils-2.8.0.tgz#e439fee65fc33f6bba630ff621efc38ec0375c49"
- integrity sha512-aWajIYfsqCKRDgUfjEXNN/JlrzauMuSEy5sbd7WXbtW3EH6A6MpwEh42c7qD+MqQo9QMJ6fWLAeIJynx0g6OAw==
+ version "2.8.1"
+ resolved "https://registry.yarnpkg.com/eslint-module-utils/-/eslint-module-utils-2.8.1.tgz#52f2404300c3bd33deece9d7372fb337cc1d7c34"
+ integrity sha512-rXDXR3h7cs7dy9RNpUlQf80nX31XWJEyGq1tRMo+6GsO5VmTe4UTwtmonAD4ZkAsrfMVDA2wlGJ3790Ys+D49Q==
dependencies:
debug "^3.2.7"
@@ -5318,26 +5398,28 @@ eslint-plugin-promise@^6.1.1:
integrity sha512-oFc7Itz9Qxh2x4gNHStv3BqJq54ExXmfC+a1NjAta66IAN87Wu0R/QArgIS9qKzX3dXKPI9H5crl9QchNMY9+g==
eslint-plugin-react@^7.33.2:
- version "7.33.2"
- resolved "https://registry.yarnpkg.com/eslint-plugin-react/-/eslint-plugin-react-7.33.2.tgz#69ee09443ffc583927eafe86ffebb470ee737608"
- integrity sha512-73QQMKALArI8/7xGLNI/3LylrEYrlKZSb5C9+q3OtOewTnMQi5cT+aE9E41sLCmli3I9PGGmD1yiZydyo4FEPw==
+ version "7.34.0"
+ resolved "https://registry.yarnpkg.com/eslint-plugin-react/-/eslint-plugin-react-7.34.0.tgz#ab71484d54fc409c37025c5eca00eb4177a5e88c"
+ integrity sha512-MeVXdReleBTdkz/bvcQMSnCXGi+c9kvy51IpinjnJgutl3YTHWsDdke7Z1ufZpGfDG8xduBDKyjtB9JH1eBKIQ==
dependencies:
- array-includes "^3.1.6"
- array.prototype.flatmap "^1.3.1"
- array.prototype.tosorted "^1.1.1"
+ array-includes "^3.1.7"
+ array.prototype.findlast "^1.2.4"
+ array.prototype.flatmap "^1.3.2"
+ array.prototype.toreversed "^1.1.2"
+ array.prototype.tosorted "^1.1.3"
doctrine "^2.1.0"
- es-iterator-helpers "^1.0.12"
+ es-iterator-helpers "^1.0.17"
estraverse "^5.3.0"
jsx-ast-utils "^2.4.1 || ^3.0.0"
minimatch "^3.1.2"
- object.entries "^1.1.6"
- object.fromentries "^2.0.6"
- object.hasown "^1.1.2"
- object.values "^1.1.6"
+ object.entries "^1.1.7"
+ object.fromentries "^2.0.7"
+ object.hasown "^1.1.3"
+ object.values "^1.1.7"
prop-types "^15.8.1"
- resolve "^2.0.0-next.4"
+ resolve "^2.0.0-next.5"
semver "^6.3.1"
- string.prototype.matchall "^4.0.8"
+ string.prototype.matchall "^4.0.10"
eslint-scope@^5.1.1:
version "5.1.1"
@@ -5361,15 +5443,15 @@ eslint-visitor-keys@^3.3.0, eslint-visitor-keys@^3.4.1, eslint-visitor-keys@^3.4
integrity sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag==
eslint@^8.33.0:
- version "8.56.0"
- resolved "https://registry.yarnpkg.com/eslint/-/eslint-8.56.0.tgz#4957ce8da409dc0809f99ab07a1b94832ab74b15"
- integrity sha512-Go19xM6T9puCOWntie1/P997aXxFsOi37JIHRWI514Hc6ZnaHGKY9xFhrU65RT6CcBEzZoGG1e6Nq+DT04ZtZQ==
+ version "8.57.0"
+ resolved "https://registry.yarnpkg.com/eslint/-/eslint-8.57.0.tgz#c786a6fd0e0b68941aaf624596fb987089195668"
+ integrity sha512-dZ6+mexnaTIbSBZWgou51U6OmzIhYM2VcNdtiTtI7qPNZm35Akpr0f6vtw3w1Kmn5PYo+tZVfh13WrhpS6oLqQ==
dependencies:
"@eslint-community/eslint-utils" "^4.2.0"
"@eslint-community/regexpp" "^4.6.1"
"@eslint/eslintrc" "^2.1.4"
- "@eslint/js" "8.56.0"
- "@humanwhocodes/config-array" "^0.11.13"
+ "@eslint/js" "8.57.0"
+ "@humanwhocodes/config-array" "^0.11.14"
"@humanwhocodes/module-importer" "^1.0.1"
"@nodelib/fs.walk" "^1.2.8"
"@ungap/structured-clone" "^1.2.0"
@@ -5617,7 +5699,7 @@ fast-fifo@^1.1.0, fast-fifo@^1.2.0:
resolved "https://registry.yarnpkg.com/fast-fifo/-/fast-fifo-1.3.2.tgz#286e31de96eb96d38a97899815740ba2a4f3640c"
integrity sha512-/d9sfos4yxzpwkDkuN7k2SqFKtYNmCTzgfEpz82x34IM9/zc8KGxQoXg1liNC/izpRM/MBdt44Nmx41ZWqk+FQ==
-fast-glob@^3.0.3, fast-glob@^3.2.7, fast-glob@^3.3.1:
+fast-glob@^3.0.3, fast-glob@^3.2.7:
version "3.3.1"
resolved "https://registry.yarnpkg.com/fast-glob/-/fast-glob-3.3.1.tgz#784b4e897340f3dbbef17413b3f11acf03c874c4"
integrity sha512-kNFPyjhh5cKjrUltxs+wFx+ZkbRaxxmZ+X0ZU31SOsxCEtP9VPgtq2teZw1DebupL5GmDaNQ6yKMMVcM41iqDg==
@@ -5628,7 +5710,7 @@ fast-glob@^3.0.3, fast-glob@^3.2.7, fast-glob@^3.3.1:
merge2 "^1.3.0"
micromatch "^4.0.4"
-fast-glob@^3.2.9:
+fast-glob@^3.2.9, fast-glob@^3.3.1:
version "3.3.2"
resolved "https://registry.yarnpkg.com/fast-glob/-/fast-glob-3.3.2.tgz#a904501e57cfdd2ffcded45e99a54fef55e46129"
integrity sha512-oX2ruAFQwf/Orj8m737Y5adxDQO0LAB7/S5MnxCdTNDd4p6BsyIVsv9JQsATbTSq8KHRpLwIHbVlUNatxd+1Ow==
@@ -5655,9 +5737,9 @@ fastest-levenshtein@^1.0.16:
integrity sha512-eRnCtTTtGZFpQCwhJiUOuxPQWRXVKYDn0b2PeHfXL6/Zi53SLAzAHfVhVWK2AryC/WH05kGfxhFIPvTF0SXQzg==
fastq@^1.6.0:
- version "1.15.0"
- resolved "https://registry.yarnpkg.com/fastq/-/fastq-1.15.0.tgz#d04d07c6a2a68fe4599fea8d2e103a937fae6b3a"
- integrity sha512-wBrocU2LCXXa+lWBt8RoIRD89Fi8OdABODa/kEnyeyjS5aZO5/GNvI5sEINADqP/h8M29UHTHUb53sUu5Ihqdw==
+ version "1.17.1"
+ resolved "https://registry.yarnpkg.com/fastq/-/fastq-1.17.1.tgz#2a523f07a4e7b1e81a42b91b8bf2254107753b47"
+ integrity sha512-sRVD3lWVIXWg6By68ZN7vho9a1pQcN/WBFaAAsDDFzlJjvoGx0P8z7V1t72grFJfJhu3YPZBuu25f7Kaw2jN1w==
dependencies:
reusify "^1.0.4"
@@ -5742,9 +5824,9 @@ flat@^5.0.0:
integrity sha512-b6suED+5/3rTpUBdG1gupIl8MPFCAMA0QXwmljLhvCUKcUvdE4gWky9zpuGCcXHOsz4J9wPGNWq6OKpmIzz3hQ==
flatted@^3.2.9:
- version "3.2.9"
- resolved "https://registry.yarnpkg.com/flatted/-/flatted-3.2.9.tgz#7eb4c67ca1ba34232ca9d2d93e9886e611ad7daf"
- integrity sha512-36yxDn5H7OFZQla0/jFJmbIKTdZAQHngCedGxiMmpNfEZM0sdEeT+WczLQrjK6D7o2aiyLYDnkw0R3JK0Qv1RQ==
+ version "3.3.1"
+ resolved "https://registry.yarnpkg.com/flatted/-/flatted-3.3.1.tgz#21db470729a6734d4997002f439cb308987f567a"
+ integrity sha512-X8cqMLLie7KsNUDSdzeN8FYK9rEt4Dt67OsG/DNGnYTSDBG4uFAJFBnUeiV+zCVAvwFy56IjM9sH51jVaEhNxw==
follow-redirects@^1.15.2:
version "1.15.4"
@@ -5758,6 +5840,14 @@ for-each@^0.3.3:
dependencies:
is-callable "^1.1.3"
+foreground-child@^3.1.0:
+ version "3.1.1"
+ resolved "https://registry.yarnpkg.com/foreground-child/-/foreground-child-3.1.1.tgz#1d173e776d75d2772fed08efe4a0de1ea1b12d0d"
+ integrity sha512-TMKDUnIte6bfb5nWv7V/caI169OHgvwjb7V4WkeUvbQQdjr5rWKqHFiKWb/fcOwB+CzBT+qbWjvj+DVwRskpIg==
+ dependencies:
+ cross-spawn "^7.0.0"
+ signal-exit "^4.0.1"
+
forever-agent@~0.6.1:
version "0.6.1"
resolved "https://registry.yarnpkg.com/forever-agent/-/forever-agent-0.6.1.tgz#fbc71f0c41adeb37f96c577ad1ed42d8fdacca91"
@@ -5843,7 +5933,7 @@ fsevents@^2.3.2, fsevents@~2.3.2:
resolved "https://registry.yarnpkg.com/fsevents/-/fsevents-2.3.3.tgz#cac6407785d03675a2a5e1a5305c697b347d90d6"
integrity sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==
-function-bind@^1.1.1, function-bind@^1.1.2:
+function-bind@^1.1.2:
version "1.1.2"
resolved "https://registry.yarnpkg.com/function-bind/-/function-bind-1.1.2.tgz#2c02d864d97f3ea6c8830c464cbd11ab6eab7a1c"
integrity sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==
@@ -5885,11 +5975,12 @@ get-caller-file@^2.0.5:
resolved "https://registry.yarnpkg.com/get-caller-file/-/get-caller-file-2.0.5.tgz#4f94412a82db32f36e3b0b9741f8a97feb031f7e"
integrity sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==
-get-intrinsic@^1.0.2, get-intrinsic@^1.1.1, get-intrinsic@^1.1.3, get-intrinsic@^1.2.0, get-intrinsic@^1.2.1, get-intrinsic@^1.2.2:
- version "1.2.2"
- resolved "https://registry.yarnpkg.com/get-intrinsic/-/get-intrinsic-1.2.2.tgz#281b7622971123e1ef4b3c90fd7539306da93f3b"
- integrity sha512-0gSo4ml/0j98Y3lngkFEot/zhiCeWsbYIlZ+uZOVgzLyLaUw7wxUL+nCTP0XJvJg1AXulJRI3UJi8GsbDuxdGA==
+get-intrinsic@^1.1.3, get-intrinsic@^1.2.1, get-intrinsic@^1.2.3, get-intrinsic@^1.2.4:
+ version "1.2.4"
+ resolved "https://registry.yarnpkg.com/get-intrinsic/-/get-intrinsic-1.2.4.tgz#e385f5a4b5227d449c3eabbad05494ef0abbeadd"
+ integrity sha512-5uYhsJH8VJBTv7oslg4BznJYhDoRI6waYCxMmCdnTrcCrHA/fCFKoTFz2JKKE0HdDFUF7/oQuhzumXJK7paBRQ==
dependencies:
+ es-errors "^1.3.0"
function-bind "^1.1.2"
has-proto "^1.0.1"
has-symbols "^1.0.3"
@@ -5917,18 +6008,19 @@ get-stream@^6.0.0, get-stream@^6.0.1:
resolved "https://registry.yarnpkg.com/get-stream/-/get-stream-6.0.1.tgz#a262d8eef67aced57c2852ad6167526a43cbf7b7"
integrity sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg==
-get-symbol-description@^1.0.0:
- version "1.0.0"
- resolved "https://registry.yarnpkg.com/get-symbol-description/-/get-symbol-description-1.0.0.tgz#7fdb81c900101fbd564dd5f1a30af5aadc1e58d6"
- integrity sha512-2EmdH1YvIQiZpltCNgkuiUnyukzxM/R6NDJX31Ke3BG1Nq5b0S2PhX59UKi9vZpPDQVdqn+1IcaAwnzTT5vCjw==
+get-symbol-description@^1.0.2:
+ version "1.0.2"
+ resolved "https://registry.yarnpkg.com/get-symbol-description/-/get-symbol-description-1.0.2.tgz#533744d5aa20aca4e079c8e5daf7fd44202821f5"
+ integrity sha512-g0QYk1dZBxGwk+Ngc+ltRH2IBp2f7zBkBMBJZCDerh6EhlhSR6+9irMCuT/09zD6qkarHUSn529sK/yL4S27mg==
dependencies:
- call-bind "^1.0.2"
- get-intrinsic "^1.1.1"
+ call-bind "^1.0.5"
+ es-errors "^1.3.0"
+ get-intrinsic "^1.2.4"
get-tsconfig@^4.5.0:
- version "4.7.2"
- resolved "https://registry.yarnpkg.com/get-tsconfig/-/get-tsconfig-4.7.2.tgz#0dcd6fb330391d46332f4c6c1bf89a6514c2ddce"
- integrity sha512-wuMsz4leaj5hbGgg4IvDU0bqJagpftG5l5cXIAvo8uZrqn0NJqwtfupTN00VnkQJPcIRrxYrm1Ue24btpCha2A==
+ version "4.7.3"
+ resolved "https://registry.yarnpkg.com/get-tsconfig/-/get-tsconfig-4.7.3.tgz#0498163d98f7b58484dd4906999c0c9d5f103f83"
+ integrity sha512-ZvkrzoUA0PQZM6fy6+/Hce561s+faD1rsNwhnO5FelNjyy7EMGJ3Rz1AQ8GYDWjhRs/7dBLOEJvhK8MiEJOAFg==
dependencies:
resolve-pkg-maps "^1.0.0"
@@ -5965,17 +6057,16 @@ glob-parent@^6.0.2:
dependencies:
is-glob "^4.0.3"
-glob@7.1.7:
- version "7.1.7"
- resolved "https://registry.yarnpkg.com/glob/-/glob-7.1.7.tgz#3b193e9233f01d42d0b3f78294bbeeb418f94a90"
- integrity sha512-OvD9ENzPLbegENnYP5UUfJIirTg4+XwMWGaQfQTY0JenxNvvIKP3U3/tAQSPIu/lHxXYSZmpXlUHeqAIdKzBLQ==
+glob@10.3.10:
+ version "10.3.10"
+ resolved "https://registry.yarnpkg.com/glob/-/glob-10.3.10.tgz#0351ebb809fd187fe421ab96af83d3a70715df4b"
+ integrity sha512-fa46+tv1Ak0UPK1TOy/pZrIybNNt4HCv7SDzwyfiOZkvZLEbjsZkJBPtDHVshZjbecAoAGSC20MjLDG/qr679g==
dependencies:
- fs.realpath "^1.0.0"
- inflight "^1.0.4"
- inherits "2"
- minimatch "^3.0.4"
- once "^1.3.0"
- path-is-absolute "^1.0.0"
+ foreground-child "^3.1.0"
+ jackspeak "^2.3.5"
+ minimatch "^9.0.1"
+ minipass "^5.0.0 || ^6.0.2 || ^7.0.0"
+ path-scurry "^1.10.1"
glob@^7.1.3, glob@^7.1.4, glob@^7.1.6:
version "7.2.3"
@@ -6155,34 +6246,34 @@ has-flag@^4.0.0:
resolved "https://registry.yarnpkg.com/has-flag/-/has-flag-4.0.0.tgz#944771fd9c81c81265c4d6941860da06bb59479b"
integrity sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==
-has-property-descriptors@^1.0.0:
- version "1.0.1"
- resolved "https://registry.yarnpkg.com/has-property-descriptors/-/has-property-descriptors-1.0.1.tgz#52ba30b6c5ec87fd89fa574bc1c39125c6f65340"
- integrity sha512-VsX8eaIewvas0xnvinAe9bw4WfIeODpGYikiWYLH+dma0Jw6KHYqWiWfhQlgOVK8D6PvjubK5Uc4P0iIhIcNVg==
+has-property-descriptors@^1.0.0, has-property-descriptors@^1.0.2:
+ version "1.0.2"
+ resolved "https://registry.yarnpkg.com/has-property-descriptors/-/has-property-descriptors-1.0.2.tgz#963ed7d071dc7bf5f084c5bfbe0d1b6222586854"
+ integrity sha512-55JNKuIW+vq4Ke1BjOTjM2YctQIvCT7GFzHwmfZPGo5wnrgkid0YQtnAleFSqumZm4az3n2BS+erby5ipJdgrg==
dependencies:
- get-intrinsic "^1.2.2"
+ es-define-property "^1.0.0"
-has-proto@^1.0.1:
- version "1.0.1"
- resolved "https://registry.yarnpkg.com/has-proto/-/has-proto-1.0.1.tgz#1885c1305538958aff469fef37937c22795408e0"
- integrity sha512-7qE+iP+O+bgF9clE5+UoBFzE65mlBiVj3tKCrlNQ0Ogwm0BjpT/gK4SlLYDMybDh5I3TCTKnPPa0oMG7JDYrhg==
+has-proto@^1.0.1, has-proto@^1.0.3:
+ version "1.0.3"
+ resolved "https://registry.yarnpkg.com/has-proto/-/has-proto-1.0.3.tgz#b31ddfe9b0e6e9914536a6ab286426d0214f77fd"
+ integrity sha512-SJ1amZAJUiZS+PhsVLf5tGydlaVB8EdFpaSO4gmiUKUOxk8qzn5AIy4ZeJUmh22znIdk/uMAUT2pl3FxzVUH+Q==
has-symbols@^1.0.2, has-symbols@^1.0.3:
version "1.0.3"
resolved "https://registry.yarnpkg.com/has-symbols/-/has-symbols-1.0.3.tgz#bb7b2c4349251dce87b125f7bdf874aa7c8b39f8"
integrity sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A==
-has-tostringtag@^1.0.0:
- version "1.0.0"
- resolved "https://registry.yarnpkg.com/has-tostringtag/-/has-tostringtag-1.0.0.tgz#7e133818a7d394734f941e73c3d3f9291e658b25"
- integrity sha512-kFjcSNhnlGV1kyoGk7OXKSawH5JOb/LzUc5w9B02hOTO0dfFRjbHQKvg1d6cf3HbeUmtU9VbbV3qzZ2Teh97WQ==
+has-tostringtag@^1.0.0, has-tostringtag@^1.0.1, has-tostringtag@^1.0.2:
+ version "1.0.2"
+ resolved "https://registry.yarnpkg.com/has-tostringtag/-/has-tostringtag-1.0.2.tgz#2cdc42d40bef2e5b4eeab7c01a73c54ce7ab5abc"
+ integrity sha512-NqADB8VjPFLM2V0VvHUewwwsw0ZWBaIdgo+ieHtK3hasLz4qeCRjYcqfB6AQrBggRKppKF8L52/VqdVsO47Dlw==
dependencies:
- has-symbols "^1.0.2"
+ has-symbols "^1.0.3"
-hasown@^2.0.0:
- version "2.0.0"
- resolved "https://registry.yarnpkg.com/hasown/-/hasown-2.0.0.tgz#f4c513d454a57b7c7e1650778de226b11700546c"
- integrity sha512-vUptKVTpIJhcczKBbgnS+RtcuYMB8+oNzPK2/Hp3hanz8JmpATdmmgLgSaadVREkDm+e2giHwY3ZRkyjSIDDFA==
+hasown@^2.0.0, hasown@^2.0.1:
+ version "2.0.1"
+ resolved "https://registry.yarnpkg.com/hasown/-/hasown-2.0.1.tgz#26f48f039de2c0f8d3356c223fb8d50253519faa"
+ integrity sha512-1/th4MHjnwncwXsIW6QMzlvYL9kG5e/CpVvLRZe4XPa8TOUNbCELqmvhDmnkNsAjwaG4+I8gJJL0JBvTTLO9qA==
dependencies:
function-bind "^1.1.2"
@@ -6270,9 +6361,9 @@ ignore@^5.1.1:
integrity sha512-MAb38BcSbH0eHNBxn7ql2NH/kX33OkB3lZ1BNdh7ENeRChHTYsTvWrMubiIAMNS2llXEEgZ1MUOBtXChP3kaFQ==
ignore@^5.2.0, ignore@^5.2.4:
- version "5.3.0"
- resolved "https://registry.yarnpkg.com/ignore/-/ignore-5.3.0.tgz#67418ae40d34d6999c95ff56016759c718c82f78"
- integrity sha512-g7dmpshy+gD7mh88OC9NwSGTKoc3kyLAZQRU1mt53Aw/vnvfXnbC+F/7F7QoYVKbV+KNvJx8wArewKy1vXMtlg==
+ version "5.3.1"
+ resolved "https://registry.yarnpkg.com/ignore/-/ignore-5.3.1.tgz#5073e554cd42c5b33b394375f538b8593e34d4ef"
+ integrity sha512-5Fytz/IraMjqpwfd34ke28PTVMjZjJG2MPn5t7OE4eUCUNf8BAa7b5WUS9/Qvr6mwOQS7Mk6vdsMno5he+T8Xw==
image-meta@^0.1.1:
version "0.1.1"
@@ -6357,12 +6448,12 @@ ini@^1.3.5, ini@~1.3.0:
resolved "https://registry.yarnpkg.com/ini/-/ini-1.3.8.tgz#a29da425b48806f34767a4efce397269af28432c"
integrity sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew==
-internal-slot@^1.0.5:
- version "1.0.6"
- resolved "https://registry.yarnpkg.com/internal-slot/-/internal-slot-1.0.6.tgz#37e756098c4911c5e912b8edbf71ed3aa116f930"
- integrity sha512-Xj6dv+PsbtwyPpEflsejS+oIZxmMlV44zAhG479uYu89MsjcYOhCFnNyKrkJrihbsiasQyY0afoCl/9BLR65bg==
+internal-slot@^1.0.5, internal-slot@^1.0.7:
+ version "1.0.7"
+ resolved "https://registry.yarnpkg.com/internal-slot/-/internal-slot-1.0.7.tgz#c06dcca3ed874249881007b0a5523b172a190802"
+ integrity sha512-NGnrKwXzSms2qUUih/ILZ5JBqNTSa1+ZmP6flaIp6KmSElgE9qdndzS3cqjrDovwFdmwsGsLdeFgB6suw+1e9g==
dependencies:
- get-intrinsic "^1.2.2"
+ es-errors "^1.3.0"
hasown "^2.0.0"
side-channel "^1.0.4"
@@ -6386,14 +6477,14 @@ intl-messageformat-parser@^5.3.7:
dependencies:
"@formatjs/intl-numberformat" "^5.5.2"
-intl-messageformat@10.5.8:
- version "10.5.8"
- resolved "https://registry.yarnpkg.com/intl-messageformat/-/intl-messageformat-10.5.8.tgz#7184da425f360a53a5483a6194e16d666b011fc0"
- integrity sha512-NRf0jpBWV0vd671G5b06wNofAN8tp7WWDogMZyaU8GUAsmbouyvgwmFJI7zLjfAMpm3zK+vSwRP3jzaoIcMbaA==
+intl-messageformat@10.5.11:
+ version "10.5.11"
+ resolved "https://registry.yarnpkg.com/intl-messageformat/-/intl-messageformat-10.5.11.tgz#95d6a3b0b303f924d5d8c3f8d3ad057d1dc73c64"
+ integrity sha512-eYq5fkFBVxc7GIFDzpFQkDOZgNayNTQn4Oufe8jw6YY6OHVw70/4pA3FyCsQ0Gb2DnvEJEMmN2tOaXUGByM+kg==
dependencies:
- "@formatjs/ecma402-abstract" "1.18.0"
+ "@formatjs/ecma402-abstract" "1.18.2"
"@formatjs/fast-memoize" "2.2.0"
- "@formatjs/icu-messageformat-parser" "2.7.3"
+ "@formatjs/icu-messageformat-parser" "2.7.6"
tslib "^2.4.0"
ioredis@^5.3.2:
@@ -6439,14 +6530,13 @@ iron-webcrypto@^1.0.0:
resolved "https://registry.yarnpkg.com/iron-webcrypto/-/iron-webcrypto-1.0.0.tgz#e3b689c0c61b434a0a4cb82d0aeabbc8b672a867"
integrity sha512-anOK1Mktt8U1Xi7fCM3RELTuYbnFikQY5VtrDj7kPgpejV7d43tWKhzgioO0zpkazLEL/j/iayRqnJhrGfqUsg==
-is-array-buffer@^3.0.1, is-array-buffer@^3.0.2:
- version "3.0.2"
- resolved "https://registry.yarnpkg.com/is-array-buffer/-/is-array-buffer-3.0.2.tgz#f2653ced8412081638ecb0ebbd0c41c6e0aecbbe"
- integrity sha512-y+FyyR/w8vfIRq4eQcM1EYgSTnmHXPqaF+IgzgraytCFq5Xh8lllDVmAZolPJiZttZLeFSINPYMaEJ7/vWUa1w==
+is-array-buffer@^3.0.4:
+ version "3.0.4"
+ resolved "https://registry.yarnpkg.com/is-array-buffer/-/is-array-buffer-3.0.4.tgz#7a1f92b3d61edd2bc65d24f130530ea93d7fae98"
+ integrity sha512-wcjaerHw0ydZwfhiKbXJWLDY8A7yV7KhjQOpb83hGgGfId/aQa4TOvwyzn2PuswW2gPCYEL/nEAiSVpdOj1lXw==
dependencies:
call-bind "^1.0.2"
- get-intrinsic "^1.2.0"
- is-typed-array "^1.1.10"
+ get-intrinsic "^1.2.1"
is-arrayish@^0.2.1:
version "0.2.1"
@@ -6589,20 +6679,20 @@ is-localhost-ip@^1.4.0:
resolved "https://registry.yarnpkg.com/is-localhost-ip/-/is-localhost-ip-1.4.0.tgz#dd66aaabcbb5dbbc943e00adad5f715d2c3b3a1d"
integrity sha512-cN7SzlY7BVxSeoJu5equjsZaKSgD4HCfXrTwu0Jgbq5BbT1BU+D7Lyi/l1KO8H0un0JTlxcQaT/GWVapu+DIDg==
-is-map@^2.0.1:
- version "2.0.2"
- resolved "https://registry.yarnpkg.com/is-map/-/is-map-2.0.2.tgz#00922db8c9bf73e81b7a335827bc2a43f2b91127"
- integrity sha512-cOZFQQozTha1f4MxLFzlgKYPTyj26picdZTx82hbc/Xf4K/tZOOXSCkMvU4pKioRXGDLJRn0GM7Upe7kR721yg==
+is-map@^2.0.3:
+ version "2.0.3"
+ resolved "https://registry.yarnpkg.com/is-map/-/is-map-2.0.3.tgz#ede96b7fe1e270b3c4465e3a465658764926d62e"
+ integrity sha512-1Qed0/Hr2m+YqxnM09CjA2d/i6YZNfF6R2oRAOj36eUdS6qIV/huPJNSEpKbupewFs+ZsJlxsjjPbc0/afW6Lw==
is-module@^1.0.0:
version "1.0.0"
resolved "https://registry.yarnpkg.com/is-module/-/is-module-1.0.0.tgz#3258fb69f78c14d5b815d664336b4cffb6441591"
integrity sha512-51ypPSPCoTEIN9dy5Oy+h4pShgJmPCygKfyRCISBI+JoWT/2oJvK8QPxmwv7b/p239jXrm9M1mlQbyKJ5A152g==
-is-negative-zero@^2.0.2:
- version "2.0.2"
- resolved "https://registry.yarnpkg.com/is-negative-zero/-/is-negative-zero-2.0.2.tgz#7bf6f03a28003b8b3965de3ac26f664d765f3150"
- integrity sha512-dqJvarLawXsFbNDeJW7zAz8ItJ9cd28YufuuFzh0G8pNHjJMnY08Dv7sYX2uF5UpQOwieAeOExEYAWWfu7ZZUA==
+is-negative-zero@^2.0.3:
+ version "2.0.3"
+ resolved "https://registry.yarnpkg.com/is-negative-zero/-/is-negative-zero-2.0.3.tgz#ced903a027aca6381b777a5743069d7376a49747"
+ integrity sha512-5KoIu2Ngpyek75jXodFvnafB6DJgr3u8uuK0LEZJjrU19DrMD3EVERaR8sjz8CCGgpZvxPl9SuE1GMVPFHx1mw==
is-number-object@^1.0.4:
version "1.0.7"
@@ -6666,17 +6756,17 @@ is-regex@^1.1.4:
call-bind "^1.0.2"
has-tostringtag "^1.0.0"
-is-set@^2.0.1:
- version "2.0.2"
- resolved "https://registry.yarnpkg.com/is-set/-/is-set-2.0.2.tgz#90755fa4c2562dc1c5d4024760d6119b94ca18ec"
- integrity sha512-+2cnTEZeY5z/iXGbLhPrOAaK/Mau5k5eXq9j14CpRTftq0pAJu2MwVRSZhyZWBzx3o6X795Lz6Bpb6R0GKf37g==
+is-set@^2.0.3:
+ version "2.0.3"
+ resolved "https://registry.yarnpkg.com/is-set/-/is-set-2.0.3.tgz#8ab209ea424608141372ded6e0cb200ef1d9d01d"
+ integrity sha512-iPAjerrse27/ygGLxw+EBR9agv9Y6uLeYVJMu+QNCoouJ1/1ri0mGrcWpfCqFZuzzx3WjtwxG098X+n4OuRkPg==
-is-shared-array-buffer@^1.0.2:
- version "1.0.2"
- resolved "https://registry.yarnpkg.com/is-shared-array-buffer/-/is-shared-array-buffer-1.0.2.tgz#8f259c573b60b6a32d4058a1a07430c0a7344c79"
- integrity sha512-sqN2UDu1/0y6uvXyStCOzyhAjCSlHceFoMKJW8W9EU9cvic/QdsZ0kEU93HEy3IUEFZIiH/3w+AH/UQbPHNdhA==
+is-shared-array-buffer@^1.0.2, is-shared-array-buffer@^1.0.3:
+ version "1.0.3"
+ resolved "https://registry.yarnpkg.com/is-shared-array-buffer/-/is-shared-array-buffer-1.0.3.tgz#1237f1cba059cdb62431d378dcc37d9680181688"
+ integrity sha512-nA2hv5XIhLR3uVzDDfCIknerhx8XUKnstuOERPNNIinXG7v9u+ohXF67vxm4TPTEPU6lm61ZkwP3c9PCB97rhg==
dependencies:
- call-bind "^1.0.2"
+ call-bind "^1.0.7"
is-stream@^2.0.0:
version "2.0.1"
@@ -6702,12 +6792,12 @@ is-symbol@^1.0.2, is-symbol@^1.0.3:
dependencies:
has-symbols "^1.0.2"
-is-typed-array@^1.1.10, is-typed-array@^1.1.12, is-typed-array@^1.1.9:
- version "1.1.12"
- resolved "https://registry.yarnpkg.com/is-typed-array/-/is-typed-array-1.1.12.tgz#d0bab5686ef4a76f7a73097b95470ab199c57d4a"
- integrity sha512-Z14TF2JNG8Lss5/HMqt0//T9JeHXttXy5pH/DBU4vi98ozO2btxzq9MwYDZYnKwU8nRsz/+GVFVRDq3DkVuSPg==
+is-typed-array@^1.1.13:
+ version "1.1.13"
+ resolved "https://registry.yarnpkg.com/is-typed-array/-/is-typed-array-1.1.13.tgz#d6c5ca56df62334959322d7d7dd1cca50debe229"
+ integrity sha512-uZ25/bUAlUY5fR4OKT4rZQEBrzQWYV9ZJYGGsUmEJ6thodVJ1HX64ePQ6Z0qPWP+m+Uq6e9UugrE38jeYsDSMw==
dependencies:
- which-typed-array "^1.1.11"
+ which-typed-array "^1.1.14"
is-typedarray@^1.0.0, is-typedarray@~1.0.0:
version "1.0.0"
@@ -6719,10 +6809,10 @@ is-unicode-supported@^0.1.0:
resolved "https://registry.yarnpkg.com/is-unicode-supported/-/is-unicode-supported-0.1.0.tgz#3f26c76a809593b52bfa2ecb5710ed2779b522a7"
integrity sha512-knxG2q4UC3u8stRGyAVJCOdxFmv5DZiRcdlIaAQXAbSfJya+OhopNotLQrstBhququ4ZpuKbDc/8S6mgXgPFPw==
-is-weakmap@^2.0.1:
- version "2.0.1"
- resolved "https://registry.yarnpkg.com/is-weakmap/-/is-weakmap-2.0.1.tgz#5008b59bdc43b698201d18f62b37b2ca243e8cf2"
- integrity sha512-NSBR4kH5oVj1Uwvv970ruUkCV7O1mzgVFO4/rev2cLRda9Tm9HrL70ZPut4rOHgY0FNrUu9BCbXA2sdQ+x0chA==
+is-weakmap@^2.0.2:
+ version "2.0.2"
+ resolved "https://registry.yarnpkg.com/is-weakmap/-/is-weakmap-2.0.2.tgz#bf72615d649dfe5f699079c54b83e47d1ae19cfd"
+ integrity sha512-K5pXYOm9wqY1RgjpL3YTkF39tni1XajUIkawTLUo9EZEVUFga5gSQJF8nNS7ZwJQ02y+1YCNYcMh+HIf1ZqE+w==
is-weakref@^1.0.2:
version "1.0.2"
@@ -6731,13 +6821,13 @@ is-weakref@^1.0.2:
dependencies:
call-bind "^1.0.2"
-is-weakset@^2.0.1:
- version "2.0.2"
- resolved "https://registry.yarnpkg.com/is-weakset/-/is-weakset-2.0.2.tgz#4569d67a747a1ce5a994dfd4ef6dcea76e7c0a1d"
- integrity sha512-t2yVvttHkQktwnNNmBQ98AhENLdPUTDTE21uPqAQ0ARwQfGeQKRVS0NNurH7bTf7RrvcVn1OOge45CnBeHCSmg==
+is-weakset@^2.0.3:
+ version "2.0.3"
+ resolved "https://registry.yarnpkg.com/is-weakset/-/is-weakset-2.0.3.tgz#e801519df8c0c43e12ff2834eead84ec9e624007"
+ integrity sha512-LvIm3/KWzS9oRFHugab7d+M/GcBXuXX5xZkzPmN+NxihdQlZUQ4dWuSV1xR/sq6upL1TJEDrfBgRepHFdBtSNQ==
dependencies:
- call-bind "^1.0.2"
- get-intrinsic "^1.1.1"
+ call-bind "^1.0.7"
+ get-intrinsic "^1.2.4"
is-wsl@^2.2.0:
version "2.2.0"
@@ -6830,6 +6920,15 @@ iterator.prototype@^1.1.2:
reflect.getprototypeof "^1.0.4"
set-function-name "^2.0.1"
+jackspeak@^2.3.5:
+ version "2.3.6"
+ resolved "https://registry.yarnpkg.com/jackspeak/-/jackspeak-2.3.6.tgz#647ecc472238aee4b06ac0e461acc21a8c505ca8"
+ integrity sha512-N3yCS/NegsOBokc8GAdM8UcmfsKiSS8cipheD/nivzr700H+nsMOxJjQnvwOcRYVuFkdH0wGUvW2WbXGmrZGbQ==
+ dependencies:
+ "@isaacs/cliui" "^8.0.2"
+ optionalDependencies:
+ "@pkgjs/parseargs" "^0.11.0"
+
jest-changed-files@^29.7.0:
version "29.7.0"
resolved "https://registry.yarnpkg.com/jest-changed-files/-/jest-changed-files-29.7.0.tgz#1c06d07e77c78e1585d020424dedc10d6e17ac3a"
@@ -7716,6 +7815,11 @@ lru-cache@^6.0.0:
dependencies:
yallist "^4.0.0"
+"lru-cache@^9.1.1 || ^10.0.0":
+ version "10.2.0"
+ resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-10.2.0.tgz#0bd445ca57363465900f4d1f9bd8db343a4d95c3"
+ integrity sha512-2bIM8x+VAf6JT4bKAljS1qUWgMsqZRPGJS6FSahIMPVvctcNhyVp7AJu7quxOW9jwkryBReKZY5tY5JYv2n/7Q==
+
magic-string@^0.30.0, magic-string@^0.30.2, magic-string@^0.30.3:
version "0.30.5"
resolved "https://registry.yarnpkg.com/magic-string/-/magic-string-0.30.5.tgz#1994d980bd1c8835dc6e78db7cbd4ae4f24746f9"
@@ -7901,6 +8005,13 @@ min-indent@^1.0.0, min-indent@^1.0.1:
resolved "https://registry.yarnpkg.com/min-indent/-/min-indent-1.0.1.tgz#a63f681673b30571fbe8bc25686ae746eefa9869"
integrity sha512-I9jwMn07Sy/IwOj3zVkVik2JTvgpaykDZEigL6Rx6N9LbMywwUSMtxET+7lVoDLLd3O3IXwJwvuuns8UB/HeAg==
+minimatch@9.0.3, minimatch@^9.0.1:
+ version "9.0.3"
+ resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-9.0.3.tgz#a6e00c3de44c3a542bfaae70abfc22420a6da825"
+ integrity sha512-RHiac9mvaRw0x3AYRgDC1CxAP7HTcNrrECeA8YYJeWnpo+2Q5CegtZjaotWTWxDG3UeGA1coE05iH1mPjT/2mg==
+ dependencies:
+ brace-expansion "^2.0.1"
+
minimatch@^3.0.4, minimatch@^3.0.5, minimatch@^3.1.1, minimatch@^3.1.2:
version "3.1.2"
resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-3.1.2.tgz#19cd194bfd3e428f049a70817c038d89ab4be35b"
@@ -7941,6 +8052,11 @@ minipass@^5.0.0:
resolved "https://registry.yarnpkg.com/minipass/-/minipass-5.0.0.tgz#3e9788ffb90b694a5d0ec94479a45b5d8738133d"
integrity sha512-3FnjYuehv9k6ovOEbyOswadCDPX1piCfhV8ncmYtHOjuPwylVWsghTLo7rabjC3Rx5xD4HDx8Wm1xnMF7S5qFQ==
+"minipass@^5.0.0 || ^6.0.2 || ^7.0.0":
+ version "7.0.4"
+ resolved "https://registry.yarnpkg.com/minipass/-/minipass-7.0.4.tgz#dbce03740f50a4786ba994c1fb908844d27b038c"
+ integrity sha512-jYofLM5Dam9279rdkWzqHozUo4ybjdZmCsDHePy5V/PbBcVMiSZR97gmAy45aqi8CK1lG2ECd356FU86avfwUQ==
+
minizlib@^2.1.1:
version "2.1.2"
resolved "https://registry.yarnpkg.com/minizlib/-/minizlib-2.1.2.tgz#e90d3466ba209b932451508a11ce3d3632145931"
@@ -7995,17 +8111,22 @@ moment-timezone@0.5.26:
moment ">= 2.9.0"
moment-timezone@^0.5.35:
- version "0.5.43"
- resolved "https://registry.yarnpkg.com/moment-timezone/-/moment-timezone-0.5.43.tgz#3dd7f3d0c67f78c23cd1906b9b2137a09b3c4790"
- integrity sha512-72j3aNyuIsDxdF1i7CEgV2FfxM1r6aaqJyLB2vwb33mXYyoyLly+F1zbWqhA3/bVIoJ4szlUoMbUnVdid32NUQ==
+ version "0.5.45"
+ resolved "https://registry.yarnpkg.com/moment-timezone/-/moment-timezone-0.5.45.tgz#cb685acd56bac10e69d93c536366eb65aa6bcf5c"
+ integrity sha512-HIWmqA86KcmCAhnMAN0wuDOARV/525R2+lOLotuGFzn4HO+FH+/645z2wx0Dt3iDv6/p61SIvKnDstISainhLQ==
dependencies:
moment "^2.29.4"
-"moment@>= 2.9.0", moment@^2.29.4:
+"moment@>= 2.9.0":
version "2.29.4"
resolved "https://registry.yarnpkg.com/moment/-/moment-2.29.4.tgz#3dbe052889fe7c1b2ed966fcb3a77328964ef108"
integrity sha512-5LC9SOxjSc2HF6vO2CyuTDNivEdoz2IvyJJGj6X8DJ0eFyfszE0QiEd+iXmBvUP3WHxSjFH/vIsA0EN00cgr8w==
+moment@^2.29.4:
+ version "2.30.1"
+ resolved "https://registry.yarnpkg.com/moment/-/moment-2.30.1.tgz#f8c91c07b7a786e30c59926df530b4eac96974ae"
+ integrity sha512-uEmtNhbDOrWPFS+hdjFCBfy9f2YoyzRpwcl+DqpC6taX21FzsTLQVbMV/W7PzNSX6x/bhC1zA3c2UQ5NzH6how==
+
mri@^1.2.0:
version "1.2.0"
resolved "https://registry.yarnpkg.com/mri/-/mri-1.2.0.tgz#6721480fec2a11a4889861115a48b6cbe7cc8f0b"
@@ -8060,12 +8181,12 @@ next-basics@^0.39.0:
jsonwebtoken "^9.0.0"
pure-rand "^6.0.2"
-next@14.1.0:
- version "14.1.0"
- resolved "https://registry.yarnpkg.com/next/-/next-14.1.0.tgz#b31c0261ff9caa6b4a17c5af019ed77387174b69"
- integrity sha512-wlzrsbfeSU48YQBjZhDzOwhWhGsy+uQycR8bHAOt1LY1bn3zZEcDyHQOEoN3aWzQ8LHCAJ1nqrWCc9XF2+O45Q==
+next@14.1.3:
+ version "14.1.3"
+ resolved "https://registry.yarnpkg.com/next/-/next-14.1.3.tgz#465bb21a1a6e703e776ca53ea71d05642867fdb5"
+ integrity sha512-oexgMV2MapI0UIWiXKkixF8J8ORxpy64OuJ/J9oVUmIthXOUCcuVEZX+dtpgq7wIfIqtBwQsKEDXejcjTsan9g==
dependencies:
- "@next/env" "14.1.0"
+ "@next/env" "14.1.3"
"@swc/helpers" "0.5.2"
busboy "1.6.0"
caniuse-lite "^1.0.30001579"
@@ -8073,15 +8194,15 @@ next@14.1.0:
postcss "8.4.31"
styled-jsx "5.1.1"
optionalDependencies:
- "@next/swc-darwin-arm64" "14.1.0"
- "@next/swc-darwin-x64" "14.1.0"
- "@next/swc-linux-arm64-gnu" "14.1.0"
- "@next/swc-linux-arm64-musl" "14.1.0"
- "@next/swc-linux-x64-gnu" "14.1.0"
- "@next/swc-linux-x64-musl" "14.1.0"
- "@next/swc-win32-arm64-msvc" "14.1.0"
- "@next/swc-win32-ia32-msvc" "14.1.0"
- "@next/swc-win32-x64-msvc" "14.1.0"
+ "@next/swc-darwin-arm64" "14.1.3"
+ "@next/swc-darwin-x64" "14.1.3"
+ "@next/swc-linux-arm64-gnu" "14.1.3"
+ "@next/swc-linux-arm64-musl" "14.1.3"
+ "@next/swc-linux-x64-gnu" "14.1.3"
+ "@next/swc-linux-x64-musl" "14.1.3"
+ "@next/swc-win32-arm64-msvc" "14.1.3"
+ "@next/swc-win32-ia32-msvc" "14.1.3"
+ "@next/swc-win32-x64-msvc" "14.1.3"
nice-try@^1.0.4:
version "1.0.5"
@@ -8240,7 +8361,7 @@ object-assign@^4, object-assign@^4.1.1:
resolved "https://registry.yarnpkg.com/object-assign/-/object-assign-4.1.1.tgz#2109adc7965887cfc05cbbd442cac8bfbb360863"
integrity sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==
-object-inspect@^1.13.1, object-inspect@^1.9.0:
+object-inspect@^1.13.1:
version "1.13.1"
resolved "https://registry.yarnpkg.com/object-inspect/-/object-inspect-1.13.1.tgz#b96c6109324ccfef6b12216a956ca4dc2ff94bc2"
integrity sha512-5qoj1RUiKOMsCCNLV1CBiPYE10sziTsnmNxkAI/rZhiD63CF7IqdFGC/XzjWjpSgLf0LxXX3bDFIh0E18f6UhQ==
@@ -8250,7 +8371,7 @@ object-keys@^1.1.1:
resolved "https://registry.yarnpkg.com/object-keys/-/object-keys-1.1.1.tgz#1c47f272df277f3b1daf061677d9c82e2322c60e"
integrity sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==
-object.assign@^4.1.4:
+object.assign@^4.1.4, object.assign@^4.1.5:
version "4.1.5"
resolved "https://registry.yarnpkg.com/object.assign/-/object.assign-4.1.5.tgz#3a833f9ab7fdb80fc9e8d2300c803d216d8fdbb0"
integrity sha512-byy+U7gp+FVwmyzKPYhW2h5l3crpmGsxl7X2s8y43IgxvG4g3QZ6CffDtsNQy1WsmZpQbO+ybo0AlW7TY6DcBQ==
@@ -8260,7 +8381,7 @@ object.assign@^4.1.4:
has-symbols "^1.0.3"
object-keys "^1.1.1"
-object.entries@^1.1.6, object.entries@^1.1.7:
+object.entries@^1.1.7:
version "1.1.7"
resolved "https://registry.yarnpkg.com/object.entries/-/object.entries-1.1.7.tgz#2b47760e2a2e3a752f39dd874655c61a7f03c131"
integrity sha512-jCBs/0plmPsOnrKAfFQXRG2NFjlhZgjjcBLSmTnEhU8U6vVTsVe8ANeQJCHTl3gSsI4J+0emOoCgoKlmQPMgmA==
@@ -8269,7 +8390,7 @@ object.entries@^1.1.6, object.entries@^1.1.7:
define-properties "^1.2.0"
es-abstract "^1.22.1"
-object.fromentries@^2.0.6, object.fromentries@^2.0.7:
+object.fromentries@^2.0.7:
version "2.0.7"
resolved "https://registry.yarnpkg.com/object.fromentries/-/object.fromentries-2.0.7.tgz#71e95f441e9a0ea6baf682ecaaf37fa2a8d7e616"
integrity sha512-UPbPHML6sL8PI/mOqPwsH4G6iyXcCGzLin8KvEPenOZN5lpCNBZZQ+V62vdjB1mQHrmqGQt5/OJzemUA+KJmEA==
@@ -8279,16 +8400,17 @@ object.fromentries@^2.0.6, object.fromentries@^2.0.7:
es-abstract "^1.22.1"
object.groupby@^1.0.1:
- version "1.0.1"
- resolved "https://registry.yarnpkg.com/object.groupby/-/object.groupby-1.0.1.tgz#d41d9f3c8d6c778d9cbac86b4ee9f5af103152ee"
- integrity sha512-HqaQtqLnp/8Bn4GL16cj+CUYbnpe1bh0TtEaWvybszDG4tgxCJuRpV8VGuvNaI1fAnI4lUJzDG55MXcOH4JZcQ==
+ version "1.0.2"
+ resolved "https://registry.yarnpkg.com/object.groupby/-/object.groupby-1.0.2.tgz#494800ff5bab78fd0eff2835ec859066e00192ec"
+ integrity sha512-bzBq58S+x+uo0VjurFT0UktpKHOZmv4/xePiOA1nbB9pMqpGK7rUPNgf+1YC+7mE+0HzhTMqNUuCqvKhj6FnBw==
dependencies:
- call-bind "^1.0.2"
- define-properties "^1.2.0"
- es-abstract "^1.22.1"
- get-intrinsic "^1.2.1"
+ array.prototype.filter "^1.0.3"
+ call-bind "^1.0.5"
+ define-properties "^1.2.1"
+ es-abstract "^1.22.3"
+ es-errors "^1.0.0"
-object.hasown@^1.1.2:
+object.hasown@^1.1.3:
version "1.1.3"
resolved "https://registry.yarnpkg.com/object.hasown/-/object.hasown-1.1.3.tgz#6a5f2897bb4d3668b8e79364f98ccf971bda55ae"
integrity sha512-fFI4VcYpRHvSLXxP7yiZOMAd331cPfd2p7PFDVbgUsYOfCT3tICVqXWngbjr4m49OvsBwUBQ6O2uQoJvy3RexA==
@@ -8479,6 +8601,14 @@ path-parse@^1.0.7:
resolved "https://registry.yarnpkg.com/path-parse/-/path-parse-1.0.7.tgz#fbc114b60ca42b30d9daf5858e4bd68bbedb6735"
integrity sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==
+path-scurry@^1.10.1:
+ version "1.10.1"
+ resolved "https://registry.yarnpkg.com/path-scurry/-/path-scurry-1.10.1.tgz#9ba6bf5aa8500fe9fd67df4f0d9483b2b0bfc698"
+ integrity sha512-MkhCqzzBEpPvxxQ71Md0b1Kk51W01lrYvlMzSUaIzNsODdd7mqhiimSZlr+VegAz5Z6Vzt9Xg2ttE//XBhH3EQ==
+ dependencies:
+ lru-cache "^9.1.1 || ^10.0.0"
+ minipass "^5.0.0 || ^6.0.2 || ^7.0.0"
+
path-type@^3.0.0:
version "3.0.0"
resolved "https://registry.yarnpkg.com/path-type/-/path-type-3.0.0.tgz#cef31dc8e0a1a3bb0d105c0cd97cf3bf47f4e36f"
@@ -8567,6 +8697,11 @@ pkg-types@^1.0.3:
mlly "^1.2.0"
pathe "^1.1.0"
+possible-typed-array-names@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/possible-typed-array-names/-/possible-typed-array-names-1.0.0.tgz#89bb63c6fada2c3e90adc4a647beeeb39cc7bf8f"
+ integrity sha512-d7Uw+eZoloe0EHDIYoe+bQ5WXnGMOpmiZFTuMWCwpjzzkL2nTjcKiAk4hh8TjnGye2TwWOk3UXucZ+3rbmBa8Q==
+
postcss-attribute-case-insensitive@^5.0.2:
version "5.0.2"
resolved "https://registry.yarnpkg.com/postcss-attribute-case-insensitive/-/postcss-attribute-case-insensitive-5.0.2.tgz#03d761b24afc04c09e757e92ff53716ae8ea2741"
@@ -9118,7 +9253,7 @@ postcss@8.4.31, postcss@^8.1.10:
picocolors "^1.0.0"
source-map-js "^1.0.2"
-postcss@^8.4.21, postcss@^8.4.31:
+postcss@^8.4.21:
version "8.4.32"
resolved "https://registry.yarnpkg.com/postcss/-/postcss-8.4.32.tgz#1dac6ac51ab19adb21b8b34fd2d93a86440ef6c9"
integrity sha512-D/kj5JNu6oo2EIy+XL/26JEDTlIbB8hw85G8StOE6L74RQAVVP5rej6wxCNqyMbR4RkPfqvezVbPw81Ngd6Kcw==
@@ -9127,7 +9262,7 @@ postcss@^8.4.21, postcss@^8.4.31:
picocolors "^1.0.0"
source-map-js "^1.0.2"
-postcss@^8.4.28:
+postcss@^8.4.28, postcss@^8.4.31:
version "8.4.35"
resolved "https://registry.yarnpkg.com/postcss/-/postcss-8.4.35.tgz#60997775689ce09011edf083a549cea44aabe2f7"
integrity sha512-u5U8qYpBCpN13BsiEB0CbR1Hhh4Gc0zLFuedrHJKMctHCHAGrMdG0PRM/KErzAL3CU6/eckEtmHNB3x6e3c0vA==
@@ -9185,12 +9320,12 @@ pretty-format@^29.0.0, pretty-format@^29.7.0:
ansi-styles "^5.0.0"
react-is "^18.0.0"
-prisma@5.9.1:
- version "5.9.1"
- resolved "https://registry.yarnpkg.com/prisma/-/prisma-5.9.1.tgz#baa3dd635fbf71504980978f10f55ea11068f6aa"
- integrity sha512-Hy/8KJZz0ELtkw4FnG9MS9rNWlXcJhf98Z2QMqi0QiVMoS8PzsBkpla0/Y5hTlob8F3HeECYphBjqmBxrluUrQ==
+prisma@5.10.2:
+ version "5.10.2"
+ resolved "https://registry.yarnpkg.com/prisma/-/prisma-5.10.2.tgz#aa63085c49dc74cdb5c3816e8dd1fb4d74a2aadd"
+ integrity sha512-hqb/JMz9/kymRE25pMWCxkdyhbnIWrq+h7S6WysJpdnCvhstbJSNP/S6mScEcqiB8Qv2F+0R3yG+osRaWqZacQ==
dependencies:
- "@prisma/engines" "5.9.1"
+ "@prisma/engines" "5.10.2"
process@^0.11.10:
version "0.11.10"
@@ -9344,9 +9479,9 @@ react-dom@^18.2.0:
scheduler "^0.23.0"
react-error-boundary@^4.0.4:
- version "4.0.12"
- resolved "https://registry.yarnpkg.com/react-error-boundary/-/react-error-boundary-4.0.12.tgz#59f8f1dbc53bbbb34fc384c8db7cf4082cb63e2c"
- integrity sha512-kJdxdEYlb7CPC1A0SeUY38cHpjuu6UkvzKiAmqmOFL21VRfMhOcWxTCBgLVCO0VEMh9JhFNcVaXlV4/BTpiwOA==
+ version "4.0.13"
+ resolved "https://registry.yarnpkg.com/react-error-boundary/-/react-error-boundary-4.0.13.tgz#80386b7b27b1131c5fbb7368b8c0d983354c7947"
+ integrity sha512-b6PwbdSv8XeOSYvjt8LpgpKrZ0yGdtZokYwkwV2wlcZbxgopHX/hgPl5VgpnoVOWd868n1hktM8Qm4b+02MiLQ==
dependencies:
"@babel/runtime" "^7.12.5"
@@ -9356,19 +9491,19 @@ react-hook-form@^7.34.2:
integrity sha512-F/TroLjTICipmHeFlMrLtNLceO2xr1jU3CyiNla5zdwsGUGu2UOxxR4UyJgLlhMwLW/Wzp4cpJ7CPfgJIeKdSg==
react-intl@^6.5.5:
- version "6.5.5"
- resolved "https://registry.yarnpkg.com/react-intl/-/react-intl-6.5.5.tgz#d2de7bfd79718a7e3d8031e2599e94e0c8638377"
- integrity sha512-cI5UKvBh4tc1zxLIziHBYGMX3dhYWDEFlvUDVN6NfT2i96zTXz/zH2AmM8+2waqgOhwkFUzd+7kK1G9q7fiC2g==
+ version "6.6.2"
+ resolved "https://registry.yarnpkg.com/react-intl/-/react-intl-6.6.2.tgz#97a044afa9cac65ae62f404c8bb9cbd3aec52d41"
+ integrity sha512-IpW2IkLtGENSFlX3vfH11rjuCIsW0VyjT0Q1pPKMZPtT2z1FxLt4weFT5Ezti2TScT1xiyb3aQBFth9EB7jzAg==
dependencies:
- "@formatjs/ecma402-abstract" "1.18.0"
- "@formatjs/icu-messageformat-parser" "2.7.3"
- "@formatjs/intl" "2.9.9"
- "@formatjs/intl-displaynames" "6.6.4"
- "@formatjs/intl-listformat" "7.5.3"
+ "@formatjs/ecma402-abstract" "1.18.2"
+ "@formatjs/icu-messageformat-parser" "2.7.6"
+ "@formatjs/intl" "2.10.0"
+ "@formatjs/intl-displaynames" "6.6.6"
+ "@formatjs/intl-listformat" "7.5.5"
"@types/hoist-non-react-statics" "^3.3.1"
"@types/react" "16 || 17 || 18"
hoist-non-react-statics "^3.3.2"
- intl-messageformat "10.5.8"
+ intl-messageformat "10.5.11"
tslib "^2.4.0"
react-is@^16.13.1, react-is@^16.7.0:
@@ -9556,14 +9691,15 @@ redux@^4.0.0, redux@^4.0.4:
"@babel/runtime" "^7.9.2"
reflect.getprototypeof@^1.0.4:
- version "1.0.4"
- resolved "https://registry.yarnpkg.com/reflect.getprototypeof/-/reflect.getprototypeof-1.0.4.tgz#aaccbf41aca3821b87bb71d9dcbc7ad0ba50a3f3"
- integrity sha512-ECkTw8TmJwW60lOTR+ZkODISW6RQ8+2CL3COqtiJKLd6MmB45hN51HprHFziKLGkAuTGQhBb91V8cy+KHlaCjw==
+ version "1.0.5"
+ resolved "https://registry.yarnpkg.com/reflect.getprototypeof/-/reflect.getprototypeof-1.0.5.tgz#e0bd28b597518f16edaf9c0e292c631eb13e0674"
+ integrity sha512-62wgfC8dJWrmxv44CA36pLDnP6KKl3Vhxb7PL+8+qrrFMMoJij4vgiMP8zV4O8+CBMXY1mHxI5fITGHXFHVmQQ==
dependencies:
- call-bind "^1.0.2"
- define-properties "^1.2.0"
- es-abstract "^1.22.1"
- get-intrinsic "^1.2.1"
+ call-bind "^1.0.5"
+ define-properties "^1.2.1"
+ es-abstract "^1.22.3"
+ es-errors "^1.0.0"
+ get-intrinsic "^1.2.3"
globalthis "^1.0.3"
which-builtin-type "^1.1.3"
@@ -9596,14 +9732,15 @@ regexp-tree@^0.1.24:
resolved "https://registry.yarnpkg.com/regexp-tree/-/regexp-tree-0.1.27.tgz#2198f0ef54518ffa743fe74d983b56ffd631b6cd"
integrity sha512-iETxpjK6YoRWJG5o6hXLwvjYAoW+FEZn9os0PD/b6AP6xQwsa/Y7lCVgIixBbUPMfhu+i2LtdeAqVTgGlQarfA==
-regexp.prototype.flags@^1.5.0, regexp.prototype.flags@^1.5.1:
- version "1.5.1"
- resolved "https://registry.yarnpkg.com/regexp.prototype.flags/-/regexp.prototype.flags-1.5.1.tgz#90ce989138db209f81492edd734183ce99f9677e"
- integrity sha512-sy6TXMN+hnP/wMy+ISxg3krXx7BAtWVO4UouuCN/ziM9UEne0euamVNafDfvC83bRNr95y0V5iijeDQFUNpvrg==
+regexp.prototype.flags@^1.5.0, regexp.prototype.flags@^1.5.2:
+ version "1.5.2"
+ resolved "https://registry.yarnpkg.com/regexp.prototype.flags/-/regexp.prototype.flags-1.5.2.tgz#138f644a3350f981a858c44f6bb1a61ff59be334"
+ integrity sha512-NcDiDkTLuPR+++OCKB0nWafEmhg/Da8aUPLPMQbK+bxKKCm1/S5he+AqYa4PlMCVBalb4/yxIRub6qkEx5yJbw==
dependencies:
- call-bind "^1.0.2"
- define-properties "^1.2.0"
- set-function-name "^2.0.0"
+ call-bind "^1.0.6"
+ define-properties "^1.2.1"
+ es-errors "^1.3.0"
+ set-function-name "^2.0.1"
regexpu-core@^5.3.1:
version "5.3.2"
@@ -9687,7 +9824,7 @@ resolve@^1.1.7, resolve@^1.10.0, resolve@^1.14.2, resolve@^1.19.0, resolve@^1.20
path-parse "^1.0.7"
supports-preserve-symlinks-flag "^1.0.0"
-resolve@^2.0.0-next.4:
+resolve@^2.0.0-next.5:
version "2.0.0-next.5"
resolved "https://registry.yarnpkg.com/resolve/-/resolve-2.0.0-next.5.tgz#6b0ec3107e671e52b68cd068ef327173b90dc03c"
integrity sha512-U7WjGVG9sH8tvjW5SmGbQuui75FiyjAX72HX15DwBBwF9dNiQZRQAg9nnPhYy+TUnE0+VcrttuvNI8oSxZcocA==
@@ -9839,13 +9976,13 @@ rxjs@^7.5.1:
dependencies:
tslib "^2.1.0"
-safe-array-concat@^1.0.1:
- version "1.0.1"
- resolved "https://registry.yarnpkg.com/safe-array-concat/-/safe-array-concat-1.0.1.tgz#91686a63ce3adbea14d61b14c99572a8ff84754c"
- integrity sha512-6XbUAseYE2KtOuGueyeobCySj9L4+66Tn6KQMOPQJrAJEowYKW/YR/MGJZl7FdydUdaFu4LYyDZjxf4/Nmo23Q==
+safe-array-concat@^1.1.0:
+ version "1.1.2"
+ resolved "https://registry.yarnpkg.com/safe-array-concat/-/safe-array-concat-1.1.2.tgz#81d77ee0c4e8b863635227c721278dd524c20edb"
+ integrity sha512-vj6RsCsWBCf19jIeHEfkRMw8DPiBb+DMXklQ/1SGDHOMlHdPUkZXFQ2YdplS23zESTijAcurb1aSgJA3AgMu1Q==
dependencies:
- call-bind "^1.0.2"
- get-intrinsic "^1.2.1"
+ call-bind "^1.0.7"
+ get-intrinsic "^1.2.4"
has-symbols "^1.0.3"
isarray "^2.0.5"
@@ -9859,13 +9996,13 @@ safe-identifier@^0.4.2:
resolved "https://registry.yarnpkg.com/safe-identifier/-/safe-identifier-0.4.2.tgz#cf6bfca31c2897c588092d1750d30ef501d59fcb"
integrity sha512-6pNbSMW6OhAi9j+N8V+U715yBQsaWJ7eyEUaOrawX+isg5ZxhUlV1NipNtgaKHmFGiABwt+ZF04Ii+3Xjkg+8w==
-safe-regex-test@^1.0.0:
- version "1.0.0"
- resolved "https://registry.yarnpkg.com/safe-regex-test/-/safe-regex-test-1.0.0.tgz#793b874d524eb3640d1873aad03596db2d4f2295"
- integrity sha512-JBUUzyOgEwXQY1NuPtvcj/qcBDbDmEvWufhlnXZIm75DEHp+afM1r1ujJpJsV/gSM4t59tpDyPi1sd6ZaPFfsA==
+safe-regex-test@^1.0.3:
+ version "1.0.3"
+ resolved "https://registry.yarnpkg.com/safe-regex-test/-/safe-regex-test-1.0.3.tgz#a5b4c0f06e0ab50ea2c395c14d8371232924c377"
+ integrity sha512-CdASjNJPvRa7roO6Ra/gLYBTzYzzPyyBXxIMdGW3USQLyjWEls2RgW5UBTXaQVp+OrpeCK3bLem8smtmheoRuw==
dependencies:
- call-bind "^1.0.2"
- get-intrinsic "^1.1.3"
+ call-bind "^1.0.6"
+ es-errors "^1.3.0"
is-regex "^1.1.4"
safer-buffer@^2.0.2, safer-buffer@^2.1.0, safer-buffer@~2.1.0:
@@ -9909,14 +10046,14 @@ semver@^6.0.0, semver@^6.3.0, semver@^6.3.1:
resolved "https://registry.yarnpkg.com/semver/-/semver-6.3.1.tgz#556d2ef8689146e46dcea4bfdd095f3434dffcb4"
integrity sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==
-semver@^7.3.4, semver@^7.3.7, semver@^7.5.3:
+semver@^7.3.4, semver@^7.3.7, semver@^7.5.3, semver@^7.5.4:
version "7.6.0"
resolved "https://registry.yarnpkg.com/semver/-/semver-7.6.0.tgz#1a46a4db4bffcccd97b743b5005c8325f23d4e2d"
integrity sha512-EnwXhrlwXMk9gKu5/flx5sv/an57AkRplG3hTK68W7FRDN+k+OWBj65M7719OkA82XLBxrcX0KSHj+X5COhOVg==
dependencies:
lru-cache "^6.0.0"
-semver@^7.3.5, semver@^7.5.4:
+semver@^7.3.5:
version "7.5.4"
resolved "https://registry.yarnpkg.com/semver/-/semver-7.5.4.tgz#483986ec4ed38e1c6c48c34894a9182dbff68a6e"
integrity sha512-1bCSESV6Pv+i21Hvpxp3Dx+pSD8lIPt8uVjRrxAUt/nbswYc+tK6Y2btiULjd4+fnq15PX+nqQDC7Oft7WkwcA==
@@ -9930,24 +10067,27 @@ serialize-javascript@^4.0.0:
dependencies:
randombytes "^2.1.0"
-set-function-length@^1.1.1:
- version "1.1.1"
- resolved "https://registry.yarnpkg.com/set-function-length/-/set-function-length-1.1.1.tgz#4bc39fafb0307224a33e106a7d35ca1218d659ed"
- integrity sha512-VoaqjbBJKiWtg4yRcKBQ7g7wnGnLV3M8oLvVWwOk2PdYY6PEFegR1vezXR0tw6fZGF9csVakIRjrJiy2veSBFQ==
+set-function-length@^1.2.1:
+ version "1.2.2"
+ resolved "https://registry.yarnpkg.com/set-function-length/-/set-function-length-1.2.2.tgz#aac72314198eaed975cf77b2c3b6b880695e5449"
+ integrity sha512-pgRc4hJ4/sNjWCSS9AmnS40x3bNMDTknHgL5UaMBTMyJnU90EgWh1Rz+MC9eFu4BuN/UwZjKQuY/1v3rM7HMfg==
dependencies:
- define-data-property "^1.1.1"
- get-intrinsic "^1.2.1"
+ define-data-property "^1.1.4"
+ es-errors "^1.3.0"
+ function-bind "^1.1.2"
+ get-intrinsic "^1.2.4"
gopd "^1.0.1"
- has-property-descriptors "^1.0.0"
+ has-property-descriptors "^1.0.2"
set-function-name@^2.0.0, set-function-name@^2.0.1:
- version "2.0.1"
- resolved "https://registry.yarnpkg.com/set-function-name/-/set-function-name-2.0.1.tgz#12ce38b7954310b9f61faa12701620a0c882793a"
- integrity sha512-tMNCiqYVkXIZgc2Hnoy2IvC/f8ezc5koaRFkCjrpWzGpCd3qbZXPzVy9MAZzK1ch/X0jvSkojys3oqJN0qCmdA==
+ version "2.0.2"
+ resolved "https://registry.yarnpkg.com/set-function-name/-/set-function-name-2.0.2.tgz#16a705c5a0dc2f5e638ca96d8a8cd4e1c2b90985"
+ integrity sha512-7PGFlmtwsEADb0WYyvCMa1t+yke6daIG4Wirafur5kcf+MhUnPms1UeR0CKQdTZD81yESwMHbtn+TR+dMviakQ==
dependencies:
- define-data-property "^1.0.1"
+ define-data-property "^1.1.4"
+ es-errors "^1.3.0"
functions-have-names "^1.2.3"
- has-property-descriptors "^1.0.0"
+ has-property-descriptors "^1.0.2"
sharp@^0.32.6:
version "0.32.6"
@@ -9993,13 +10133,14 @@ shell-quote@^1.6.1:
integrity sha512-6j1W9l1iAs/4xYBI1SYOVZyFcCis9b4KCLQ8fgAGG07QvzaRLVVRQvAy85yNmmZSjYjg4MWh4gNvlPujU/5LpA==
side-channel@^1.0.4:
- version "1.0.4"
- resolved "https://registry.yarnpkg.com/side-channel/-/side-channel-1.0.4.tgz#efce5c8fdc104ee751b25c58d4290011fa5ea2cf"
- integrity sha512-q5XPytqFEIKHkGdiMIrY10mvLRvnQh42/+GoBlFW3b2LXLE2xxJpZFdm94we0BaoV3RwJyGqg5wS7epxTv0Zvw==
+ version "1.0.6"
+ resolved "https://registry.yarnpkg.com/side-channel/-/side-channel-1.0.6.tgz#abd25fb7cd24baf45466406b1096b7831c9215f2"
+ integrity sha512-fDW/EZ6Q9RiO8eFG8Hj+7u/oW+XrPTIChwCOM2+th2A6OblDtYYIpve9m+KvI9Z4C9qSEXlaGR6bTEYHReuglA==
dependencies:
- call-bind "^1.0.0"
- get-intrinsic "^1.0.2"
- object-inspect "^1.9.0"
+ call-bind "^1.0.7"
+ es-errors "^1.3.0"
+ get-intrinsic "^1.2.4"
+ object-inspect "^1.13.1"
signal-exit@^3.0.2, signal-exit@^3.0.3, signal-exit@^3.0.7:
version "3.0.7"
@@ -10213,7 +10354,7 @@ string-length@^4.0.1:
char-regex "^1.0.2"
strip-ansi "^6.0.0"
-string-width@^4.1.0, string-width@^4.2.0, string-width@^4.2.3:
+"string-width-cjs@npm:string-width@^4.2.0", string-width@^4.1.0, string-width@^4.2.0, string-width@^4.2.3:
version "4.2.3"
resolved "https://registry.yarnpkg.com/string-width/-/string-width-4.2.3.tgz#269c7117d27b05ad2e536830a8ec895ef9c6d010"
integrity sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==
@@ -10222,7 +10363,7 @@ string-width@^4.1.0, string-width@^4.2.0, string-width@^4.2.3:
is-fullwidth-code-point "^3.0.0"
strip-ansi "^6.0.1"
-string-width@^5.0.0, string-width@^5.0.1:
+string-width@^5.0.0, string-width@^5.0.1, string-width@^5.1.2:
version "5.1.2"
resolved "https://registry.yarnpkg.com/string-width/-/string-width-5.1.2.tgz#14f8daec6d81e7221d2a357e668cab73bdbca794"
integrity sha512-HnLOCR3vjcY8beoNLtcjZ5/nxn2afmME6lhrDrebokqMap+XbeW8n9TXpPDOqdGK5qcI3oT0GKTW6wC7EMiVqA==
@@ -10231,7 +10372,7 @@ string-width@^5.0.0, string-width@^5.0.1:
emoji-regex "^9.2.2"
strip-ansi "^7.0.1"
-string.prototype.matchall@^4.0.8:
+string.prototype.matchall@^4.0.10:
version "4.0.10"
resolved "https://registry.yarnpkg.com/string.prototype.matchall/-/string.prototype.matchall-4.0.10.tgz#a1553eb532221d4180c51581d6072cd65d1ee100"
integrity sha512-rGXbGmOEosIQi6Qva94HUjgPs9vKW+dkG7Y8Q5O2OYkWL6wFaTRZO8zM4mhP94uX55wgyrXzfS2aGtGzUL7EJQ==
@@ -10289,7 +10430,7 @@ string_decoder@^1.1.1:
dependencies:
safe-buffer "~5.2.0"
-strip-ansi@^6.0.0, strip-ansi@^6.0.1:
+"strip-ansi-cjs@npm:strip-ansi@^6.0.1", strip-ansi@^6.0.0, strip-ansi@^6.0.1:
version "6.0.1"
resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-6.0.1.tgz#9e26c63d30f53443e9489495b2105d37b67a85d9"
integrity sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==
@@ -10709,9 +10850,9 @@ trim-newlines@^4.0.2:
integrity sha512-jRKj0n0jXWo6kh62nA5TEh3+4igKDXLvzBJcPpiizP7oOolUrYIxmVBG9TOtHYFHoddUk6YvAkGeGoSVTXfQXQ==
ts-api-utils@^1.0.1:
- version "1.0.3"
- resolved "https://registry.yarnpkg.com/ts-api-utils/-/ts-api-utils-1.0.3.tgz#f12c1c781d04427313dbac808f453f050e54a331"
- integrity sha512-wNMeqtMz5NtwpT/UZGY5alT+VoKdSsOOP/kqHFcUW1P/VRhH2wJ48+DN2WwUliNbQ976ETwDL0Ifd2VVvgonvg==
+ version "1.3.0"
+ resolved "https://registry.yarnpkg.com/ts-api-utils/-/ts-api-utils-1.3.0.tgz#4b490e27129f1e8e686b45cc4ab63714dc60eea1"
+ integrity sha512-UQMIo7pb8WRomKR1/+MFVLTroIvDVtMX3K6OUir8ynLyzB8Jeriont2bTAtmNPa1ekAgN7YPDyf6V+ygrdU+eQ==
ts-jest@^29.1.2:
version "29.1.2"
@@ -10827,44 +10968,49 @@ type-fest@^1.0.1, type-fest@^1.0.2, type-fest@^1.2.1, type-fest@^1.2.2:
resolved "https://registry.yarnpkg.com/type-fest/-/type-fest-1.4.0.tgz#e9fb813fe3bf1744ec359d55d1affefa76f14be1"
integrity sha512-yGSza74xk0UG8k+pLh5oeoYirvIiWo5t0/o3zHHAO2tRDiZcxWP7fywNlXhqb6/r6sWvwi+RsyQMWhVLe4BVuA==
-typed-array-buffer@^1.0.0:
- version "1.0.0"
- resolved "https://registry.yarnpkg.com/typed-array-buffer/-/typed-array-buffer-1.0.0.tgz#18de3e7ed7974b0a729d3feecb94338d1472cd60"
- integrity sha512-Y8KTSIglk9OZEr8zywiIHG/kmQ7KWyjseXs1CbSo8vC42w7hg2HgYTxSWwP0+is7bWDc1H+Fo026CpHFwm8tkw==
+typed-array-buffer@^1.0.2:
+ version "1.0.2"
+ resolved "https://registry.yarnpkg.com/typed-array-buffer/-/typed-array-buffer-1.0.2.tgz#1867c5d83b20fcb5ccf32649e5e2fc7424474ff3"
+ integrity sha512-gEymJYKZtKXzzBzM4jqa9w6Q1Jjm7x2d+sh19AdsD4wqnMPDYyvwpsIc2Q/835kHuo3BEQ7CjelGhfTsoBb2MQ==
dependencies:
- call-bind "^1.0.2"
- get-intrinsic "^1.2.1"
- is-typed-array "^1.1.10"
+ call-bind "^1.0.7"
+ es-errors "^1.3.0"
+ is-typed-array "^1.1.13"
-typed-array-byte-length@^1.0.0:
- version "1.0.0"
- resolved "https://registry.yarnpkg.com/typed-array-byte-length/-/typed-array-byte-length-1.0.0.tgz#d787a24a995711611fb2b87a4052799517b230d0"
- integrity sha512-Or/+kvLxNpeQ9DtSydonMxCx+9ZXOswtwJn17SNLvhptaXYDJvkFFP5zbfU/uLmvnBJlI4yrnXRxpdWH/M5tNA==
+typed-array-byte-length@^1.0.1:
+ version "1.0.1"
+ resolved "https://registry.yarnpkg.com/typed-array-byte-length/-/typed-array-byte-length-1.0.1.tgz#d92972d3cff99a3fa2e765a28fcdc0f1d89dec67"
+ integrity sha512-3iMJ9q0ao7WE9tWcaYKIptkNBuOIcZCCT0d4MRvuuH88fEoEH62IuQe0OtraD3ebQEoTRk8XCBoknUNc1Y67pw==
dependencies:
- call-bind "^1.0.2"
+ call-bind "^1.0.7"
for-each "^0.3.3"
- has-proto "^1.0.1"
- is-typed-array "^1.1.10"
+ gopd "^1.0.1"
+ has-proto "^1.0.3"
+ is-typed-array "^1.1.13"
-typed-array-byte-offset@^1.0.0:
- version "1.0.0"
- resolved "https://registry.yarnpkg.com/typed-array-byte-offset/-/typed-array-byte-offset-1.0.0.tgz#cbbe89b51fdef9cd6aaf07ad4707340abbc4ea0b"
- integrity sha512-RD97prjEt9EL8YgAgpOkf3O4IF9lhJFr9g0htQkm0rchFp/Vx7LW5Q8fSXXub7BXAODyUQohRMyOc3faCPd0hg==
+typed-array-byte-offset@^1.0.2:
+ version "1.0.2"
+ resolved "https://registry.yarnpkg.com/typed-array-byte-offset/-/typed-array-byte-offset-1.0.2.tgz#f9ec1acb9259f395093e4567eb3c28a580d02063"
+ integrity sha512-Ous0vodHa56FviZucS2E63zkgtgrACj7omjwd/8lTEMEPFFyjfixMZ1ZXenpgCFBBt4EC1J2XsyVS2gkG0eTFA==
dependencies:
- available-typed-arrays "^1.0.5"
- call-bind "^1.0.2"
+ available-typed-arrays "^1.0.7"
+ call-bind "^1.0.7"
for-each "^0.3.3"
- has-proto "^1.0.1"
- is-typed-array "^1.1.10"
+ gopd "^1.0.1"
+ has-proto "^1.0.3"
+ is-typed-array "^1.1.13"
-typed-array-length@^1.0.4:
- version "1.0.4"
- resolved "https://registry.yarnpkg.com/typed-array-length/-/typed-array-length-1.0.4.tgz#89d83785e5c4098bec72e08b319651f0eac9c1bb"
- integrity sha512-KjZypGq+I/H7HI5HlOoGHkWUUGq+Q0TPhQurLbyrVrvnKTBgzLhIJ7j6J/XTQOi0d1RjyZ0wdas8bKs2p0x3Ng==
+typed-array-length@^1.0.5:
+ version "1.0.5"
+ resolved "https://registry.yarnpkg.com/typed-array-length/-/typed-array-length-1.0.5.tgz#57d44da160296d8663fd63180a1802ebf25905d5"
+ integrity sha512-yMi0PlwuznKHxKmcpoOdeLwxBoVPkqZxd7q2FgMkmD3bNwvF5VW0+UlUQ1k1vmktTu4Yu13Q0RIxEP8+B+wloA==
dependencies:
- call-bind "^1.0.2"
+ call-bind "^1.0.7"
for-each "^0.3.3"
- is-typed-array "^1.1.9"
+ gopd "^1.0.1"
+ has-proto "^1.0.3"
+ is-typed-array "^1.1.13"
+ possible-typed-array-names "^1.0.0"
typedarray-to-buffer@^3.1.5:
version "3.1.5"
@@ -10879,9 +11025,9 @@ typescript@^4.0, typescript@^4.5:
integrity sha512-1FXk9E2Hm+QzZQ7z+McJiHL4NW1F2EzMu9Nq9i3zAaGqibafqYwCVU6WyWAuyQRRzOlxou8xZSyXLEN8oKj24g==
typescript@^5.1.6:
- version "5.3.3"
- resolved "https://registry.yarnpkg.com/typescript/-/typescript-5.3.3.tgz#b3ce6ba258e72e6305ba66f5c9b452aaee3ffe37"
- integrity sha512-pXWcraxM0uxAS+tN0AG/BF2TyqmHO014Z070UsJ+pFvYuRSq8KH8DmWpnbXe0pEPDHXZV3FcAbJkijJ5oNEnWw==
+ version "5.4.2"
+ resolved "https://registry.yarnpkg.com/typescript/-/typescript-5.4.2.tgz#0ae9cebcfae970718474fe0da2c090cad6577372"
+ integrity sha512-+2/g0Fds1ERlP6JsakQQDXjZdZMM+rqpamFZJEKh4kwTIn3iDkgKtby0CeNd5ATNZ4Ry1ax15TMx0W2V+miizQ==
ufo@^1.0.0, ufo@^1.2.0, ufo@^1.3.0, ufo@^1.3.1, ufo@^1.3.2:
version "1.3.2"
@@ -11153,36 +11299,25 @@ which-builtin-type@^1.1.3:
which-typed-array "^1.1.9"
which-collection@^1.0.1:
- version "1.0.1"
- resolved "https://registry.yarnpkg.com/which-collection/-/which-collection-1.0.1.tgz#70eab71ebbbd2aefaf32f917082fc62cdcb70906"
- integrity sha512-W8xeTUwaln8i3K/cY1nGXzdnVZlidBcagyNFtBdD5kxnb4TvGKR7FfSIS3mYpwWS1QUCutfKz8IY8RjftB0+1A==
+ version "1.0.2"
+ resolved "https://registry.yarnpkg.com/which-collection/-/which-collection-1.0.2.tgz#627ef76243920a107e7ce8e96191debe4b16c2a0"
+ integrity sha512-K4jVyjnBdgvc86Y6BkaLZEN933SwYOuBFkdmBu9ZfkcAbdVbpITnDmjvZ/aQjRXQrv5EPkTnD1s39GiiqbngCw==
dependencies:
- is-map "^2.0.1"
- is-set "^2.0.1"
- is-weakmap "^2.0.1"
- is-weakset "^2.0.1"
+ is-map "^2.0.3"
+ is-set "^2.0.3"
+ is-weakmap "^2.0.2"
+ is-weakset "^2.0.3"
-which-typed-array@^1.1.11, which-typed-array@^1.1.13:
- version "1.1.13"
- resolved "https://registry.yarnpkg.com/which-typed-array/-/which-typed-array-1.1.13.tgz#870cd5be06ddb616f504e7b039c4c24898184d36"
- integrity sha512-P5Nra0qjSncduVPEAr7xhoF5guty49ArDTwzJ/yNuPIbZppyRxFQsRCWrocxIY+CnMVG+qfbU2FmDKyvSGClow==
+which-typed-array@^1.1.14, which-typed-array@^1.1.9:
+ version "1.1.14"
+ resolved "https://registry.yarnpkg.com/which-typed-array/-/which-typed-array-1.1.14.tgz#1f78a111aee1e131ca66164d8bdc3ab062c95a06"
+ integrity sha512-VnXFiIW8yNn9kIHN88xvZ4yOWchftKDsRJ8fEPacX/wl1lOvBrhsJ/OeJCXq7B0AaijRuqgzSKalJoPk+D8MPg==
dependencies:
- available-typed-arrays "^1.0.5"
- call-bind "^1.0.4"
+ available-typed-arrays "^1.0.6"
+ call-bind "^1.0.5"
for-each "^0.3.3"
gopd "^1.0.1"
- has-tostringtag "^1.0.0"
-
-which-typed-array@^1.1.9:
- version "1.1.12"
- resolved "https://registry.yarnpkg.com/which-typed-array/-/which-typed-array-1.1.12.tgz#cc8dfcc0ed769af33879012ea549b0af69d33cd3"
- integrity sha512-H287jkk4q9wRAQTStQoqm+zGjoMqOxBKAdwnENVwav5/ngW76883g6EwLH9GUPPD7m7yj60xP7wtzQhh6//04w==
- dependencies:
- available-typed-arrays "^1.0.5"
- call-bind "^1.0.4"
- for-each "^0.3.3"
- gopd "^1.0.1"
- has-tostringtag "^1.0.0"
+ has-tostringtag "^1.0.1"
which@^1.2.9, which@^1.3.1:
version "1.3.1"
@@ -11198,19 +11333,19 @@ which@^2.0.1:
dependencies:
isexe "^2.0.0"
-wrap-ansi@^6.2.0:
- version "6.2.0"
- resolved "https://registry.yarnpkg.com/wrap-ansi/-/wrap-ansi-6.2.0.tgz#e9393ba07102e6c91a3b221478f0257cd2856e53"
- integrity sha512-r6lPcBGxZXlIcymEu7InxDMhdW0KDxpLgoFLcguasxCaJ/SOIZwINatK9KY/tf+ZrlywOKU0UDj3ATXUBfxJXA==
+"wrap-ansi-cjs@npm:wrap-ansi@^7.0.0", wrap-ansi@^7.0.0:
+ version "7.0.0"
+ resolved "https://registry.yarnpkg.com/wrap-ansi/-/wrap-ansi-7.0.0.tgz#67e145cff510a6a6984bdf1152911d69d2eb9e43"
+ integrity sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==
dependencies:
ansi-styles "^4.0.0"
string-width "^4.1.0"
strip-ansi "^6.0.0"
-wrap-ansi@^7.0.0:
- version "7.0.0"
- resolved "https://registry.yarnpkg.com/wrap-ansi/-/wrap-ansi-7.0.0.tgz#67e145cff510a6a6984bdf1152911d69d2eb9e43"
- integrity sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==
+wrap-ansi@^6.2.0:
+ version "6.2.0"
+ resolved "https://registry.yarnpkg.com/wrap-ansi/-/wrap-ansi-6.2.0.tgz#e9393ba07102e6c91a3b221478f0257cd2856e53"
+ integrity sha512-r6lPcBGxZXlIcymEu7InxDMhdW0KDxpLgoFLcguasxCaJ/SOIZwINatK9KY/tf+ZrlywOKU0UDj3ATXUBfxJXA==
dependencies:
ansi-styles "^4.0.0"
string-width "^4.1.0"
@@ -11364,8 +11499,8 @@ yup@^0.32.11:
toposort "^2.0.2"
zustand@^4.3.8:
- version "4.4.7"
- resolved "https://registry.yarnpkg.com/zustand/-/zustand-4.4.7.tgz#355406be6b11ab335f59a66d2cf9815e8f24038c"
- integrity sha512-QFJWJMdlETcI69paJwhSMJz7PPWjVP8Sjhclxmxmxv/RYI7ZOvR5BHX+ktH0we9gTWQMxcne8q1OY8xxz604gw==
+ version "4.5.2"
+ resolved "https://registry.yarnpkg.com/zustand/-/zustand-4.5.2.tgz#fddbe7cac1e71d45413b3682cdb47b48034c3848"
+ integrity sha512-2cN1tPkDVkwCy5ickKrI7vijSjPksFRfqS6237NzT0vqSsztTNnQdHw9mmN7uBdk3gceVXU0a+21jFzFzAc9+g==
dependencies:
use-sync-external-store "1.2.0"