diff --git a/.pre-commit-config.yaml b/.pre-commit-config.yaml
index 8bd8b42c..a98ba068 100644
--- a/.pre-commit-config.yaml
+++ b/.pre-commit-config.yaml
@@ -66,7 +66,7 @@ repos:
- hooks:
- id: python-safety-dependencies-check
repo: https://github.com/Lucas-C/pre-commit-hooks-safety
- rev: v1.4.0
+ rev: v1.4.2
- hooks:
- id: beautysh
repo: https://github.com/bemeurer/beautysh.git
diff --git a/front/components.d.ts b/front/components.d.ts
new file mode 100644
index 00000000..746c93c7
--- /dev/null
+++ b/front/components.d.ts
@@ -0,0 +1,35 @@
+/* eslint-disable */
+// @ts-nocheck
+// Generated by unplugin-vue-components
+// Read more: https://github.com/vuejs/core/pull/3399
+// biome-ignore lint: disable
+export {}
+
+/* prettier-ignore */
+declare module 'vue' {
+ export interface GlobalComponents {
+ Button: typeof import('primevue/button')['default']
+ ClimateZoneScorePopupContent: typeof import('./src/components/map/popup/ClimateZoneScorePopupContent.vue')['default']
+ ClimateZonesLegend: typeof import('./src/components/map/legend/ClimateZonesLegend.vue')['default']
+ FeedbackForm: typeof import('./src/components/forms/FeedbackForm.vue')['default']
+ FeedbackPopin: typeof import('./src/components/FeedbackPopin.vue')['default']
+ InputText: typeof import('primevue/inputtext')['default']
+ LayerSwitcher: typeof import('./src/components/map/layerSwitcher/LayerSwitcher.vue')['default']
+ MapComponent: typeof import('./src/components/map/MapComponent.vue')['default']
+ MapLayerSwitcher: typeof import('./src/components/map/layerSwitcher/MapLayerSwitcher.vue')['default']
+ MapLegend: typeof import('./src/components/map/legend/MapLegend.vue')['default']
+ MapScorePopup: typeof import('./src/components/map/popup/MapScorePopup.vue')['default']
+ Message: typeof import("primevue/message")["default"]
+ NavbarComponent: typeof import('./src/components/navbar/NavbarComponent.vue')['default']
+ PlantabilityLegend: typeof import('./src/components/map/legend/PlantabilityLegend.vue')['default']
+ PlantabilityScorePopupContent: typeof import('./src/components/map/popup/PlantabilityScorePopupContent.vue')['default']
+ RouterLink: typeof import('vue-router')['RouterLink']
+ RouterView: typeof import('vue-router')['RouterView']
+ ScoreLabel: typeof import('./src/components/map/ScoreLabel.vue')['default']
+ Textarea: typeof import('primevue/textarea')['default']
+ Toast: typeof import('primevue/toast')['default']
+ VulnerabilityLegend: typeof import('./src/components/map/legend/VulnerabilityLegend.vue')['default']
+ VulnerabilityScorePopupContent: typeof import('./src/components/map/popup/VulnerabilityScorePopupContent.vue')['default']
+ VulnerabilityScorePopupItem: typeof import('./src/components/map/popup/VulnerabilityScorePopupItem.vue')['default']
+ }
+}
diff --git a/front/cypress/components/FeedbackPopin.cy.ts b/front/cypress/components/FeedbackPopin.cy.ts
index 2908e7ee..9d578741 100644
--- a/front/cypress/components/FeedbackPopin.cy.ts
+++ b/front/cypress/components/FeedbackPopin.cy.ts
@@ -1,32 +1,21 @@
import FeedbackPopin from "@/components/FeedbackPopin.vue"
describe("FeedbackPopin", () => {
- it("renders correctly", () => {
- cy.mount(FeedbackPopin)
- cy.getBySel("submit-feedback-button").should("exist")
- cy.getBySel("close-feedback-button").should("exist")
- })
-
it("correctly send feedback", () => {
cy.mount(FeedbackPopin, {
props: {
- allowedExtensions: []
+ visible: true
},
emits: {
"submit-feedback": cy.spy().as("submit-feedback")
}
})
- cy.getBySel("submit-feedback-button").click()
- cy.get("@submit-feedback").should("have.been.calledWith", { email: "", feedback: "" })
-
const testEmail = "molly.maguire@test.fr"
const testFeedback = "Raise the floor, not just the ceiling."
- cy.get("textarea").type(testFeedback)
cy.get('input[type="email"]').type(testEmail)
+ cy.get("textarea").type(testFeedback)
cy.getBySel("submit-feedback-button").click()
-
- // Check if the event was passed with the correct values
cy.get("@submit-feedback").should("have.been.calledWith", {
email: testEmail,
feedback: testFeedback
diff --git a/front/cypress/components/MapLegend.cy.ts b/front/cypress/components/MapLegend.cy.ts
index 71eed08d..98172e9e 100644
--- a/front/cypress/components/MapLegend.cy.ts
+++ b/front/cypress/components/MapLegend.cy.ts
@@ -3,7 +3,7 @@ import VulnerabilityLegend from "@/components/map/legend/VulnerabilityLegend.vue
describe("Map legends", () => {
it("renders correctly plantability legend", () => {
- cy.mount(PlantabilityLegend)
+ cy.mount(PlantabilityLegend, {})
cy.contains(0)
cy.contains(2)
cy.contains(4)
diff --git a/front/cypress/components/NavbarComponent.cy.ts b/front/cypress/components/NavbarComponent.cy.ts
index 6d28fa9d..3806e49a 100644
--- a/front/cypress/components/NavbarComponent.cy.ts
+++ b/front/cypress/components/NavbarComponent.cy.ts
@@ -1,4 +1,4 @@
-import Navbar from "@/components/NavbarComponent.vue"
+import Navbar from "@/components/navbar/NavbarComponent.vue"
describe("Navbar", () => {
beforeEach(() => {
diff --git a/front/cypress/e2e/mapInteractions.cy.ts b/front/cypress/e2e/mapInteractions.cy.ts
index 5aa6d99e..e3b23f19 100644
--- a/front/cypress/e2e/mapInteractions.cy.ts
+++ b/front/cypress/e2e/mapInteractions.cy.ts
@@ -20,7 +20,7 @@ describe("Map interactions", () => {
cy.mapOpenPopup()
cy.getBySel("plantability-score-label").should("exist")
- cy.mapSwitchLayer(DataType.LOCAL_CLIMATE_ZONES) // cf. issue #142
+ cy.mapSwitchLayer(DataTypeToLabel[DataType.LOCAL_CLIMATE_ZONES]) // cf. issue #142
cy.url().should("include", "/lcz/")
cy.getBySel("map-legend-title").should("contain", DataTypeToLabel[DataType.LOCAL_CLIMATE_ZONES])
cy.mapHasNoPopup()
@@ -30,7 +30,7 @@ describe("Map interactions", () => {
cy.mapClosePopup()
cy.mapOpenPopup() // cf. issue #92
- cy.mapSwitchLayer(DataType.VULNERABILITY)
+ cy.mapSwitchLayer(DataTypeToLabel[DataType.VULNERABILITY])
cy.url().should("include", "/vulnerability/")
cy.getBySel("map-legend-title").should("contain", DataTypeToLabel[DataType.VULNERABILITY])
cy.mapHasNoPopup()
diff --git a/front/cypress/e2e/mapPopinInteractions.cy.ts b/front/cypress/e2e/mapPopinInteractions.cy.ts
index 187a5eec..7d1f5b73 100644
--- a/front/cypress/e2e/mapPopinInteractions.cy.ts
+++ b/front/cypress/e2e/mapPopinInteractions.cy.ts
@@ -13,7 +13,7 @@ describe("Feedback Popin interactivity", () => {
it("Open, close and reopen feedback popin", () => {
cy.getBySel("open-feedback-button").click()
- cy.getBySel("close-feedback-button").click()
+ cy.get("[data-pc-name='pcclosebutton']").click()
cy.getBySel("feedback-popin").should("not.exist")
cy.getBySel("open-feedback-button").click()
diff --git a/front/cypress/support/commands.ts b/front/cypress/support/commands.ts
index b09a8fc5..8c4bab4a 100644
--- a/front/cypress/support/commands.ts
+++ b/front/cypress/support/commands.ts
@@ -18,5 +18,6 @@ Cypress.Commands.add("mapClosePopup", () => {
})
Cypress.Commands.add("mapSwitchLayer", (datatype: string) => {
- cy.getBySel("layer-switcher").get("select").select(datatype)
+ cy.getBySel("layer-switcher").click()
+ cy.getBySel("layer-switcher").get(".p-select-option-label").contains(datatype).click()
})
diff --git a/front/cypress/support/component.ts b/front/cypress/support/component.ts
index 1dc3203f..d553dbf4 100644
--- a/front/cypress/support/component.ts
+++ b/front/cypress/support/component.ts
@@ -17,11 +17,11 @@
import "./commands"
import "@/styles/main.css"
-
-// Alternatively you can use CommonJS syntax:
-// require('./commands')
+import Primevue from "primevue/config"
import { mount } from "cypress/vue"
+import { IArbrePreset } from "../../src/theme/iArbre"
+import ToastService from "primevue/toastservice"
// Augment the Cypress namespace to include type definitions for
// your custom command.
@@ -35,7 +35,23 @@ declare global {
}
}
-Cypress.Commands.add("mount", mount)
+Cypress.Commands.add("mount", (component, options) => {
+ // Setup options object
+ if (!options) {
+ options = {}
+ }
+ options.global = options.global || {}
+ options.global.plugins = options?.global.plugins || []
+ options.global.plugins.push({
+ install(app) {
+ app.use(Primevue, {
+ theme: {
+ preset: IArbrePreset
+ }
+ })
+ app.use(ToastService)
+ }
+ })
-// Example use:
-// cy.mount(MyComponent)
+ return mount(component, options)
+})
diff --git a/front/package-lock.json b/front/package-lock.json
index 47b45bc6..187c48e8 100644
--- a/front/package-lock.json
+++ b/front/package-lock.json
@@ -8,15 +8,19 @@
"name": "iarbre-front",
"version": "0.0.0",
"dependencies": {
+ "@primeuix/themes": "^1.0.3",
"@tailwindcss/vite": "^4.0.17",
"maplibre-gl": "^5.2.0",
"pinia": "^3.0.0",
+ "primevue": "^4.3.3",
+ "tailwindcss-primeui": "^0.6.1",
"vue": "^3.4.29",
"vue-router": "^4.3.3"
},
"devDependencies": {
"@babel/eslint-parser": "^7.25.9",
"@pinia/testing": "^1.0.0",
+ "@primevue/auto-import-resolver": "^4.3.3",
"@rushstack/eslint-patch": "^1.8.0",
"@tsconfig/node20": "^20.1.4",
"@types/jsdom": "^21.1.7",
@@ -41,6 +45,7 @@
"start-server-and-test": "^2.0.4",
"tailwindcss": "^4.0.17",
"typescript": "5.6.3",
+ "unplugin-vue-components": "^28.5.0",
"vite": "^5.3.1",
"vite-plugin-vue-devtools": "^7.3.1",
"vitest": "^3.0.5",
@@ -1621,6 +1626,97 @@
"dev": true,
"license": "MIT"
},
+ "node_modules/@primeuix/styled": {
+ "version": "0.5.1",
+ "resolved": "https://registry.npmjs.org/@primeuix/styled/-/styled-0.5.1.tgz",
+ "integrity": "sha512-5Ftw/KSauDPClQ8F2qCyCUF7cIUEY4yLNikf0rKV7Vsb8zGYNK0dahQe7CChaR6M2Kn+NA2DSBSk76ZXqj6Uog==",
+ "license": "MIT",
+ "dependencies": {
+ "@primeuix/utils": "^0.5.3"
+ },
+ "engines": {
+ "node": ">=12.11.0"
+ }
+ },
+ "node_modules/@primeuix/styles": {
+ "version": "1.0.3",
+ "resolved": "https://registry.npmjs.org/@primeuix/styles/-/styles-1.0.3.tgz",
+ "integrity": "sha512-yHj/Q+fosJ1736Ty5lRbpqhKa9piou+xZPPppNHUDshq0+XhrFwDGggvPGmDAJyUIM+ChM/Nj8lPY/AwTNXAkg==",
+ "license": "MIT",
+ "dependencies": {
+ "@primeuix/styled": "^0.5.1"
+ }
+ },
+ "node_modules/@primeuix/themes": {
+ "version": "1.0.3",
+ "resolved": "https://registry.npmjs.org/@primeuix/themes/-/themes-1.0.3.tgz",
+ "integrity": "sha512-f/1qadrv5TFMHfvtVv4Y9zjrkeDP2BO/cuzbHBO9DYxKL6YBIPT9BjKec2K4Kg8PcfGm6CAvxAvICadJSWejRw==",
+ "license": "MIT",
+ "dependencies": {
+ "@primeuix/styled": "^0.5.1"
+ }
+ },
+ "node_modules/@primeuix/utils": {
+ "version": "0.5.3",
+ "resolved": "https://registry.npmjs.org/@primeuix/utils/-/utils-0.5.3.tgz",
+ "integrity": "sha512-7SGh7734wcF1/uK6RzO6Z6CBjGQ97GDHfpyl2F1G/c7R0z9hkT/V72ypDo82AWcCS7Ta07oIjDpOCTkSVZuEGQ==",
+ "license": "MIT",
+ "engines": {
+ "node": ">=12.11.0"
+ }
+ },
+ "node_modules/@primevue/auto-import-resolver": {
+ "version": "4.3.3",
+ "resolved": "https://registry.npmjs.org/@primevue/auto-import-resolver/-/auto-import-resolver-4.3.3.tgz",
+ "integrity": "sha512-CwQPlG8IzDySOwF8N0Q0rLv76awCH7SzYt+RHu1AO/HZEsdCorclIoJO6TrJYevenlhxialprRqpIV52McoRpw==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "@primevue/metadata": "4.3.3"
+ },
+ "engines": {
+ "node": ">=12.11.0"
+ }
+ },
+ "node_modules/@primevue/core": {
+ "version": "4.3.3",
+ "resolved": "https://registry.npmjs.org/@primevue/core/-/core-4.3.3.tgz",
+ "integrity": "sha512-kSkN5oourG7eueoFPIqiNX3oDT/f0I5IRK3uOY/ytz+VzTZp5yuaCN0Nt42ZQpVXjDxMxDvUhIdaXVrjr58NhQ==",
+ "license": "MIT",
+ "dependencies": {
+ "@primeuix/styled": "^0.5.0",
+ "@primeuix/utils": "^0.5.1"
+ },
+ "engines": {
+ "node": ">=12.11.0"
+ },
+ "peerDependencies": {
+ "vue": "^3.5.0"
+ }
+ },
+ "node_modules/@primevue/icons": {
+ "version": "4.3.3",
+ "resolved": "https://registry.npmjs.org/@primevue/icons/-/icons-4.3.3.tgz",
+ "integrity": "sha512-ouQaxHyeFB6MSfEGGbjaK5Qv9efS1xZGetZoU5jcPm090MSYLFtroP1CuK3lZZAQals06TZ6T6qcoNukSHpK5w==",
+ "license": "MIT",
+ "dependencies": {
+ "@primeuix/utils": "^0.5.1",
+ "@primevue/core": "4.3.3"
+ },
+ "engines": {
+ "node": ">=12.11.0"
+ }
+ },
+ "node_modules/@primevue/metadata": {
+ "version": "4.3.3",
+ "resolved": "https://registry.npmjs.org/@primevue/metadata/-/metadata-4.3.3.tgz",
+ "integrity": "sha512-R1IBTGsYsmOlAy4/dytJW699Iie9B8p8PqbIxDY0GWiMGk8O0tVBYfuCs50w0QtHqmThhLRtSS+eCSOP1ybwSg==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=12.11.0"
+ }
+ },
"node_modules/@rollup/pluginutils": {
"version": "5.1.4",
"resolved": "https://registry.npmjs.org/@rollup/pluginutils/-/pluginutils-5.1.4.tgz",
@@ -3148,6 +3244,20 @@
"url": "https://github.com/chalk/ansi-styles?sponsor=1"
}
},
+ "node_modules/anymatch": {
+ "version": "3.1.3",
+ "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.3.tgz",
+ "integrity": "sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==",
+ "dev": true,
+ "license": "ISC",
+ "dependencies": {
+ "normalize-path": "^3.0.0",
+ "picomatch": "^2.0.4"
+ },
+ "engines": {
+ "node": ">= 8"
+ }
+ },
"node_modules/arch": {
"version": "2.2.0",
"resolved": "https://registry.npmjs.org/arch/-/arch-2.2.0.tgz",
@@ -3331,6 +3441,19 @@
"tweetnacl": "^0.14.3"
}
},
+ "node_modules/binary-extensions": {
+ "version": "2.3.0",
+ "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.3.0.tgz",
+ "integrity": "sha512-Ceh+7ox5qe7LJuLHoY0feh3pHuUDHAcRUeyL2VYghZwfpkNIy/+8Ocg0a3UuSoYzavmylwuLWQOf3hl0jjMMIw==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=8"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
"node_modules/birpc": {
"version": "0.2.19",
"resolved": "https://registry.npmjs.org/birpc/-/birpc-0.2.19.tgz",
@@ -3624,6 +3747,44 @@
"node": ">= 0.8.0"
}
},
+ "node_modules/chokidar": {
+ "version": "3.6.0",
+ "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.6.0.tgz",
+ "integrity": "sha512-7VT13fmjotKpGipCW9JEQAusEPE+Ei8nl6/g4FBAmIm0GOOLMua9NDDo/DWp0ZAxCr3cPq5ZpBqmPAQgDda2Pw==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "anymatch": "~3.1.2",
+ "braces": "~3.0.2",
+ "glob-parent": "~5.1.2",
+ "is-binary-path": "~2.1.0",
+ "is-glob": "~4.0.1",
+ "normalize-path": "~3.0.0",
+ "readdirp": "~3.6.0"
+ },
+ "engines": {
+ "node": ">= 8.10.0"
+ },
+ "funding": {
+ "url": "https://paulmillr.com/funding/"
+ },
+ "optionalDependencies": {
+ "fsevents": "~2.3.2"
+ }
+ },
+ "node_modules/chokidar/node_modules/glob-parent": {
+ "version": "5.1.2",
+ "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz",
+ "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==",
+ "dev": true,
+ "license": "ISC",
+ "dependencies": {
+ "is-glob": "^4.0.1"
+ },
+ "engines": {
+ "node": ">= 6"
+ }
+ },
"node_modules/ci-info": {
"version": "4.2.0",
"resolved": "https://registry.npmjs.org/ci-info/-/ci-info-4.2.0.tgz",
@@ -3763,6 +3924,13 @@
"dev": true,
"license": "MIT"
},
+ "node_modules/confbox": {
+ "version": "0.2.2",
+ "resolved": "https://registry.npmjs.org/confbox/-/confbox-0.2.2.tgz",
+ "integrity": "sha512-1NB+BKqhtNipMsov4xI/NnhCKp9XG9NamYp5PVm9klAT0fsrNPjaFICsCFhNhwZJKNh7zB/3q8qXz0E9oaMNtQ==",
+ "dev": true,
+ "license": "MIT"
+ },
"node_modules/config-chain": {
"version": "1.1.13",
"resolved": "https://registry.npmjs.org/config-chain/-/config-chain-1.1.13.tgz",
@@ -4897,6 +5065,13 @@
"node": ">=12.0.0"
}
},
+ "node_modules/exsolve": {
+ "version": "1.0.5",
+ "resolved": "https://registry.npmjs.org/exsolve/-/exsolve-1.0.5.tgz",
+ "integrity": "sha512-pz5dvkYYKQ1AHVrgOzBKWeP4u4FRb3a6DNK2ucr0OoNwYIU4QWsJ+NM36LLzORT+z845MzKHHhpXiUF5nvQoJg==",
+ "dev": true,
+ "license": "MIT"
+ },
"node_modules/extend": {
"version": "3.0.2",
"resolved": "https://registry.npmjs.org/extend/-/extend-3.0.2.tgz",
@@ -5752,6 +5927,19 @@
"node": ">=10"
}
},
+ "node_modules/is-binary-path": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz",
+ "integrity": "sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "binary-extensions": "^2.0.0"
+ },
+ "engines": {
+ "node": ">=8"
+ }
+ },
"node_modules/is-docker": {
"version": "3.0.0",
"resolved": "https://registry.npmjs.org/is-docker/-/is-docker-3.0.0.tgz",
@@ -6570,6 +6758,24 @@
"url": "https://github.com/chalk/wrap-ansi?sponsor=1"
}
},
+ "node_modules/local-pkg": {
+ "version": "1.1.1",
+ "resolved": "https://registry.npmjs.org/local-pkg/-/local-pkg-1.1.1.tgz",
+ "integrity": "sha512-WunYko2W1NcdfAFpuLUoucsgULmgDBRkdxHxWQ7mK0cQqwPiy8E1enjuRBrhLtZkB5iScJ1XIPdhVEFK8aOLSg==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "mlly": "^1.7.4",
+ "pkg-types": "^2.0.1",
+ "quansync": "^0.2.8"
+ },
+ "engines": {
+ "node": ">=14"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/antfu"
+ }
+ },
"node_modules/locate-path": {
"version": "6.0.0",
"resolved": "https://registry.npmjs.org/locate-path/-/locate-path-6.0.0.tgz",
@@ -6873,6 +7079,38 @@
"integrity": "sha512-vKivATfr97l2/QBCYAkXYDbrIWPM2IIKEl7YPhjCvKlG3kE2gm+uBo6nEXK3M5/Ffh/FLpKExzOQ3JJoJGFKBw==",
"license": "MIT"
},
+ "node_modules/mlly": {
+ "version": "1.7.4",
+ "resolved": "https://registry.npmjs.org/mlly/-/mlly-1.7.4.tgz",
+ "integrity": "sha512-qmdSIPC4bDJXgZTCR7XosJiNKySV7O215tsPtDN9iEO/7q/76b/ijtgRu/+epFXSJhijtTCCGp3DWS549P3xKw==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "acorn": "^8.14.0",
+ "pathe": "^2.0.1",
+ "pkg-types": "^1.3.0",
+ "ufo": "^1.5.4"
+ }
+ },
+ "node_modules/mlly/node_modules/confbox": {
+ "version": "0.1.8",
+ "resolved": "https://registry.npmjs.org/confbox/-/confbox-0.1.8.tgz",
+ "integrity": "sha512-RMtmw0iFkeR4YV+fUOSucriAQNb9g8zFR52MWCtl+cCZOFRNL6zeB395vPzFhEjjn4fMxXudmELnl/KF/WrK6w==",
+ "dev": true,
+ "license": "MIT"
+ },
+ "node_modules/mlly/node_modules/pkg-types": {
+ "version": "1.3.1",
+ "resolved": "https://registry.npmjs.org/pkg-types/-/pkg-types-1.3.1.tgz",
+ "integrity": "sha512-/Jm5M4RvtBFVkKWRu2BLUTNP8/M2a+UwuAX+ae4770q1qVGtfjG+WTCupoZixokjmHiry8uI+dlY8KXYV5HVVQ==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "confbox": "^0.1.8",
+ "mlly": "^1.7.4",
+ "pathe": "^2.0.1"
+ }
+ },
"node_modules/mrmime": {
"version": "2.0.1",
"resolved": "https://registry.npmjs.org/mrmime/-/mrmime-2.0.1.tgz",
@@ -6951,6 +7189,16 @@
"node": "^14.17.0 || ^16.13.0 || >=18.0.0"
}
},
+ "node_modules/normalize-path": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz",
+ "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
"node_modules/npm-normalize-package-bin": {
"version": "3.0.1",
"resolved": "https://registry.npmjs.org/npm-normalize-package-bin/-/npm-normalize-package-bin-3.0.1.tgz",
@@ -7424,6 +7672,18 @@
}
}
},
+ "node_modules/pkg-types": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/pkg-types/-/pkg-types-2.1.0.tgz",
+ "integrity": "sha512-wmJwA+8ihJixSoHKxZJRBQG1oY8Yr9pGLzRmSsNms0iNWyHHAlZCa7mmKiFR10YPZuz/2k169JiS/inOjBCZ2A==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "confbox": "^0.2.1",
+ "exsolve": "^1.0.1",
+ "pathe": "^2.0.3"
+ }
+ },
"node_modules/postcss": {
"version": "8.5.3",
"resolved": "https://registry.npmjs.org/postcss/-/postcss-8.5.3.tgz",
@@ -7779,6 +8039,22 @@
"url": "https://github.com/sponsors/sindresorhus"
}
},
+ "node_modules/primevue": {
+ "version": "4.3.3",
+ "resolved": "https://registry.npmjs.org/primevue/-/primevue-4.3.3.tgz",
+ "integrity": "sha512-nooYVoEz5CdP3EhUkD6c3qTdRmpLHZh75fBynkUkl46K8y5rksHTjdSISiDijwTA5STQIOkyqLb+RM+HQ6nC1Q==",
+ "license": "MIT",
+ "dependencies": {
+ "@primeuix/styled": "^0.5.0",
+ "@primeuix/styles": "^1.0.0",
+ "@primeuix/utils": "^0.5.1",
+ "@primevue/core": "4.3.3",
+ "@primevue/icons": "4.3.3"
+ },
+ "engines": {
+ "node": ">=12.11.0"
+ }
+ },
"node_modules/process": {
"version": "0.11.10",
"resolved": "https://registry.npmjs.org/process/-/process-0.11.10.tgz",
@@ -7875,6 +8151,23 @@
"url": "https://github.com/sponsors/ljharb"
}
},
+ "node_modules/quansync": {
+ "version": "0.2.10",
+ "resolved": "https://registry.npmjs.org/quansync/-/quansync-0.2.10.tgz",
+ "integrity": "sha512-t41VRkMYbkHyCYmOvx/6URnN80H7k4X0lLdBMGsz+maAwrJQYB1djpV6vHrQIBE0WBSGqhtEHrK9U3DWWH8v7A==",
+ "dev": true,
+ "funding": [
+ {
+ "type": "individual",
+ "url": "https://github.com/sponsors/antfu"
+ },
+ {
+ "type": "individual",
+ "url": "https://github.com/sponsors/sxzz"
+ }
+ ],
+ "license": "MIT"
+ },
"node_modules/querystringify": {
"version": "2.2.0",
"resolved": "https://registry.npmjs.org/querystringify/-/querystringify-2.2.0.tgz",
@@ -7923,6 +8216,19 @@
"node": "^14.17.0 || ^16.13.0 || >=18.0.0"
}
},
+ "node_modules/readdirp": {
+ "version": "3.6.0",
+ "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.6.0.tgz",
+ "integrity": "sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "picomatch": "^2.2.1"
+ },
+ "engines": {
+ "node": ">=8.10.0"
+ }
+ },
"node_modules/request-progress": {
"version": "3.0.0",
"resolved": "https://registry.npmjs.org/request-progress/-/request-progress-3.0.0.tgz",
@@ -8680,6 +8986,15 @@
"integrity": "sha512-OErSiGzRa6rLiOvaipsDZvLMSpsBZ4ysB4f0VKGXUrjw2jfkJRd6kjRKV2+ZmTCNvwtvgdDam5D7w6WXsdLJZw==",
"license": "MIT"
},
+ "node_modules/tailwindcss-primeui": {
+ "version": "0.6.1",
+ "resolved": "https://registry.npmjs.org/tailwindcss-primeui/-/tailwindcss-primeui-0.6.1.tgz",
+ "integrity": "sha512-T69Rylcrmnt8zy9ik+qZvsLuRIrS9/k6rYJSIgZ1trnbEzGDDQSCIdmfyZknevqiHwpSJHSmQ9XT2C+S/hJY4A==",
+ "license": "MIT",
+ "peerDependencies": {
+ "tailwindcss": ">=3.1.0"
+ }
+ },
"node_modules/tapable": {
"version": "2.2.1",
"resolved": "https://registry.npmjs.org/tapable/-/tapable-2.2.1.tgz",
@@ -8727,6 +9042,51 @@
"dev": true,
"license": "MIT"
},
+ "node_modules/tinyglobby": {
+ "version": "0.2.13",
+ "resolved": "https://registry.npmjs.org/tinyglobby/-/tinyglobby-0.2.13.tgz",
+ "integrity": "sha512-mEwzpUgrLySlveBwEVDMKk5B57bhLPYovRfPAXD5gA/98Opn0rCDj3GtLwFvCvH5RK9uPCExUROW5NjDwvqkxw==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "fdir": "^6.4.4",
+ "picomatch": "^4.0.2"
+ },
+ "engines": {
+ "node": ">=12.0.0"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/SuperchupuDev"
+ }
+ },
+ "node_modules/tinyglobby/node_modules/fdir": {
+ "version": "6.4.4",
+ "resolved": "https://registry.npmjs.org/fdir/-/fdir-6.4.4.tgz",
+ "integrity": "sha512-1NZP+GK4GfuAv3PqKvxQRDMjdSRZjnkq7KfhlNrCNNlZ0ygQFpebfrnfnq/W7fpUnAv9aGWmY1zKx7FYL3gwhg==",
+ "dev": true,
+ "license": "MIT",
+ "peerDependencies": {
+ "picomatch": "^3 || ^4"
+ },
+ "peerDependenciesMeta": {
+ "picomatch": {
+ "optional": true
+ }
+ }
+ },
+ "node_modules/tinyglobby/node_modules/picomatch": {
+ "version": "4.0.2",
+ "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-4.0.2.tgz",
+ "integrity": "sha512-M7BAV6Rlcy5u+m6oPhAPFgJTzAioX/6B0DxyvDlo9l8+T3nLKbrczg2WLUyzd45L8RqfUMyGPzekbMvX2Ldkwg==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=12"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/jonschlinkert"
+ }
+ },
"node_modules/tinypool": {
"version": "1.0.2",
"resolved": "https://registry.npmjs.org/tinypool/-/tinypool-1.0.2.tgz",
@@ -8932,6 +9292,13 @@
"node": ">=14.17"
}
},
+ "node_modules/ufo": {
+ "version": "1.6.1",
+ "resolved": "https://registry.npmjs.org/ufo/-/ufo-1.6.1.tgz",
+ "integrity": "sha512-9a4/uxlTWJ4+a5i0ooc1rU7C7YOw3wT+UGqdeNNHWnOF9qcMBgLRS+4IYUqbczewFx4mLEig6gawh7X6mFlEkA==",
+ "dev": true,
+ "license": "MIT"
+ },
"node_modules/undici-types": {
"version": "6.19.8",
"resolved": "https://registry.npmjs.org/undici-types/-/undici-types-6.19.8.tgz",
@@ -8962,6 +9329,100 @@
"node": ">= 10.0.0"
}
},
+ "node_modules/unplugin": {
+ "version": "2.3.2",
+ "resolved": "https://registry.npmjs.org/unplugin/-/unplugin-2.3.2.tgz",
+ "integrity": "sha512-3n7YA46rROb3zSj8fFxtxC/PqoyvYQ0llwz9wtUPUutr9ig09C8gGo5CWCwHrUzlqC1LLR43kxp5vEIyH1ac1w==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "acorn": "^8.14.1",
+ "picomatch": "^4.0.2",
+ "webpack-virtual-modules": "^0.6.2"
+ },
+ "engines": {
+ "node": ">=18.12.0"
+ }
+ },
+ "node_modules/unplugin-utils": {
+ "version": "0.2.4",
+ "resolved": "https://registry.npmjs.org/unplugin-utils/-/unplugin-utils-0.2.4.tgz",
+ "integrity": "sha512-8U/MtpkPkkk3Atewj1+RcKIjb5WBimZ/WSLhhR3w6SsIj8XJuKTacSP8g+2JhfSGw0Cb125Y+2zA/IzJZDVbhA==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "pathe": "^2.0.2",
+ "picomatch": "^4.0.2"
+ },
+ "engines": {
+ "node": ">=18.12.0"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sxzz"
+ }
+ },
+ "node_modules/unplugin-utils/node_modules/picomatch": {
+ "version": "4.0.2",
+ "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-4.0.2.tgz",
+ "integrity": "sha512-M7BAV6Rlcy5u+m6oPhAPFgJTzAioX/6B0DxyvDlo9l8+T3nLKbrczg2WLUyzd45L8RqfUMyGPzekbMvX2Ldkwg==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=12"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/jonschlinkert"
+ }
+ },
+ "node_modules/unplugin-vue-components": {
+ "version": "28.5.0",
+ "resolved": "https://registry.npmjs.org/unplugin-vue-components/-/unplugin-vue-components-28.5.0.tgz",
+ "integrity": "sha512-o7fMKU/uI8NiP+E0W62zoduuguWqB0obTfHFtbr1AP2uo2lhUPnPttWUE92yesdiYfo9/0hxIrj38FMc1eaySg==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "chokidar": "^3.6.0",
+ "debug": "^4.4.0",
+ "local-pkg": "^1.1.1",
+ "magic-string": "^0.30.17",
+ "mlly": "^1.7.4",
+ "tinyglobby": "^0.2.12",
+ "unplugin": "^2.3.2",
+ "unplugin-utils": "^0.2.4"
+ },
+ "engines": {
+ "node": ">=14"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/antfu"
+ },
+ "peerDependencies": {
+ "@babel/parser": "^7.15.8",
+ "@nuxt/kit": "^3.2.2",
+ "vue": "2 || 3"
+ },
+ "peerDependenciesMeta": {
+ "@babel/parser": {
+ "optional": true
+ },
+ "@nuxt/kit": {
+ "optional": true
+ }
+ }
+ },
+ "node_modules/unplugin/node_modules/picomatch": {
+ "version": "4.0.2",
+ "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-4.0.2.tgz",
+ "integrity": "sha512-M7BAV6Rlcy5u+m6oPhAPFgJTzAioX/6B0DxyvDlo9l8+T3nLKbrczg2WLUyzd45L8RqfUMyGPzekbMvX2Ldkwg==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=12"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/jonschlinkert"
+ }
+ },
"node_modules/untildify": {
"version": "4.0.0",
"resolved": "https://registry.npmjs.org/untildify/-/untildify-4.0.0.tgz",
@@ -9668,6 +10129,13 @@
"node": ">=12"
}
},
+ "node_modules/webpack-virtual-modules": {
+ "version": "0.6.2",
+ "resolved": "https://registry.npmjs.org/webpack-virtual-modules/-/webpack-virtual-modules-0.6.2.tgz",
+ "integrity": "sha512-66/V2i5hQanC51vBQKPH4aI8NMAcBW59FVBs+rC7eGHupMyfn34q7rZIE+ETlJ+XTevqfUhVVBgSUNSW2flEUQ==",
+ "dev": true,
+ "license": "MIT"
+ },
"node_modules/whatwg-encoding": {
"version": "3.1.1",
"resolved": "https://registry.npmjs.org/whatwg-encoding/-/whatwg-encoding-3.1.1.tgz",
diff --git a/front/package.json b/front/package.json
index 73e6e48f..d321fada 100644
--- a/front/package.json
+++ b/front/package.json
@@ -17,15 +17,19 @@
"format": "prettier --write src/"
},
"dependencies": {
+ "@primeuix/themes": "^1.0.3",
"@tailwindcss/vite": "^4.0.17",
"maplibre-gl": "^5.2.0",
"pinia": "^3.0.0",
+ "primevue": "^4.3.3",
+ "tailwindcss-primeui": "^0.6.1",
"vue": "^3.4.29",
"vue-router": "^4.3.3"
},
"devDependencies": {
"@babel/eslint-parser": "^7.25.9",
"@pinia/testing": "^1.0.0",
+ "@primevue/auto-import-resolver": "^4.3.3",
"@rushstack/eslint-patch": "^1.8.0",
"@tsconfig/node20": "^20.1.4",
"@types/jsdom": "^21.1.7",
@@ -50,6 +54,7 @@
"start-server-and-test": "^2.0.4",
"tailwindcss": "^4.0.17",
"typescript": "5.6.3",
+ "unplugin-vue-components": "^28.5.0",
"vite": "^5.3.1",
"vite-plugin-vue-devtools": "^7.3.1",
"vitest": "^3.0.5",
diff --git a/front/public/fonts/BricolageGrotesque-Regular.otf b/front/public/fonts/BricolageGrotesque-Regular.otf
deleted file mode 100644
index 01f4b909..00000000
Binary files a/front/public/fonts/BricolageGrotesque-Regular.otf and /dev/null differ
diff --git a/front/public/fonts/IBMPlexMono-Regular.ttf b/front/public/fonts/IBMPlexMono-Regular.ttf
new file mode 100644
index 00000000..81ca3dcc
Binary files /dev/null and b/front/public/fonts/IBMPlexMono-Regular.ttf differ
diff --git a/front/src/components/FeedbackPopin.vue b/front/src/components/FeedbackPopin.vue
index e2f3d985..fc5dd3f4 100644
--- a/front/src/components/FeedbackPopin.vue
+++ b/front/src/components/FeedbackPopin.vue
@@ -1,52 +1,31 @@
-
- Partagez-nous vos impressions pour nous aider à améliorer le site :Votre avis compte !
-
-
-