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 @@ - - - diff --git a/front/src/components/NavbarComponent.vue b/front/src/components/NavbarComponent.vue deleted file mode 100644 index 23b79aa1..00000000 --- a/front/src/components/NavbarComponent.vue +++ /dev/null @@ -1,84 +0,0 @@ - - - - - diff --git a/front/src/components/forms/FeedbackForm.vue b/front/src/components/forms/FeedbackForm.vue index 85d6b2df..a9427612 100644 --- a/front/src/components/forms/FeedbackForm.vue +++ b/front/src/components/forms/FeedbackForm.vue @@ -1,4 +1,4 @@ -