diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml index e634b88c0..bc9bdec72 100644 --- a/.github/workflows/release.yml +++ b/.github/workflows/release.yml @@ -36,7 +36,7 @@ jobs: images: ${{ env.REGISTRY }}/${{ env.IMAGE_NAME }}/geotrek-rando-builder - name: Build and push Docker image - uses: docker/build-push-action@v5 + uses: docker/build-push-action@v6 with: context: frontend file: ./frontend/Dockerfile @@ -45,7 +45,7 @@ jobs: labels: ${{ steps.meta.outputs.labels }} - name: Build and push Docker image builder - uses: docker/build-push-action@v5 + uses: docker/build-push-action@v6 with: context: frontend file: ./frontend/Dockerfile diff --git a/docs/changelog.md b/docs/changelog.md index f0adc511e..56712fe41 100644 --- a/docs/changelog.md +++ b/docs/changelog.md @@ -1,5 +1,35 @@ # Changelog +## 3.22.0 (2024-09-17) + +**✨ Improvements** + +- Add annotation category (label and picto) to HD viewpoint map tooltip (#1229) +- Add "Display in HD pictures" button at the map bottom if the details page contains at least one HD viewpoint (#1229) +- Refacto to use the leaflet locate.control in a more “react” way (#1227 #1219) +- Refacto Leaflet CustomControl wrapper (#1237 #1219) +- Refacto sheet component (#1238 #1219) +- Prevent map zooming when scrolling on the elevation profile (#1228) +- Remove styled-component and handle styling only with tailwindCSS (#1147) + +**🔧 Maintenance** + +- Bump node from 18 to 20 (#1021) +- Bump @types/node from 16.9.4 to 22.5.4 in /frontend (#1244) +- Bump @next/eslint-plugin-next and eslint-config-next packages to 14.2.10 (#1217) +- Bump @testing-libray packages(#1218) +- Bump leaflet.locatecontrol from 0.74.0 to 0.81.1 (#1227) +- Install @radix-ui/react-dialog package +- Install class-variance-authority package +- Install tailwindcss-animate package +- Bump tailwind-merge from 2.2.2 to 2.5.2 +- Bump docker/build-push-action from 5 to 6 +- Remove react-burger-menu package + +**🐛 Fixes** + +- Fix display of mobile menu sub-filters (#1006 #1235) + ## 3.21.1 (2024-07-29) **🐛 Fixes** diff --git a/docs/development.md b/docs/development.md index 7e94e256b..d86437515 100644 --- a/docs/development.md +++ b/docs/development.md @@ -4,7 +4,7 @@ Installation in development: ## Prerequisite -- You need to use a node version equal or above 18 +- You need to use a node version equal or above 20 - Use nvm and then: ```bash diff --git a/docs/installation.md b/docs/installation.md index 4cfd4193e..d50293fce 100644 --- a/docs/installation.md +++ b/docs/installation.md @@ -11,13 +11,14 @@ If you follow the [Install without Docker (not recommended)](#install-without-do ### Sentry To report application crashes and any errors encountered by users, you can use [Sentry](https://sentry.io/). -In the Sentry backoffice, create your project and copy the DSN key which you can paste into the `SENTRY_DSN` environment variable. +In the Sentry backoffice, create your project and copy the DSN key which you can paste into the `SENTRY_DSN` environment variable. # Install with Docker (recommended) ## Global process Before starting the technical installation, here is an overview of the global process: + - Developers are working on code source of this repository where you will also find the documentation, issues and releases - Once they have a new version of the application ready, they will release it, build a Docker image of this new version and push it in the [packages repository](https://github.com/orgs/GeotrekCE/packages/container/package/geotrek-rando-v3%2Fgeotrek-rando) - If required, they will also make changes to the docker-compose file and customization template in the [installer dedicated repository](https://github.com/GeotrekCE/Geotrek-rando-v3-installer) and release a new version of it @@ -103,6 +104,7 @@ sudo certbot --nginx ## Upgrade Geotrek-rando version To find out the current Geotrek-rando version of your running container, you can execute (by renaming `rando-nodeserver-1` with the name of your container): + ``` docker exec -t -i rando-nodeserver-1 node -p "require('./package.json').version" ``` @@ -147,7 +149,7 @@ Install nodejs: sudo apt update sudo apt -y upgrade sudo apt -y install curl dirmngr apt-transport-https lsb-release ca-certificates -curl -sL https://deb.nodesource.com/setup_17.x | sudo -E bash - +curl -sL https://deb.nodesource.com/setup_20.x | sudo -E bash - sudo apt -y install nodejs ``` @@ -164,6 +166,7 @@ cd Geotrek-rando-v3/frontend/ ``` Install dependencies + ```sh yarn ``` diff --git a/frontend/.nvmrc b/frontend/.nvmrc index 9dfef4721..016e34baf 100644 --- a/frontend/.nvmrc +++ b/frontend/.nvmrc @@ -1 +1 @@ -v18.12.0 +v20.17.0 diff --git a/frontend/Dockerfile b/frontend/Dockerfile index 4c504edfe..83ae8a859 100644 --- a/frontend/Dockerfile +++ b/frontend/Dockerfile @@ -1,5 +1,5 @@ # Install dependencies only when needed -FROM node:18-alpine AS deps +FROM node:20-alpine AS deps # Check https://github.com/nodejs/docker-node/tree/b4117f9333da4138b03a546ec926ef50a31506c3#nodealpine to understand why libc6-compat might be needed. RUN apk add --no-cache libc6-compat g++ gcc libgcc libstdc++ linux-headers make python3 WORKDIR /app @@ -7,13 +7,13 @@ COPY package.json yarn.lock ./ RUN yarn install --frozen-lockfile # Rebuild the source code only when needed -FROM node:18-alpine AS builder +FROM node:20-alpine AS builder WORKDIR /app COPY . . COPY --from=deps /app/node_modules ./node_modules RUN yarn build -FROM node:18-alpine AS builder_optim +FROM node:20-alpine AS builder_optim WORKDIR /app COPY --from=builder /app/node_modules ./node_modules COPY --from=builder /app/package.json ./package.json @@ -21,7 +21,7 @@ COPY --from=builder /app/yarn.lock ./yarn.lock RUN yarn install --production --ignore-scripts --prefer-offline # Production image, copy all the files and run next -FROM node:18-alpine AS runner +FROM node:20-alpine AS runner WORKDIR /app ENV NODE_ENV production diff --git a/frontend/docs/design.md b/frontend/docs/design.md index 60d0100e7..8debe772c 100644 --- a/frontend/docs/design.md +++ b/frontend/docs/design.md @@ -1,31 +1,21 @@ ## 🏞 Design -### Styled Components 💅 - -Follow the code principles when using styled-components - -- [Do not use className and classes](https://github.com/theodo/theodo-code-principles/pull/18/files) - ### 💠 CSS -#### 🌀 Reset - -There is a [`reset.css`](../public/reset.css) file that removes basic style attached to tags. The file is based on [meyerweb's example](https://meyerweb.com/eric/tools/css/reset/) and enriched by experience. - -#### 🌈 Stylesheet +#### 🌈 Tailwind -[`stylesheet.ts`](../src/stylesheet.ts) is where you should declare all style properties used on this app. +[`tailwind.config.js`](../../tailwind.config.js) is where you should declare all style properties used on this app. - colors -- font properties (size, font-faimly, boldness, line height) -- spacing measurement unit (ex: all margin, padding must be multiple of 8px) +- font properties (size, font-family, boldness, line height) +- spacing measurement unit (ex: all margin, padding must be multiple of 4px) - screen size breakpoints - shades - ... This way, you can manage the app look and feel from one file instead of several, and preserve consistency. -Import the style variables from the stylesheet to use them in your components. +Import the style variables from the `tailwind.config.js` to use them in your components. #### 🔍 Linter diff --git a/frontend/docs/quick-start.md b/frontend/docs/quick-start.md index 8a3f4524e..1644da02a 100644 --- a/frontend/docs/quick-start.md +++ b/frontend/docs/quick-start.md @@ -2,33 +2,35 @@ Useful commands: -- `npm install` to install dependencies +- `yarn` to install dependencies -- `npm run start` to start a local dev-server +- `yarn start` to start a local dev-server -- `npm run build` to build a minified version of the code, for production use! +- `yarn build` to build a minified version of the code, for production use! -- `npm run dev` to use a development server which will take care of live-reloading and browser sync. +- `yarn dev` to use a development server which will take care of live-reloading and browser sync. -- `npm run test` to launch tests in watch mode +- `yarn lint` to analyse source code to flag programming errors -- `npm run e2e` to launch cypress end-to-end tests (after ```npm run dev```) +- `yarn tsc` to compile the project defined by `tsconfig.json` -- * `npm run generate` to generate a new component or a new page. You will be prompted the following questions: +- `yarn test` to launch tests in watch mode - * Do you want a page or a component? - * What is the name of the component? - * What is the type of the component? _Choose between [PureComponents](https://codeburst.io/when-to-use-component-or-purecomponent-a60cfad01a81), Components and stateless functions for your React component._ - * Do you want to connect your component to the Redux store? _Use Redux to handle your global state._ - * Do you want to use react-intl? _Use [react-intl](https://github.com/yahoo/react-intl/wiki/Components) to handle the translations within your application._ - * Do you want to use styled-components? _Use [styled-components](https://github.com/styled-components/styled-components) to easily style your components using a CSS syntax._ - * Do you want snapshot tests? _Snapshot tests allow you to easily lock the comportment of a component. +- `yarn e2e` to launch cypress end-to-end tests (after `yarn dev`) +- - `yarn generate` to generate a new component or a new page. You will be prompted the following questions: + + - Do you want a page or a component? + - What is the name of the component? + - What is the type of the component? _Choose between [PureComponents](https://codeburst.io/when-to-use-component-or-purecomponent-a60cfad01a81), Components and stateless functions for your React component._ + - Do you want to connect your component to the Redux store? _Use Redux to handle your global state._ + - Do you want to use react-intl? _Use [react-intl](https://github.com/yahoo/react-intl/wiki/Components) to handle the translations within your application._ + - Do you want snapshot tests? \_Snapshot tests allow you to easily lock the comportment of a component. Other useful commands: -- `npm run lint:fix` to automatically fix linting errors +- `yarn lint:fix` to automatically fix linting errors -- `npm run test:coverage` to generate the coverage +- `yarn test:coverage` to generate the coverage -For more see [create-react-app documentation](https://github.com/facebookincubator/create-react-app) +- `yarn prepush` is a shortcut of `yarn lint && yarn tsc && yarn test` diff --git a/frontend/docs/typescript.md b/frontend/docs/typescript.md index 1a7f144b1..23a910c66 100644 --- a/frontend/docs/typescript.md +++ b/frontend/docs/typescript.md @@ -23,7 +23,6 @@ npm install --save-dev @types/react-router @types/react-router-dom @types/react-test-renderer - @types/styled-components @types/superagent @types/webpack-env ``` diff --git a/frontend/next.config.js b/frontend/next.config.js index 126f1ad95..e00d29f5d 100644 --- a/frontend/next.config.js +++ b/frontend/next.config.js @@ -59,9 +59,6 @@ const nextConfig = { disableClientWebpackPlugin: true, //process.env.SENTRY_DSN === undefined, }, publicRuntimeConfig: getAllConfigs, - compiler: { - styledComponents: true, - }, images: { remotePatterns: [ { @@ -71,6 +68,5 @@ const nextConfig = { }, }; -module.exports = async (phase, { defaultConfig }) => ( - withPlugins(plugins, nextConfig)(phase, { ...defaultConfig, ...nextConfig }) -); +module.exports = async (phase, { defaultConfig }) => + withPlugins(plugins, nextConfig)(phase, { ...defaultConfig, ...nextConfig }); diff --git a/frontend/package.json b/frontend/package.json index 003d2d759..46339a7b8 100644 --- a/frontend/package.json +++ b/frontend/package.json @@ -1,6 +1,6 @@ { "name": "geotrek-rando-frontend", - "version": "3.21.1", + "version": "3.22.0", "private": true, "scripts": { "debug": "NODE_OPTIONS='--inspect' next ./src", @@ -37,6 +37,7 @@ "@20tab/react-leaflet-resetview": "^1.0.1", "@hcaptcha/react-hcaptcha": "^1.4.4", "@makina-corpus/rando3d": "^1.3.3", + "@radix-ui/react-dialog": "^1.1.1", "@raruto/leaflet-elevation": "1.7.0", "@react-hook/resize-observer": "^1.2.6", "@sentry/nextjs": "^7.12.1", @@ -45,6 +46,7 @@ "@zeit/next-source-maps": "^0.0.4-canary.1", "autoprefixer": "^10.4.14", "axios": "0.25.0", + "class-variance-authority": "^0.7.0", "compression": "^1.7.4", "cypress": "^13.6.3", "debounce": "^1.2.1", @@ -56,7 +58,7 @@ "leaflet": "^1.7.1", "leaflet-boundary-canvas": "^1.0.0", "leaflet-rastercoords": "^1.0.5", - "leaflet.locatecontrol": "0.74.0", + "leaflet.locatecontrol": "^0.81.1", "leaflet.offline": "^3.0.1", "next": "^13.1.6", "next-compose-plugins": "^2.2.1", @@ -65,7 +67,6 @@ "postcss": "8.3.6", "react": "^18.2.0", "react-accessible-accordion": "^5.0.0", - "react-burger-menu": "^3.0.9", "react-country-flag": "^3.0.2", "react-dom": "^18.2.0", "react-infinite-scroll-component": "6.1.0", @@ -82,10 +83,10 @@ "slick-carousel": "^1.8.1", "store": "^2.0.12", "striptags": "^3.2.0", - "styled-components": "^5.3.6", "svgo": "^3.0.2", - "tailwind-merge": "^2.2.2", + "tailwind-merge": "^2.5.2", "tailwindcss": "^3.4.1", + "tailwindcss-animate": "^1.0.7", "ts-node": "^10.9.1", "typesafe-actions": "^5.1.0", "wait-on": "6.0.0" @@ -93,15 +94,15 @@ "devDependencies": { "@accessible/accordion": "^2.0.0", "@next/bundle-analyzer": "^12.2.5", - "@next/eslint-plugin-next": "^14.1.1", - "@testing-library/jest-dom": "^5.16.5", - "@testing-library/react": "^13.4.0", + "@next/eslint-plugin-next": "^14.2.10", + "@testing-library/dom": "^10.4.0", + "@testing-library/jest-dom": "^6.4.8", + "@testing-library/react": "^16.0.0", "@types/debounce": "^1.2.1", "@types/jest": "27.0.2", "@types/leaflet": "1.7.5", - "@types/node": "16.9.4", + "@types/node": "22.5.4", "@types/react": "^18.0.25", - "@types/react-burger-menu": "2.8.7", "@types/react-dom": "^18.0.9", "@types/react-leaflet": "2.8.2", "@types/react-leaflet-markercluster": "^2.0.0", @@ -109,15 +110,15 @@ "@types/react-slick": "^0.23.10", "@types/screenfull": "^4.1.0", "@types/store": "^2.0.2", - "@types/styled-components": "5.1.14", "eslint": "^8.57.0", - "eslint-config-next": "^14.1.1", + "eslint-config-next": "^14.2.10", "eslint-config-prettier": "^9.1.0", "eslint-plugin-jest-dom": "^5.1.0", "eslint-plugin-testing-library": "^6.2.0", "isomorphic-fetch": "^3.0.0", "jest": "28", "jest-environment-jsdom": "28", + "next-router-mock": "^0.9.13", "next-server": "^9.0.5", "nock": "13.1.3", "prettier": "^3.2.5", @@ -125,9 +126,7 @@ "stylelint": "13.13.1", "stylelint-config-prettier": "^8.0.2", "stylelint-config-standard": "22.0.0", - "stylelint-config-styled-components": "^0.1.1", "stylelint-declaration-strict-value": "1.7.12", - "stylelint-processor-styled-components": "^1.10.0", "typescript": "^5.3.3", "typescript-eslint": "^7.1.0" }, diff --git a/frontend/scripts/generators/component/component.pure.tsx.hbs b/frontend/scripts/generators/component/component.pure.tsx.hbs index b960810cb..036f80ca7 100644 --- a/frontend/scripts/generators/component/component.pure.tsx.hbs +++ b/frontend/scripts/generators/component/component.pure.tsx.hbs @@ -1,15 +1,8 @@ -import React, { PureComponent } from 'react'; +import { PureComponent } from 'react'; {{#if wantMessages}} import { intlShape, FormattedMessage } from 'react-intl'; {{/if}} -{{#unless wantStyledComponents}} -import './{{ properCase name }}.style.css'; -{{/unless}} -{{#if wantStyledComponents}} -import Styled{{ properCase name }} from './{{ properCase name }}.style'; -{{/if}} - interface IProps { {{#if wantMessages}} intl: intlShape, @@ -19,21 +12,11 @@ interface IProps { class {{ properCase name }} extends PureComponent { render() { return ( - {{#unless wantStyledComponents}} -
- {{/unless}} - {{#if wantStyledComponents}} - - {{/if}} +
{{#if wantMessages}} {{/if}} - {{#unless wantStyledComponents}}
- {{/unless}} - {{#if wantStyledComponents}} -
- {{/if}} ); } } diff --git a/frontend/scripts/generators/component/component.stateless.tsx.hbs b/frontend/scripts/generators/component/component.stateless.tsx.hbs index 35c33e098..8848587d1 100644 --- a/frontend/scripts/generators/component/component.stateless.tsx.hbs +++ b/frontend/scripts/generators/component/component.stateless.tsx.hbs @@ -1,14 +1,7 @@ -import React from 'react'; {{#if wantMessages}} import { intlShape, FormattedMessage } from 'react-intl'; {{/if}} -{{#unless wantStyledComponents}} -import './{{ properCase name }}.style.css'; -{{/unless}} -{{#if wantStyledComponents}} -import Styled{{ properCase name }} from './{{ properCase name }}.style'; -{{/if}} interface IProps { {{#if wantMessages}} @@ -18,21 +11,11 @@ interface IProps { const {{ properCase name }} = React.memo(props => { return ( - {{#unless wantStyledComponents}} -
- {{/unless}} - {{#if wantStyledComponents}} - - {{/if}} +
{{#if wantMessages}} {{/if}} - {{#unless wantStyledComponents}}
- {{/unless}} - {{#if wantStyledComponents}} -
- {{/if}} ); }; diff --git a/frontend/scripts/generators/component/component.tsx.hbs b/frontend/scripts/generators/component/component.tsx.hbs index c89214888..dbeb5a484 100644 --- a/frontend/scripts/generators/component/component.tsx.hbs +++ b/frontend/scripts/generators/component/component.tsx.hbs @@ -1,15 +1,8 @@ -import React, { Component } from 'react'; +import { Component } from 'react'; {{#if wantMessages}} import { intlShape, FormattedMessage } from 'react-intl'; {{/if}} -{{#unless wantStyledComponents}} -import './{{ properCase name }}.style.css'; -{{/unless}} -{{#if wantStyledComponents}} -import Styled{{ properCase name }} from './{{ properCase name }}.style'; -{{/if}} - interface IProps { {{#if wantMessages}} intl: intlShape, @@ -19,21 +12,11 @@ interface IProps { class {{ properCase name }} extends Component { render() { return ( - {{#unless wantStyledComponents}} -
- {{/unless}} - {{#if wantStyledComponents}} - - {{/if}} +
{{#if wantMessages}} {{/if}} - {{#unless wantStyledComponents}}
- {{/unless}} - {{#if wantStyledComponents}} -
- {{/if}} ); } } diff --git a/frontend/scripts/generators/component/index.js b/frontend/scripts/generators/component/index.js index c160bf640..31e9e1788 100644 --- a/frontend/scripts/generators/component/index.js +++ b/frontend/scripts/generators/component/index.js @@ -40,24 +40,12 @@ module.exports = { default: 'PureComponent', choices: () => ['PureComponent', 'Component', 'Stateless'], }, - { - type: 'confirm', - name: 'wantConnect', - default: true, - message: 'Do you want to connect your component to redux?', - }, { type: 'confirm', name: 'wantMessages', default: true, message: 'Do you want to use react-intl?', }, - { - type: 'confirm', - name: 'wantStyledComponents', - default: true, - message: 'Do you want to use styled-components?', - }, { type: 'confirm', name: 'wantSnapshotTests', @@ -67,7 +55,6 @@ module.exports = { ], actions: data => { let componentTemplate; - const styleExtension = data.wantStyledComponents ? 'ts' : 'css'; const componentType = data.componentType === 'Component' ? 'components' : 'pages'; switch (data.component) { @@ -99,13 +86,6 @@ module.exports = { abortOnFail: true, data, }, - { - type: 'add', - path: `../../src/${componentType}/{{properCase name}}/{{properCase name}}.style.${styleExtension}`, - templateFile: `./component/style.${styleExtension}.hbs`, - abortOnFail: true, - data, - }, { type: 'add', path: `../../src/${componentType}/{{properCase name}}/index.ts`, @@ -115,16 +95,6 @@ module.exports = { }, ]; - if (data.wantConnect) { - actions.push({ - type: 'add', - path: `../../src/${componentType}/{{properCase name}}/{{properCase name}}.wrap.tsx`, - templateFile: './component/wrap.tsx.hbs', - abortOnFail: true, - data, - }); - } - if (data.wantSnapshotTests) { actions.push({ type: 'add', diff --git a/frontend/scripts/generators/component/index.ts.hbs b/frontend/scripts/generators/component/index.ts.hbs index 09ac54521..e307cf894 100644 --- a/frontend/scripts/generators/component/index.ts.hbs +++ b/frontend/scripts/generators/component/index.ts.hbs @@ -1,6 +1 @@ -{{#unless wantConnect}} -export { default } from './{{ properCase name }}'; -{{/unless}} -{{#if wantConnect}} -export { default } from './{{ properCase name }}.wrap'; -{{/if}} +export { default } from './{{properCase name}}'; diff --git a/frontend/scripts/generators/component/style.css.hbs b/frontend/scripts/generators/component/style.css.hbs deleted file mode 100644 index 859c7eb06..000000000 --- a/frontend/scripts/generators/component/style.css.hbs +++ /dev/null @@ -1,3 +0,0 @@ -.{{ dashCase name }}-container { - display: flex; -} diff --git a/frontend/scripts/generators/component/style.ts.hbs b/frontend/scripts/generators/component/style.ts.hbs deleted file mode 100644 index 59a414bbc..000000000 --- a/frontend/scripts/generators/component/style.ts.hbs +++ /dev/null @@ -1,7 +0,0 @@ -import styled from 'styled-components'; - -const Styled{{ properCase name }} = styled.div` - display: flex; -`; - -export default Styled{{ properCase name }}; diff --git a/frontend/scripts/generators/component/wrap.tsx.hbs b/frontend/scripts/generators/component/wrap.tsx.hbs deleted file mode 100644 index f10240895..000000000 --- a/frontend/scripts/generators/component/wrap.tsx.hbs +++ /dev/null @@ -1,23 +0,0 @@ -import { connect } from 'react-redux'; -{{#if wantMessages}} -import { injectIntl } from 'react-intl'; -{{/if}} - -import {{ properCase name }} from './{{ properCase name }}'; - -const mapStateToProps = (state: Store): {{ properCase name }}Store => ({}); - -const mapDispatchToProps = (dispatch: Dispatch) => { - return { - editThisFunction() {}, - }; -}; - -export default connect(mapStateToProps, mapDispatchToProps)( - {{#if wantMessages}} - injectIntl({{ properCase name }}), - {{/if}} - {{#unless wantMessages}} - {{ properCase name }}, - {{/unless}} -); diff --git a/frontend/src/components/3D/3D.style.ts b/frontend/src/components/3D/3D.style.ts deleted file mode 100644 index 9cc9c67a4..000000000 --- a/frontend/src/components/3D/3D.style.ts +++ /dev/null @@ -1,62 +0,0 @@ -import styled from 'styled-components'; -import { colorPalette } from 'stylesheet'; - -export const Wrapper = styled.div` - width: 90vw; - height: 90vh; - background-color: ${colorPalette.greyDarkColored}; - background-image: url(/images/3d/background.jpg); - background-size: 100% 100%; -`; -export const Control = styled.div` - background-color: rgba(255, 255, 255, 0.2); - border-radius: 0 0 0.35em 0.35em; -`; - -export const Camera = styled.ul` - background-color: rgba(255, 255, 255, 0.2); - border-radius: 0.35em 0 0 0.35em; -`; - -export const CameraItem = styled.li` - border-left: 1px solid transparent; - border-bottom: solid 1px rgba(255, 255, 255, 0.2); - &.camera--disabled { - cursor: default; - opacity: 0.4; - } - &.camera--selected { - cursor: auto; - border-left-color: white; - } - &:last-child { - border-bottom: none; - } -`; - -export const LoaderOverlay = styled.div` - background-color: rgba(255, 255, 255, 0.2); -`; - -export const PoiSide = styled.div` - background-color: rgba(20, 20, 20, 0.8); - top: 0; - left: -100%; - width: 24rem; - height: 100%; - transition: left 0.3s ease-out; - &.opened { - left: 0; - } -`; - -export const Poi = styled.div` - background-color: rgba(255, 255, 255, 0.2); - position: absolute; - width: auto; - height: auto; - padding: 2px; - border-radius: 0.35em; - text-align: center; - display: none; -`; diff --git a/frontend/src/components/3D/Interface.tsx b/frontend/src/components/3D/Interface.tsx index 884e24c93..aeedc0e30 100644 --- a/frontend/src/components/3D/Interface.tsx +++ b/frontend/src/components/3D/Interface.tsx @@ -1,6 +1,5 @@ import Image from 'next/image'; import { MessageFormatElement, useIntl } from 'react-intl'; -import { Camera, CameraItem, Control } from './3D.style'; const getControls = (t: Record | Record) => [ { @@ -68,9 +67,9 @@ const Interface = () => { return (
{controls.map(({ control, title, steps }) => ( -
))} - +
    {controls.map(({ control, cameraTitle }) => ( - - + ))} - +
= ({ {!isAvailableWebGL && } {isAvailableWebGL && ( - +
{isLoading && ( - +
- +
)} - +

- - - - +
+
+
+
)} ); diff --git a/frontend/src/components/Accessibility/index.tsx b/frontend/src/components/Accessibility/index.tsx index 893846904..c6b034a44 100644 --- a/frontend/src/components/Accessibility/index.tsx +++ b/frontend/src/components/Accessibility/index.tsx @@ -2,13 +2,10 @@ import { SmallCarousel } from 'components/Carousel'; import ImageWithLegend from 'components/ImageWithLegend'; import { RemoteIconInformation } from 'components/Information/RemoteIconInformation'; import { Modal } from 'components/Modal'; -import { HtmlText } from 'components/pages/details/utils'; import parse from 'html-react-parser'; import { AccessibilityAttachment, Details } from 'modules/details/interface'; import { getGlobalConfig } from 'modules/utils/api.config'; import { FormattedMessage } from 'react-intl'; -import styled, { css } from 'styled-components'; -import { desktopOnly } from 'stylesheet'; import PhoneIcon from './PhoneIcon'; interface Props { @@ -34,186 +31,121 @@ const Accessibility: React.FC = ({ details, language }) => { return (
{details.disabledInfrastructure && ( - {parse(details.disabledInfrastructure)} +
{parse(details.disabledInfrastructure)}
)} {details.accessibilities && details.accessibilities.length > 0 && (
{details.accessibilities .filter(e => e) .map((accessibility, i) => ( - {accessibility.name} - + ))}
)} - {details.accessbilityLevel && ( -
- - - {' '} - : {details.accessbilityLevel.name[language]} -
- )} - - {accessibilityCodeNumber && ( -
- - - {' '} - : - - - {accessibilityCodeNumber} - -
- )} - - {details.attachmentsAccessibility && - ['slope', 'width', 'signage'] - .filter(k => details[`accessibility_${k}` as keyof Details]) - .map(k => { - let attachments = details.attachmentsAccessibility.filter( - a => a.info_accessibility === k, - ); - if (attachments.length === 0) { - attachments = [ - { - url: getGlobalConfig().fallbackImageUri, - } as AccessibilityAttachment, - ]; - } - - return ( -
- {shouldPictureRowBeDisplayed && ( - - {({ isFullscreen, toggleFullscreen }) => ( -
- - {attachments.map((attachment, index) => ( - - ))} - -
- )} -
- )} - -

- : -

-
- - {parse(details[`accessibility_${k}` as keyof Details] as string)} - +
+ {details.accessbilityLevel && ( +
+
+ +
{' '} + :
{details.accessbilityLevel.name[language]}
+
+ )} + {accessibilityCodeNumber && ( + + )} +
+ {details.attachmentsAccessibility && + ['slope', 'width', 'signage'] + .filter(k => details[`accessibility_${k}` as keyof Details]) + .map(k => { + let attachments = details.attachmentsAccessibility.filter( + a => a.info_accessibility === k, + ); + if (attachments.length === 0) { + attachments = [ + { + url: getGlobalConfig().fallbackImageUri, + } as AccessibilityAttachment, + ]; + } + + return ( +
+ {shouldPictureRowBeDisplayed && ( + + {({ isFullscreen, toggleFullscreen }) => ( +
+ + {attachments.map((attachment, index) => ( + + ))} + +
+ )} +
+ )} +
+ : +
+
+
+ {parse(details[`accessibility_${k}` as keyof Details] as string)} +
+
+ ); + })} +
+ {['accessibility_covering', 'accessibility_exposure', 'accessibility_advice'] + .filter(k => details[k as keyof Details]) + .map(k => ( +
+
+ : +
+
+
+ {parse(details[k as keyof Details] as string)}
- ); - })} - - {['accessibility_covering', 'accessibility_exposure', 'accessibility_advice'] - .filter(k => details[k as keyof Details]) - .map(k => ( - -

- : -

-
- {parse(details[k as keyof Details] as string)} +
- - ))} + ))} +
); }; -const StyledRemoteIconInformation = styled(RemoteIconInformation)` - * { - font-size: 16px; - } -`; - -const Section = styled.div` - display: flex; - align-items: center; - margin-top: 10px; - - & strong { - font-weight: bold; - } -`; - -const Row = styled.div` - margin-top: 20px; - - & h2 { - font-size: 20px; - font-weight: 700; - } - - & p { - margin-top: 10px; - } -`; - -const Columns = styled.div` - display: flex; - margin-left: -10px; - flex-flow: column; - ${desktopOnly(css` - flex-flow: row; - `)} - - & h2 { - font-size: 20px; - font-weight: 700; - margin-bottom: 10px; - margin-top: 10px; - } - - & > div { - min-width: 150px; - flex: 1; - display: flex; - flex-flow: column; - margin: 10px; - } -`; - -const StyledSmallCarousel = styled(SmallCarousel)<{ isFullscreen: boolean }>` - height: auto; - - & img { - height: ${props => (props.isFullscreen ? '100vh' : '200px')}; - margin: auto; - cursor: pointer; - width: 100%; - - ${desktopOnly(css` - width: 'auto'; - `)} - } -`; - export const shouldDisplayAccessibility = (details: Details) => { return Boolean( details.disabledInfrastructure || diff --git a/frontend/src/components/ActivitySearchFilter/ActivitySearchFilter.tsx b/frontend/src/components/ActivitySearchFilter/ActivitySearchFilter.tsx index 4423650e7..889fd3fe0 100644 --- a/frontend/src/components/ActivitySearchFilter/ActivitySearchFilter.tsx +++ b/frontend/src/components/ActivitySearchFilter/ActivitySearchFilter.tsx @@ -22,12 +22,13 @@ export const ActivitySearchFilter: React.FC = ({ const { activities, expandedState, toggleExpandedState } = useActivitySearchFilter(); const intl = useIntl(); - const getId = (type: string) => { + const getId = (type: string | null) => { if (type === 'PRACTICE') return PRACTICE_ID; if (type === 'OUTDOOR_PRACTICE') return OUTDOOR_ID; if (type === 'TOURISTIC_EVENT_TYPE') return EVENT_ID; + if (type === 'CATEGORIES') return CATEGORY_ID; - return CATEGORY_ID; + return null; }; if (!activities) { @@ -74,7 +75,7 @@ export const ActivitySearchFilter: React.FC = ({ )}
-
+
diff --git a/frontend/src/components/ActivitySearchFilter/ActivitySearchFilterMobile/index.tsx b/frontend/src/components/ActivitySearchFilter/ActivitySearchFilterMobile/index.tsx index a38a2c656..78246708d 100644 --- a/frontend/src/components/ActivitySearchFilter/ActivitySearchFilterMobile/index.tsx +++ b/frontend/src/components/ActivitySearchFilter/ActivitySearchFilterMobile/index.tsx @@ -1,8 +1,6 @@ -import React from 'react'; import Select, { CSSObjectWithLabel } from 'react-select'; import { FormattedMessage, useIntl } from 'react-intl'; -import { colorPalette, getSpacing, shadow } from 'stylesheet'; import { routes } from 'services/routes'; import { ActivityFilter } from 'modules/activities/interface'; @@ -14,7 +12,7 @@ import { useActivitySearchFilterMobile } from './useActivitySearchFilterMobile'; export const ActivitySearchFilterMobile: React.FC<{ className?: string; activities: ActivityFilter[]; - getId: (type: string) => string; + getId: (type: string) => string | null; }> = ({ className = '', activities, getId }) => { const { selectedActivityId, updateSelectedActivityId } = useActivitySearchFilterMobile(); const intl = useIntl(); @@ -23,10 +21,16 @@ export const ActivitySearchFilterMobile: React.FC<{ ({ id, type }) => `${type}-${id}` === selectedActivityId, ); + const hrefParams = + selectedActivityId !== null && selectedActivity !== undefined + ? `?${getId(selectedActivity.type)}=${selectedActivityId.split('-')[1]}` + : ''; + return (
-
- -
- -
- , - "container":
-
- - -
-
+
+
+ , + "container":
+
+ + +
, "debug": [Function], diff --git a/frontend/src/components/pages/search/components/ResultCard/__tests__/__snapshots__/ResultCard.test.tsx.snap b/frontend/src/components/pages/search/components/ResultCard/__tests__/__snapshots__/ResultCard.test.tsx.snap index 2293adc95..b8214e18d 100644 --- a/frontend/src/components/pages/search/components/ResultCard/__tests__/__snapshots__/ResultCard.test.tsx.snap +++ b/frontend/src/components/pages/search/components/ResultCard/__tests__/__snapshots__/ResultCard.test.tsx.snap @@ -25,7 +25,7 @@ Object { class="" >
  • Difficile @@ -119,7 +119,7 @@ Object {
  • 2h @@ -153,7 +153,7 @@ Object {
  • 5km @@ -179,7 +179,7 @@ Object {
  • +360m @@ -238,7 +238,7 @@ Object { class="" >
  • Difficile @@ -332,7 +332,7 @@ Object {
  • 2h @@ -366,7 +366,7 @@ Object {
  • 5km @@ -392,7 +392,7 @@ Object {
  • +360m diff --git a/frontend/src/components/pages/search/components/ToggleFilterButton/ToggleFilterButton.tsx b/frontend/src/components/pages/search/components/ToggleFilterButton/ToggleFilterButton.tsx index 1b9ee83ce..29a30beb3 100644 --- a/frontend/src/components/pages/search/components/ToggleFilterButton/ToggleFilterButton.tsx +++ b/frontend/src/components/pages/search/components/ToggleFilterButton/ToggleFilterButton.tsx @@ -1,3 +1,5 @@ +import React from 'react'; +import * as SheetPrimitive from '@radix-ui/react-dialog'; import { ButtonHTMLAttributes } from 'react'; import { FormattedMessage } from 'react-intl'; @@ -8,9 +10,16 @@ interface Props extends ButtonHTMLAttributes { numberSelected: number; } -export const ToggleFilterButton: React.FC = ({ numberSelected, ...nativeButtonProps }) => { +export const ToggleFilterButton = React.forwardRef< + React.ElementRef, + Props +>(({ numberSelected, ...nativeButtonProps }, ref) => { return ( - ); -}; +}); + +ToggleFilterButton.displayName = 'ToggleFilterButton'; diff --git a/frontend/src/components/pages/site/OutdoorCourseUI.tsx b/frontend/src/components/pages/site/OutdoorCourseUI.tsx index 0fa37824c..535d2ee3a 100644 --- a/frontend/src/components/pages/site/OutdoorCourseUI.tsx +++ b/frontend/src/components/pages/site/OutdoorCourseUI.tsx @@ -9,7 +9,6 @@ import { DetailsHeaderMobile, marginDetailsChild } from 'components/pages/detail import { useOnScreenSection } from 'components/pages/details/hooks/useHighlightedSection'; import { generateTouristicContentUrl, - HtmlText, templatesVariablesAreDefinedAndUsed, } from 'components/pages/details/utils'; import { VisibleSectionProvider } from 'components/pages/details/VisibleSectionContext'; @@ -18,7 +17,6 @@ import { useMemo, useRef } from 'react'; import { FormattedMessage, useIntl } from 'react-intl'; import Loader from 'components/Loader'; import { useMediaPredicate } from 'react-media-hook'; -import { sizes } from 'stylesheet'; import { DetailsMapDynamicComponent } from 'components/Map'; import { PageHead } from 'components/PageHead'; import { Footer } from 'components/Footer'; @@ -36,6 +34,7 @@ import { DetailsTopIcons } from '../details/components/DetailsTopIcons'; import { DetailsCoverCarousel } from '../details/components/DetailsCoverCarousel'; import { DetailsSensitiveArea } from '../details/components/DetailsSensitiveArea'; import { useDetailsSections } from '../details/useDetailsSections'; +import { theme } from '../../../../tailwind.config'; interface Props { outdoorCourseUrl: string | string[] | undefined; @@ -75,8 +74,8 @@ export const OutdoorCourseUIWithoutContext: React.FC = ({ outdoorCourseUr // relative to the relative parent. scrollOffset: (sectionsContainerRef.current?.offsetTop ?? 0) - - sizes.desktopHeader - - sizes.detailsHeaderDesktop, + parseInt(theme.spacing.desktopHeader, 10) - + parseInt(theme.spacing[14], 10), }); return useMemo( @@ -318,7 +317,9 @@ export const OutdoorCourseUIWithoutContext: React.FC = ({ outdoorCourseUr :{' '} - {parse(outdoorCourseContent.accessibility)} +
    + {parse(outdoorCourseContent.accessibility)} +
    )} diff --git a/frontend/src/components/pages/site/OutdoorSiteUI.tsx b/frontend/src/components/pages/site/OutdoorSiteUI.tsx index a59fb8c20..145a234c9 100644 --- a/frontend/src/components/pages/site/OutdoorSiteUI.tsx +++ b/frontend/src/components/pages/site/OutdoorSiteUI.tsx @@ -13,7 +13,6 @@ import { DetailsHeaderMobile, marginDetailsChild } from 'components/pages/detail import { useOnScreenSection } from 'components/pages/details/hooks/useHighlightedSection'; import { generateTouristicContentUrl, - HtmlText, templatesVariablesAreDefinedAndUsed, } from 'components/pages/details/utils'; import { VisibleSectionProvider } from 'components/pages/details/VisibleSectionContext'; @@ -22,7 +21,6 @@ import { useCallback, useMemo, useRef } from 'react'; import { FormattedMessage, useIntl } from 'react-intl'; import Loader from 'components/Loader'; import { useMediaPredicate } from 'react-media-hook'; -import { sizes } from 'stylesheet'; import { DetailsMapDynamicComponent } from 'components/Map'; import { PageHead } from 'components/PageHead'; import { Footer } from 'components/Footer'; @@ -44,6 +42,7 @@ import { DetailsAndMapProvider } from '../details/DetailsAndMapContext'; import { useDetailsSections } from '../details/useDetailsSections'; import { DetailsViewPoints } from '../details/components/DetailsViewPoints'; import { DetailsFiles } from '../details/components/DetailsFiles'; +import { theme } from '../../../../tailwind.config'; interface Props { outdoorSiteUrl: string | string[] | undefined; @@ -85,8 +84,8 @@ const OutdoorSiteUIWithoutContext: React.FC = ({ outdoorSiteUrl, language // relative to the relative parent. scrollOffset: (sectionsContainerRef.current?.offsetTop ?? 0) - - sizes.desktopHeader - - sizes.detailsHeaderDesktop, + parseInt(theme.spacing.desktopHeader, 10) - + parseInt(theme.spacing[14], 10), }); const handleViewPointClick = useCallback( @@ -398,7 +397,9 @@ const OutdoorSiteUIWithoutContext: React.FC = ({ outdoorSiteUrl, language :{' '} - {parse(outdoorSiteContent.accessibility)} +
    + {parse(outdoorSiteContent.accessibility)} +
  • )} diff --git a/frontend/src/components/pages/touristicContent/TouristicContentUI.tsx b/frontend/src/components/pages/touristicContent/TouristicContentUI.tsx index 6afe40a27..040232a9b 100644 --- a/frontend/src/components/pages/touristicContent/TouristicContentUI.tsx +++ b/frontend/src/components/pages/touristicContent/TouristicContentUI.tsx @@ -19,7 +19,7 @@ import { DetailsTopIcons } from '../details/components/DetailsTopIcons'; import { DetailsSource } from '../details/components/DetailsSource'; import { DetailsCoverCarousel } from '../details/components/DetailsCoverCarousel'; import { DetailsHeaderMobile, marginDetailsChild } from '../details/Details'; -import { HtmlText, templatesVariablesAreDefinedAndUsed } from '../details/utils'; +import { templatesVariablesAreDefinedAndUsed } from '../details/utils'; import { DetailsHeader } from '../details/components/DetailsHeader'; import { useDetailsSections } from '../details/useDetailsSections'; import { DetailsFiles } from '../details/components/DetailsFiles'; @@ -184,7 +184,9 @@ export const TouristicContentUI: React.FC = ({ titleId="details.practicalInformations" className={marginDetailsChild} > - {parse(touristicContent.practicalInfo)} +
    + {parse(touristicContent.practicalInfo)} +
    ); @@ -202,7 +204,9 @@ export const TouristicContentUI: React.FC = ({ titleId="details.accessibility" className={marginDetailsChild} > - {parse(touristicContent.accessibility)} +
    + {parse(touristicContent.accessibility)} +
    ); @@ -225,7 +229,7 @@ export const TouristicContentUI: React.FC = ({ titleId="details.contact" className={marginDetailsChild} > - {parse(touristicContent.contact)} +
    {parse(touristicContent.contact)}
    {!!touristicContent.email?.length && (
    diff --git a/frontend/src/components/pages/touristicEvent/TouristicEventUI.tsx b/frontend/src/components/pages/touristicEvent/TouristicEventUI.tsx index 9c127e617..b96ae0712 100644 --- a/frontend/src/components/pages/touristicEvent/TouristicEventUI.tsx +++ b/frontend/src/components/pages/touristicEvent/TouristicEventUI.tsx @@ -16,7 +16,6 @@ import { useMemo, useRef } from 'react'; import { FormattedMessage, useIntl } from 'react-intl'; import Loader from 'components/Loader'; import { useMediaPredicate } from 'react-media-hook'; -import { sizes } from 'stylesheet'; import { DetailsMapDynamicComponent } from 'components/Map'; import { PageHead } from 'components/PageHead'; import { Footer } from 'components/Footer'; @@ -32,6 +31,7 @@ import { DetailsTopIcons } from '../details/components/DetailsTopIcons'; import { DetailsCoverCarousel } from '../details/components/DetailsCoverCarousel'; import { useDetailsSections } from '../details/useDetailsSections'; import { DetailsFiles } from '../details/components/DetailsFiles'; +import { theme } from '../../../../tailwind.config'; interface Props { touristicEventUrl: string | string[] | undefined; @@ -74,8 +74,8 @@ export const TouristicEventUIWithoutContext: React.FC = ({ // relative to the relative parent. scrollOffset: (sectionsContainerRef.current?.offsetTop ?? 0) - - sizes.desktopHeader - - sizes.detailsHeaderDesktop, + parseInt(theme.spacing.desktopHeader, 10) - + parseInt(theme.spacing[14], 10), }); return useMemo( diff --git a/frontend/src/hooks/useTileLayer.ts b/frontend/src/hooks/useTileLayer.ts index ace6f51f0..2053ee690 100644 --- a/frontend/src/hooks/useTileLayer.ts +++ b/frontend/src/hooks/useTileLayer.ts @@ -1,47 +1,24 @@ -import L, { LatLngBoundsExpression } from 'leaflet'; +import { LatLngBoundsExpression } from 'leaflet'; import { Map } from 'leaflet'; import { useState } from 'react'; -import { useIntl } from 'react-intl'; -require('leaflet.locatecontrol'); -import 'leaflet.locatecontrol/dist/L.Control.Locate.min.css'; import injectOfflineMode from 'services/offline/injectOfflineMode'; -import { ViewPoint } from 'modules/viewPoint/interface'; export const useTileLayer = ( id?: number, center?: LatLngBoundsExpression | null, - mapToDisplay: ViewPoint | 'default' = 'default', ): { map: Map | null; setMapInstance: (newMap: Map) => void; } => { const [map, setMap] = useState(null); - const intl = useIntl(); - const setMapInstance = (newMap: Map) => { setMap(newMap); if (id !== undefined && center) { injectOfflineMode(newMap, id, center); } - - if (mapToDisplay === 'default') { - L.control - // @ts-expect-error no type available in this plugin - .locate({ - locateOptions: { - enableHighAccuracy: true, - }, - icon: 'gg-track', - strings: { - title: intl.formatMessage({ id: 'search.map.seeMe' }), - }, - position: 'bottomright', - }) - .addTo(newMap); - } }; return { diff --git a/frontend/src/modules/details/connector.ts b/frontend/src/modules/details/connector.ts index 768476cbc..dd535d5b4 100644 --- a/frontend/src/modules/details/connector.ts +++ b/frontend/src/modules/details/connector.ts @@ -53,7 +53,7 @@ export const getDetails = async ( getAccessibilities(language), ]); - const viewPoints = await adaptViewPoints(rawDetails.properties.view_points ?? []); + const viewPoints = await adaptViewPoints(language, rawDetails.properties.view_points ?? []); const [ activity, diff --git a/frontend/src/modules/outdoorSite/connector.ts b/frontend/src/modules/outdoorSite/connector.ts index be7018ea4..bf9da3ef8 100644 --- a/frontend/src/modules/outdoorSite/connector.ts +++ b/frontend/src/modules/outdoorSite/connector.ts @@ -115,7 +115,10 @@ export const getOutdoorSiteDetails = async ( : [], ]); - const viewPoints = await adaptViewPoints(rawOutdoorSiteDetails.properties.view_points ?? []); + const viewPoints = await adaptViewPoints( + language, + rawOutdoorSiteDetails.properties.view_points ?? [], + ); return adaptOutdoorSiteDetails({ rawOutdoorSiteDetails, diff --git a/frontend/src/modules/poi/adapter.ts b/frontend/src/modules/poi/adapter.ts index 7073e6317..fb2873513 100644 --- a/frontend/src/modules/poi/adapter.ts +++ b/frontend/src/modules/poi/adapter.ts @@ -7,16 +7,18 @@ import { adaptViewPoints } from 'modules/viewPoint/adapter'; import { Poi, RawPoi } from './interface'; export const adaptPoi = ({ + language, rawPoisResults, poiTypes, }: { + language: string; rawPoisResults: RawPoi[]; poiTypes: PoiTypeDictionnary; }): Promise => Promise.all( rawPoisResults.map(async rawPoi => { const viewPoints = - rawPoi.view_points?.length > 0 ? await adaptViewPoints(rawPoi.view_points) : []; + rawPoi.view_points?.length > 0 ? await adaptViewPoints(language, rawPoi.view_points) : []; return { id: `${rawPoi.id}`, diff --git a/frontend/src/modules/poi/connector.ts b/frontend/src/modules/poi/connector.ts index ab355c9bb..9cce5c42e 100644 --- a/frontend/src/modules/poi/connector.ts +++ b/frontend/src/modules/poi/connector.ts @@ -10,5 +10,5 @@ export const getPois = async (id: number, language: string, key = 'near_trek'): fetchPois({ language, [key]: id, page_size: pageSize }), getPoiTypes(language), ]); - return adaptPoi({ rawPoisResults: rawPois.results, poiTypes }); + return adaptPoi({ language, rawPoisResults: rawPois.results, poiTypes }); }; diff --git a/frontend/src/modules/sensitiveArea/adapter.ts b/frontend/src/modules/sensitiveArea/adapter.ts index 2e208bf57..f416cbd57 100644 --- a/frontend/src/modules/sensitiveArea/adapter.ts +++ b/frontend/src/modules/sensitiveArea/adapter.ts @@ -1,6 +1,6 @@ import { SensitiveAreaPracticeDictionnary } from 'modules/sensitiveAreaPractice/interface'; import { adaptMultiPolygonGeometry, adaptPolygonGeometry } from 'modules/utils/geometry'; -import { getListOfColorsInPalette } from 'stylesheet'; +import { listOfColorsInPalette } from 'stylesheet'; import { RawSensitiveArea, SensitiveArea } from './interface'; export const adaptSensitiveAreas = ({ @@ -23,5 +23,5 @@ export const adaptSensitiveAreas = ({ rawSensitiveArea.geometry.type === 'MultiPolygon' ? adaptMultiPolygonGeometry(rawSensitiveArea.geometry) : adaptPolygonGeometry(rawSensitiveArea.geometry), - color: getListOfColorsInPalette[i % getListOfColorsInPalette.length], + color: listOfColorsInPalette[i % listOfColorsInPalette.length], })); diff --git a/frontend/src/modules/viewPoint/adapter.ts b/frontend/src/modules/viewPoint/adapter.ts index 2001ac19f..c1652c515 100644 --- a/frontend/src/modules/viewPoint/adapter.ts +++ b/frontend/src/modules/viewPoint/adapter.ts @@ -1,15 +1,40 @@ -import { getViewPointMetadata } from './connector'; -import { RawViewPoint, ViewPoint } from './interface'; +import { getViewPointCategories, getViewPointMetadata } from './connector'; +import { RawViewPoint, RawViewPointCategories, ViewPoint, ViewPointCategories } from './interface'; -export const adaptViewPoints = async (rawViewpoints: RawViewPoint[]): Promise => { +export const adaptViewPointsCategories = ( + viewPointsCategories: RawViewPointCategories[], +): ViewPointCategories => + Object.fromEntries( + viewPointsCategories.map(({ pictogram, ...item }) => [ + item.id, + { ...item, pictogramUri: pictogram }, + ]), + ); + +export const adaptViewPoints = async ( + language: string, + rawViewpoints: RawViewPoint[], +): Promise => { if (rawViewpoints.length === 0) { return []; } const viewPoints = await Promise.all( rawViewpoints.map(async viewpoint => { - const metadata = await getViewPointMetadata(viewpoint.metadata_url); + const [metadata, categories] = await Promise.all([ + getViewPointMetadata(viewpoint.metadata_url), + getViewPointCategories(language), + ]); return { - annotations: viewpoint.annotations, + annotations: { + ...viewpoint.annotations, + features: viewpoint.annotations.features.map(feature => ({ + ...feature, + properties: { + ...feature.properties, + category: categories?.[feature.properties?.category] || null, + }, + })), + }, id: String(viewpoint.id), author: viewpoint.author, geometry: viewpoint.geometry ?? null, diff --git a/frontend/src/modules/viewPoint/api.ts b/frontend/src/modules/viewPoint/api.ts index 136813016..84c8d0d5e 100644 --- a/frontend/src/modules/viewPoint/api.ts +++ b/frontend/src/modules/viewPoint/api.ts @@ -1,5 +1,6 @@ import { GeotrekAPI } from 'services/api/client'; -import { ViewPoint } from './interface'; +import { APIQuery, APIResponseForList } from 'services/api/interface'; +import { RawViewPointCategories, ViewPoint } from './interface'; export const fetchViewPointMetadata = (url: string): Promise => { try { @@ -9,3 +10,10 @@ export const fetchViewPointMetadata = (url: string): Promise> => + GeotrekAPI.get('/annotation_category/', { + params: { ...query }, + }).then(r => r.data); diff --git a/frontend/src/modules/viewPoint/connector.ts b/frontend/src/modules/viewPoint/connector.ts index 975c73197..f8681b019 100644 --- a/frontend/src/modules/viewPoint/connector.ts +++ b/frontend/src/modules/viewPoint/connector.ts @@ -1,5 +1,6 @@ -import { fetchViewPointMetadata } from './api'; -import { ViewPoint } from './interface'; +import { adaptViewPointsCategories } from './adapter'; +import { fetchViewPointCategories, fetchViewPointMetadata } from './api'; +import { ViewPoint, ViewPointCategories } from './interface'; export const getViewPointMetadata = async (url: string): Promise => { try { @@ -8,3 +9,14 @@ export const getViewPointMetadata = async (url: string): Promise => { + try { + const rawViewPointsCategories = await fetchViewPointCategories({ language }); + return adaptViewPointsCategories(rawViewPointsCategories.results); + } catch (e) { + return null; + } +}; diff --git a/frontend/src/modules/viewPoint/interface.ts b/frontend/src/modules/viewPoint/interface.ts index 94aabe23a..3160fe002 100644 --- a/frontend/src/modules/viewPoint/interface.ts +++ b/frontend/src/modules/viewPoint/interface.ts @@ -14,6 +14,12 @@ export interface RawViewPoint { geometry?: RawPointGeometry2D; } +export interface RawViewPointCategories { + id: string; + name: string; + pictogram: string; +} + export interface ViewPoint { annotations: FeatureCollection; id: string; @@ -32,3 +38,12 @@ export interface ViewPoint { thumbnailUrl: string; geometry: RawPointGeometry2D | null; } + +export interface ViewPointCategory { + id: string; + name: string; + pictogramUri: string; +} +export interface ViewPointCategories { + [id: string]: ViewPointCategory; +} diff --git a/frontend/src/public/images/3d/background.jpg b/frontend/src/public/images/3d/background.jpg deleted file mode 100644 index dea2ba283..000000000 Binary files a/frontend/src/public/images/3d/background.jpg and /dev/null differ diff --git a/frontend/src/public/style.css b/frontend/src/public/style.css index 37fc1318c..88449e87e 100644 --- a/frontend/src/public/style.css +++ b/frontend/src/public/style.css @@ -74,17 +74,44 @@ stroke: #aa397d !important; } -#details_cover_image, -#touristicContent_cover_image { - height: 100%; -} - .menu-download { z-index: 299; } -.over-all { - z-index: 10001; +/* Slick slider */ +.slick-container, +.slick-slider, +.slick-list, +.slick-track, +.slick-slide { + @apply h-full; +} +.slick-slide > div { + @apply h-full; +} + +.slick-dots li { + @apply m-0; +} + +.slick-dots li > button { + @apply p-2p; +} + +.slick-dots li > button::before { + @apply text-white opacity-50; + text-shadow: 0 0 4px black; +} + +.slick-dots li.slick-active > button::before { + @apply text-white opacity-100; +} + +/* Custom Utilities */ +@screen desktop { + .desktop\:max-h-heightScreenWithoutHeader { + max-height: calc(100vh - theme('spacing.desktopHeader') - theme('spacing.55') + 130px); + } } /* Fix Safari issue related to /
    arrow */ @@ -97,31 +124,50 @@ details > summary.list-none::marker { max-height: calc(100vh - theme('spacing.desktopHeader')); } -/* Flatpage WYSIWYG */ +/* WYSIWYG */ +.content-WYSIWYG { + @apply after:content-[''] after:clear-both after:table; +} + +.content-WYSIWYG > *:first-child { + @apply mt-0; +} + +.content-WYSIWYG > *:last-child { + @apply mb-0; +} + +.content-WYSIWYG a, .custo-page-WYSIWYG a:not(.custo-suggestions a, .button-link) { - @apply text-primary1 transition-colors hover:text-primary1-light focus:text-primary1-light; + @apply text-primary1 transition-colors hover:text-primary1-light focus:text-primary1-light break-words; } +.content-WYSIWYG h1, .custo-page-WYSIWYG h1:not(.custo-suggestions h1) { @apply text-H2 font-bold desktop:text-H1; } +.content-WYSIWYG h2, .custo-page-WYSIWYG h2:not(.custo-suggestions h2) { @apply text-H2 desktop:text-H1; } +.content-WYSIWYG h3, .custo-page-WYSIWYG h3:not(.custo-suggestions h3) { @apply text-H3 font-bold desktop:text-H2; } +.content-WYSIWYG h4, .custo-page-WYSIWYG h4:not(.custo-suggestions h4) { @apply text-H4 font-bold desktop:text-H3; } +.content-WYSIWYG h5, .custo-page-WYSIWYG h5:not(.custo-suggestions h5) { @apply text-xl font-bold desktop:text-H4; } +.content-WYSIWYG h6, .custo-page-WYSIWYG h6:not(.custo-suggestions h6) { @apply font-bold desktop:text-lg; } @@ -130,12 +176,23 @@ details > summary.list-none::marker { @apply mb-4 desktop:mb-6; } +.content-WYSIWYG h1, +.content-WYSIWYG h2, +.content-WYSIWYG h3, .custo-page-WYSIWYG h1:not(.custo-suggestions h1), .custo-page-WYSIWYG h2:not(.custo-suggestions h2), .custo-page-WYSIWYG h3:not(.custo-suggestions h3) { @apply clear-both; } +.content-WYSIWYG h1, +.content-WYSIWYG h2, +.content-WYSIWYG h3, +.content-WYSIWYG h4, +.content-WYSIWYG h5, +.content-WYSIWYG p { + @apply my-2 desktop:my-4; +} .custo-page-WYSIWYG h1:not(.custo-suggestions h1), .custo-page-WYSIWYG h2:not(.custo-suggestions h2), .custo-page-WYSIWYG h3:not(.custo-suggestions h3), @@ -144,44 +201,55 @@ details > summary.list-none::marker { @apply my-4 desktop:my-10; } +.content-WYSIWYG h6, .custo-page-WYSIWYG h6:not(.custo-suggestions h6) { @apply my-4 desktop:my-8; } +.content-WYSIWYG img, .custo-page-WYSIWYG img:not(.custo-suggestions img) { @apply mx-1; } +.content-WYSIWYG blockquote, .custo-page-WYSIWYG blockquote:not(.custo-suggestions blockquote) { @apply flex gap-2 text-greyDarkColored/75 italic; } +.content-WYSIWYG blockquote p:last-child, .custo-page-WYSIWYG blockquote:not(.custo-suggestions blockquote) p:last-child { @apply mb-0; } +.content-WYSIWYG blockquote::before, .custo-page-WYSIWYG blockquote:not(.custo-suggestions blockquote)::before { - content: "“"; + content: '“'; @apply text-5xl; } +.content-WYSIWYG iframe, .custo-page-WYSIWYG iframe:not(.custo-suggestions iframe) { @apply my-8 w-full h-auto desktop:my-12 aspect-video; } +.content-WYSIWYG b, +.content-WYSIWYG strong, .custo-page-WYSIWYG b:not(.custo-suggestions b), .custo-page-WYSIWYG strong:not(.custo-suggestions strong) { @apply font-bold; } +.content-WYSIWYG em, .custo-page-WYSIWYG em:not(.custo-suggestions em) { @apply text-P2 italic desktop:text-P1; } +.content-WYSIWYG ul, .custo-page-WYSIWYG ul:not(.custo-suggestions ul) { @apply my-4; } +.content-WYSIWYG ul > li, .custo-page-WYSIWYG ul:not(.custo-suggestions ul) > li { @apply pl-4 list-inside list-disc desktop:mb-2; } @@ -194,6 +262,7 @@ details > summary.list-none::marker { @apply clear-both py-4 px-10 rounded-lg bg-greySoft; } +.content-WYSIWYG .image, .custo-page-WYSIWYG .image { @apply clear-both overflow-hidden desktop:mb-8; } diff --git a/frontend/src/services/testing/reactTestingLibraryWrapper/index.tsx b/frontend/src/services/testing/reactTestingLibraryWrapper/index.tsx index a0a793ebc..9f20ad7f4 100644 --- a/frontend/src/services/testing/reactTestingLibraryWrapper/index.tsx +++ b/frontend/src/services/testing/reactTestingLibraryWrapper/index.tsx @@ -3,7 +3,7 @@ import { ReactElement } from 'react'; import { RenderOptions, RenderResult, render as rtlRender } from '@testing-library/react'; import { IntlProvider } from 'react-intl'; -import { RouterContext } from 'next/dist/shared/lib/router-context'; +import { RouterContext } from 'next-server/dist/lib/router-context'; import { NextRouter } from 'next/dist/shared/lib/router/router'; import flattenMessages from 'services/i18n/intl'; @@ -11,6 +11,8 @@ import enMessages from 'translations/en.json'; import frMessages from 'translations/fr.json'; import { routerMock } from '../routerMock'; +jest.mock('next/router', () => jest.requireActual('next-router-mock')); + interface WrapperOptions { locale?: 'en' | 'fr'; router?: Partial; diff --git a/frontend/src/styles/global.css b/frontend/src/styles/global.css index 0f2a7c4ed..228604e53 100644 --- a/frontend/src/styles/global.css +++ b/frontend/src/styles/global.css @@ -8,6 +8,17 @@ } } +html { + font-family: theme('fontFamily.main'); + color: theme('colors.greyDarkColored'); + height: 100vh; +} + +body, +#__next { + height: 100%; +} + .input { @apply bg-white border @@ -49,25 +60,30 @@ w-full; } +input[type='date']::-webkit-calendar-picker-indicator { + @apply hidden; + -webkit-appearance: none; +} + /* Leaflet */ .leaflet-popup .leaflet-popup-content { - @apply m-0; - /* Show the loader properly */ - @apply relative; - min-height: 120px; - min-width: 120px; + @apply m-0; + /* Show the loader properly */ + @apply relative; + min-height: 120px; + min-width: 120px; } .leaflet-popup .leaflet-popup-content-wrapper { - @apply p-0 rounded-xl overflow-hidden w-55 desktop:w-70; + @apply p-0 rounded-xl overflow-hidden w-55 desktop:w-70; } .leaflet-popup .leaflet-popup-tip { - /* Removes native leaflet popup triangle below the content + /* Removes native leaflet popup triangle below the content https://stackoverflow.com/a/51457598/14707543 */ - background: rgba(0, 0, 0, 0) !important; - box-shadow: none !important; + background: rgba(0, 0, 0, 0) !important; + box-shadow: none !important; } .hasDrawer .leaflet-bottom { @@ -84,7 +100,7 @@ } .leaflet-container:fullscreen #backToMapButton { - @apply hidden; + @apply hidden; } .leaflet-interactive.annotation { @@ -95,3 +111,7 @@ .leaflet-interactive.annotation-line { fill: none; } + +.textShadowOnImage { + text-shadow: 0 0 20px theme('colors.gradientOnImages'); +} diff --git a/frontend/src/stylesheet.ts b/frontend/src/stylesheet.ts index 946287eea..429718d7a 100644 --- a/frontend/src/stylesheet.ts +++ b/frontend/src/stylesheet.ts @@ -1,199 +1,29 @@ -import { css, FlattenSimpleInterpolation } from 'styled-components'; import { optimize } from 'svgo/lib/svgo'; -import tailwindConfig from '../tailwind.config'; -/** - * This file is here to ensure UI consistency - * You **MUST** sync with your designer at the start of the project to check - * what colors/typos/grid unit you are going to use, and stick to it. - */ - -// This file is where the variables are defined, so we can disable stylelint here -// stylelint-disable - -export const MAX_WIDTH_MOBILE = 1024; - -export const desktopOnly = ( - cssProperties: FlattenSimpleInterpolation, -): FlattenSimpleInterpolation => { - return css` - @media (min-width: ${MAX_WIDTH_MOBILE}px) { - ${cssProperties} - } - `; -}; - -/** - * App spacing measurement convention - * Use the getSpacing function below to compute padding and margin - * and elements with fixed width/height - */ - -const MEASUREMENT_UNIT = 'px'; -export const SPACING_UNIT = 4; -export const getSpacing = (multiplier: number): string => - `${multiplier * SPACING_UNIT}${MEASUREMENT_UNIT}`; -/** - * Use this palette in your components - * If a new color is in the mockups, check with the designer - * that the project really need a new color and add it here. - * As to naming, the best name is the name used by the designer - */ -export const colorPalette = { - primary1: tailwindConfig.theme.extend.colors.primary1.DEFAULT, - primary2: tailwindConfig.theme.extend.colors.primary2, - warning: tailwindConfig.theme.extend.colors.warning, - easyOK: tailwindConfig.theme.extend.colors.easyOK, - hardKO: tailwindConfig.theme.extend.colors.hardKO, - primary3: tailwindConfig.theme.extend.colors.primary3, - greyDarkColored: tailwindConfig.theme.extend.colors.greyDarkColored, - red: tailwindConfig.theme.extend.colors.red, - greySoft: tailwindConfig.theme.extend.colors.greySoft, - black: tailwindConfig.theme.extend.colors.black, - white: tailwindConfig.theme.extend.colors.white, - redMarker: tailwindConfig.theme.extend.colors.redMarker, - blackTransparent: tailwindConfig.theme.extend.colors.blackTransparent, - darkPurple: tailwindConfig.theme.extend.colors.greyDarkColored, - blackSemiTransparent: tailwindConfig.theme.extend.colors.blackSemiTransparent, - primary1_light: tailwindConfig.theme.extend.colors.primary1.light, - filter: { - background: tailwindConfig.theme.extend.colors.white, - color: tailwindConfig.theme.extend.colors.black, - borderColor: tailwindConfig.theme.extend.colors.primary1.DEFAULT, - hover: { - background: tailwindConfig.theme.extend.colors.primary2, - color: tailwindConfig.theme.extend.colors.black, - }, - selected: { - background: tailwindConfig.theme.extend.colors.primary2, - color: tailwindConfig.theme.extend.colors.black, - }, - placeholder: { - color: tailwindConfig.theme.extend.colors.greyDarkColored, - }, - }, - home: { - activity: { - color: tailwindConfig.theme.extend.colors.greyDarkColored, - }, - gradientOnImages: tailwindConfig.theme.extend.colors.gradientOnImages, - shadowOnImages: tailwindConfig.theme.extend.colors.gradientOnImages, - }, -} as const; - -// This function collects in a list all the colors defined at the root of the color palette object. Duplicated colors are eliminated. +// This constante collects all the colors defined at the root of the color palette object. // This list can then be used to attribute a different color to each member of a set // It is used in sensitiveAreas for example -export const getListOfColorsInPalette = Object.values(colorPalette).reduce( - (colorList, currentColor) => { - if (typeof currentColor === 'string' && !colorList.includes(currentColor)) { - colorList.push(currentColor); - } - return colorList; - }, - [], -); - -export const fontFamily = { - main: `'Assistant', 'Helvetica', 'Arial', sans-serif`, - code: 'Monospace', -} as const; - -export const shadow = { - large: `0 0 30px 0 rgba(0, 0, 0, 0.15)`, - medium: '0 0 20px rgba(0, 0, 0, 0.15)', - small: `0 0 4px ${colorPalette.greySoft.light}`, -} as const; - -export const typography = { - main: css` - font-family: ${fontFamily.main}; - font-weight: normal; - font-size: 16px; - line-height: 21px; - color: ${colorPalette.greyDarkColored}; - `, - bold: css` - font-weight: bold; - `, - light: css` - font-weight: lighter; - `, - small: css` - font-size: 14px; - line-height: 18px; - `, - h1: css` - font-family: ${fontFamily.main}; - font-weight: bold; - font-size: 44px; - line-height: 58px; - `, - h2: css` - font-family: ${fontFamily.main}; - font-weight: bold; - font-size: 32px; - line-height: 42px; - `, - h3: css` - font-family: ${fontFamily.main}; - font-weight: bold; - font-size: 24px; - line-height: 31px; - `, - h4: css` - font-family: ${fontFamily.main}; - font-weight: bold; - font-size: 20px; - line-height: 26px; - `, - code: css` - font-family: ${fontFamily.code}; - color: ${colorPalette.primary3}; - `, -} as const; - -export const borderRadius = { - medium: '4px', - squareButton: '8px', - roundButton: '50px', -} as const; - -export const zIndex = { - content: 0, - loader: 1, - floatingButton: 1, - header: 2, - sliderMenu: 3, -} as const; - -export const sizes = { - desktopHeader: 96, - button: 48, - filterBar: 72, - mobileDetailsTitle: 230, - detailsHeaderDesktop: 56, - coverDetailsDesktop: 550, - topIconsDetailsDesktop: 72, - scrollOffsetBeforeElement: 36, - resultCardDesktop: 224, - resultCardMobile: '27vh', - headerAndFilterbar: 168, -}; +export const listOfColorsInPalette = [ + 'primary1', + 'primary2', + 'warning', + 'easyOK', + 'hardKO', + 'primary3', + 'greyDarkColored', + 'red', + 'greySoft', + 'black', + 'white', + 'redMarker', + 'blackTransparent', + 'darkPurple', + 'blackSemiTransparent', + 'primary1_light', + 'filter', + 'home', +]; -export const scrollBar = { - root: css` - height: ${getSpacing(2)}; - ${desktopOnly(css` - width: ${getSpacing(2)}; - `)} - `, - thumb: css` - background-color: ${colorPalette.greySoft}; - opacity: 0.7; - border-radius: ${getSpacing(2)}; - `, -} as const; export const optimizeSVG = (svg: string): string => { const { data } = optimize(svg, { plugins: [ @@ -214,6 +44,7 @@ export const optimizeSVG = (svg: string): string => { ], }); return data; + 55; }; export const optimizeAndDefineColor = diff --git a/frontend/src/translations/ca.json b/frontend/src/translations/ca.json index 6186de385..1dcf7be5e 100644 --- a/frontend/src/translations/ca.json +++ b/frontend/src/translations/ca.json @@ -43,7 +43,8 @@ "resultsFound": "{count, plural, =0 {# resultat trobat} one {# resultat trobat} other {# resultats trobats}}", "resultsFoundShort": "{count, plural, =0 {# resultat} one {# resultat} other {# resultats}}", "forThe": "Per a", - "seeMap": "mostra el mapa", + "seeMap": "Mostra el mapa", + "seeViewPoint": "Mostra en imatge HD", "filter": "Filtrar", "closeFilters": "Tanca els filtres", "reload": "Tornar a carregar", @@ -308,5 +309,9 @@ }, "changeCookiePreference": "Canvia les preferències de galetes" } + }, + "carousel": { + "prevImage": "Imatge anterior", + "nextImage": "Següent imatge" } } diff --git a/frontend/src/translations/de.json b/frontend/src/translations/de.json index dfac1bce0..d13b1dea2 100644 --- a/frontend/src/translations/de.json +++ b/frontend/src/translations/de.json @@ -44,6 +44,7 @@ "resultsFoundShort": "{count, plural, =0 {# Ergebnis} one {# Ergebnis} other {# Ergebnisse}}", "forThe": "Für das", "seeMap": "Siehe die Karte", + "seeViewPoint": "Ansicht in HD-Bild", "filter": "Filter", "closeFilters": "Filter schließen", "reload": "Neuladen", @@ -308,5 +309,9 @@ }, "changeCookiePreference": "Cookie-Einstellungen ändern" } + }, + "carousel": { + "prevImage": "Vorheriges Bild", + "nextImage": "Nächstes Bild" } } diff --git a/frontend/src/translations/en.json b/frontend/src/translations/en.json index 80bec1cef..be8a1edbc 100644 --- a/frontend/src/translations/en.json +++ b/frontend/src/translations/en.json @@ -47,6 +47,7 @@ "resultsFoundShort": "{count, plural, =0 {# result} one {# result} other {# results}}", "forThe": "For the", "seeMap": "Display Map", + "seeViewPoint": "Display in HD picture", "filter": "Filter", "closeFilters": "Close filters", "reload": "Reload", @@ -354,5 +355,9 @@ }, "changeCookiePreference": "Change cookie preference" } + }, + "carousel": { + "prevImage": "Previous image", + "nextImage": "Next image" } } diff --git a/frontend/src/translations/es.json b/frontend/src/translations/es.json index 2c8c222cd..d789d0b31 100644 --- a/frontend/src/translations/es.json +++ b/frontend/src/translations/es.json @@ -43,7 +43,8 @@ "resultsFound": "{count, plural, =0 {# resultado encontrado} one {# resultado encontrado} other {# resultados encontrados}}", "resultsFoundShort": "{count, plural, =0 {# resultado} one {# resultado} other {# resultados}}", "forThe": "Para", - "seeMap": "mostrar el mapa", + "seeMap": "Mostrar el mapa", + "seeViewPoint": "Mostrar en imagen HD", "filter": "Filtrar", "closeFilters": "Cerrar filtros", "reload": "Volver a cargar", @@ -308,5 +309,9 @@ } }, "changeCookiePreference": "Cambiar las preferencias de cookies" + }, + "carousel": { + "prevImage": "Imagen anterior", + "nextImage": "Imagen siguiente" } } diff --git a/frontend/src/translations/fr.json b/frontend/src/translations/fr.json index 1e3e747c1..c7ebb66e8 100644 --- a/frontend/src/translations/fr.json +++ b/frontend/src/translations/fr.json @@ -47,6 +47,7 @@ "resultsFoundShort": "{count, plural, =0 {# résultat} one {# résultat} other {# résultats}}", "forThe": "Pour le", "seeMap": "Voir la carte", + "seeViewPoint": "Voir en image HD", "filter": "Filtrer", "closeFilters": "Fermer les filtres", "reload": "Recharger", @@ -354,5 +355,9 @@ } }, "changeCookiePreference": "Changer les préférences cookies" + }, + "carousel": { + "prevImage": "Image précédente", + "nextImage": "Image suivante" } } diff --git a/frontend/src/translations/it.json b/frontend/src/translations/it.json index 40d188106..36dc78f05 100644 --- a/frontend/src/translations/it.json +++ b/frontend/src/translations/it.json @@ -47,6 +47,7 @@ "resultsFoundShort": "{count, plural, =0 {# Nessun risultato} one {# risultato} other {# risultati}}", "forThe": "Per il", "seeMap": "Vedere la mappa", + "seeViewPoint": "Vedere in immagine HD", "filter": "Filtro", "closeFilters": "Chiudere i filtri", "reload": "Ricaricare", @@ -318,5 +319,9 @@ } }, "changeCookiePreference": "Modificare le preferenze sui cookie" + }, + "carousel": { + "prevImage": "Immagine precedente", + "nextImage": "Immagine successiva" } } diff --git a/frontend/src/tsconfig.json b/frontend/src/tsconfig.json index 292ed4353..1a16afe03 100644 --- a/frontend/src/tsconfig.json +++ b/frontend/src/tsconfig.json @@ -1,11 +1,7 @@ { "compilerOptions": { "target": "es5", - "lib": [ - "dom", - "dom.iterable", - "esnext" - ], + "lib": ["dom", "dom.iterable", "esnext"], "allowJs": true, "skipLibCheck": true, "strict": true, @@ -19,40 +15,18 @@ "jsx": "preserve", "baseUrl": ".", "paths": { - "components/*": [ - "components/*" - ], - "__fixtures__/*": [ - "__fixtures__/*" - ], - "__mocks__/*": [ - "__mocks__/*" - ], - "routes": [ - "routes" - ], - "services/*": [ - "services/*" - ], - "stylesheet": [ - "stylesheet" - ], - "translations/*": [ - "translations/*" - ], - "customization/*": [ - "../customization/*" - ] + "components/*": ["components/*"], + "__fixtures__/*": ["__fixtures__/*"], + "__mocks__/*": ["__mocks__/*"], + "routes": ["routes"], + "services/*": ["services/*"], + "stylesheet": ["stylesheet"], + "translations/*": ["translations/*"], + "customization/*": ["../customization/*"] }, - "incremental": true + "incremental": true, + "types": ["@testing-library/jest-dom"] }, - "exclude": [ - "node_modules" - ], - "include": [ - "next-env.d.ts", - "**/*.ts", - "**/*.tsx", - "cypress.config.ts" - ] + "exclude": ["node_modules"], + "include": ["next-env.d.ts", "**/*.ts", "**/*.tsx", "cypress.config.ts"] } diff --git a/frontend/stylelint.config.js b/frontend/stylelint.config.js index 7fc142be2..f160ba154 100644 --- a/frontend/stylelint.config.js +++ b/frontend/stylelint.config.js @@ -1,11 +1,6 @@ module.exports = { plugins: ['stylelint-declaration-strict-value'], - processors: ['stylelint-processor-styled-components'], - extends: [ - 'stylelint-config-standard', - 'stylelint-config-prettier', - 'stylelint-config-styled-components', - ], + extends: ['stylelint-config-standard', 'stylelint-config-prettier'], rules: { /* * These rules are here to prevent CSS bad practices. diff --git a/frontend/tailwind.config.js b/frontend/tailwind.config.js index b4e0bb71a..abb07d3ba 100644 --- a/frontend/tailwind.config.js +++ b/frontend/tailwind.config.js @@ -1,4 +1,5 @@ const SPACING_UNIT = 4; +const plugin = require('tailwindcss/plugin'); module.exports = { content: ['./src/pages/**/*.{js,ts,jsx,tsx}', './src/components/**/*.{js,ts,jsx,tsx}'], @@ -46,6 +47,7 @@ module.exports = { 40: `${SPACING_UNIT * 40}px`, 50: `${SPACING_UNIT * 50}px`, 55: `${SPACING_UNIT * 55}px`, + 58: `${SPACING_UNIT * 58}px`, 60: `${SPACING_UNIT * 60}px`, 70: `${SPACING_UNIT * 70}px`, 90: `${SPACING_UNIT * 90}px`, @@ -69,10 +71,12 @@ module.exports = { button: '48px', bannerSectionDesktop: '80vh', bannerSectionMobile: '244px', + mobileDetailsTitle: '230px', }, zIndex: { content: 0, 10: 10, + 20: 20, leafletSvg: 200, text: 200, loader: 300, @@ -152,4 +156,17 @@ module.exports = { }, }, }, + plugins: [ + require('tailwindcss-animate'), + plugin(({ matchUtilities, theme }) => { + matchUtilities( + { + 'animation-delay': value => ({ 'animation-delay': value }), + }, + { + values: theme('transitionDelay'), + }, + ); + }), + ], }; diff --git a/frontend/yarn.lock b/frontend/yarn.lock index f943fdb2e..41e06de26 100644 --- a/frontend/yarn.lock +++ b/frontend/yarn.lock @@ -60,10 +60,10 @@ dependencies: "@react-hook/event" "^1.2.2" -"@adobe/css-tools@^4.0.1": - version "4.0.1" - resolved "https://registry.yarnpkg.com/@adobe/css-tools/-/css-tools-4.0.1.tgz#b38b444ad3aa5fedbb15f2f746dcd934226a12dd" - integrity sha512-+u76oB43nOHrF4DDWRLWDCtci7f3QJoEBigemIdIeTi1ODqjx6Tad9NCVnPRwewWlKkVab5PlK8DCtPTyX7S8g== +"@adobe/css-tools@^4.4.0": + version "4.4.0" + resolved "https://registry.yarnpkg.com/@adobe/css-tools/-/css-tools-4.4.0.tgz#728c484f4e10df03d5a3acd0d8adcbbebff8ad63" + integrity sha512-Ff9+ksdQQB3rMncgqDK78uLznstjyfIf2Arnh22pW8kBpLs6rpKDwgnZT46hin5Hl1WzazzK64DOrhSwYpS7bQ== "@alloc/quick-lru@^5.2.0": version "5.2.0" @@ -233,15 +233,6 @@ json5 "^2.2.1" semver "^6.3.0" -"@babel/generator@^7.10.5": - version "7.11.6" - resolved "https://registry.yarnpkg.com/@babel/generator/-/generator-7.11.6.tgz#b868900f81b163b4d464ea24545c61cbac4dc620" - integrity sha512-DWtQ1PV3r+cLbySoHrwn9RWEgKMBLLma4OBQloPRyDYvc5msJM9kvTLo1YnlJd1P/ZuKbdli3ijr5q3FvAF3uA== - dependencies: - "@babel/types" "^7.11.5" - jsesc "^2.5.1" - source-map "^0.5.0" - "@babel/generator@^7.12.10": version "7.12.11" resolved "https://registry.yarnpkg.com/@babel/generator/-/generator-7.12.11.tgz#98a7df7b8c358c9a37ab07a24056853016aba3af" @@ -287,13 +278,6 @@ "@jridgewell/gen-mapping" "^0.3.2" jsesc "^2.5.1" -"@babel/helper-annotate-as-pure@^7.0.0": - version "7.10.4" - resolved "https://registry.yarnpkg.com/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.10.4.tgz#5bf0d495a3f757ac3bda48b5bf3b3ba309c72ba3" - integrity sha512-XQlqKQP4vXFB7BN8fEEerrmYvHp3fK/rBkRFz9jaJbzK0B1DSfej9Kc7ZzE8Z/OnId1jpJdNAZ3BFQjWG68rcA== - dependencies: - "@babel/types" "^7.10.4" - "@babel/helper-annotate-as-pure@^7.10.4": version "7.12.10" resolved "https://registry.yarnpkg.com/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.12.10.tgz#54ab9b000e60a93644ce17b3f37d313aaf1d115d" @@ -474,7 +458,7 @@ dependencies: "@babel/types" "^7.18.9" -"@babel/helper-module-imports@^7.0.0", "@babel/helper-module-imports@^7.10.4", "@babel/helper-module-imports@^7.12.1", "@babel/helper-module-imports@^7.12.5": +"@babel/helper-module-imports@^7.10.4", "@babel/helper-module-imports@^7.12.1", "@babel/helper-module-imports@^7.12.5": version "7.12.5" resolved "https://registry.yarnpkg.com/@babel/helper-module-imports/-/helper-module-imports-7.12.5.tgz#1bfc0229f794988f76ed0a4d4e90860850b54dfb" integrity sha512-SR713Ogqg6++uexFRORf/+nPXMmWIn80TALu0uaFb+iQIUoR7bOC7zBWyzBs5b3tBBJXuyD0cRu1F15GyzjOWA== @@ -725,11 +709,6 @@ resolved "https://registry.yarnpkg.com/@babel/parser/-/parser-7.12.7.tgz#fee7b39fe809d0e73e5b25eecaf5780ef3d73056" integrity sha512-oWR02Ubp4xTLCAqPRiNIuMVgNO5Aif/xpXtabhzW2HWUD47XJsAB4Zd/Rg30+XeQA3juXigV7hlquOTmwqLiwg== -"@babel/parser@^7.10.5": - version "7.11.5" - resolved "https://registry.yarnpkg.com/@babel/parser/-/parser-7.11.5.tgz#c7ff6303df71080ec7a4f5b8c003c58f1cf51037" - integrity sha512-X9rD8qqm695vgmeaQ4fvz/o3+Wk4ZzQvSHkDBgpYKxpD4qTAUm88ZKtHkVqIOsYFFbIQ6wQYhC6q7pjqVK0E0Q== - "@babel/parser@^7.12.10": version "7.12.11" resolved "https://registry.yarnpkg.com/@babel/parser/-/parser-7.12.11.tgz#9ce3595bcd74bc5c466905e86c535b8b25011e79" @@ -750,11 +729,6 @@ resolved "https://registry.yarnpkg.com/@babel/parser/-/parser-7.15.7.tgz#0c3ed4a2eb07b165dfa85b3cc45c727334c4edae" integrity sha512-rycZXvQ+xS9QyIcJ9HXeDWf1uxqlbVFAUq0Rq0dbc50Zb/+wUe/ehyfzGfm9KZZF0kBejYgxltBXocP+gKdL2g== -"@babel/parser@^7.8.3": - version "7.9.4" - resolved "https://registry.yarnpkg.com/@babel/parser/-/parser-7.9.4.tgz#68a35e6b0319bbc014465be43828300113f2f2e8" - integrity sha512-bC49otXX6N0/VYhgOMh4gnP26E9xnDZK3TmbNpxYzzz9BQLBosQwfyOe9/cXUU3txYhTzLCbcqd5c8y/OmCjHA== - "@babel/plugin-proposal-async-generator-functions@^7.12.1": version "7.12.1" resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-async-generator-functions/-/plugin-proposal-async-generator-functions-7.12.1.tgz#dc6c1170e27d8aca99ff65f4925bd06b1c90550e" @@ -1436,13 +1410,6 @@ dependencies: regenerator-runtime "^0.13.4" -"@babel/runtime@^7.24.0": - version "7.24.1" - resolved "https://registry.yarnpkg.com/@babel/runtime/-/runtime-7.24.1.tgz#431f9a794d173b53720e69a6464abc6f0e2a5c57" - integrity sha512-+BIznRzyqBf+2wCTxcKE3wDjfGeCoVE61KSHGpkzqrLi8qxqFwBeUFyId2cxkTmm55fzDGnm0+yCxaxygrLUnQ== - dependencies: - regenerator-runtime "^0.14.0" - "@babel/template@^7.10.4", "@babel/template@^7.12.7", "@babel/template@^7.3.3": version "7.12.7" resolved "https://registry.yarnpkg.com/@babel/template/-/template-7.12.7.tgz#c817233696018e39fbb6c491d2fb684e05ed43bc" @@ -1485,7 +1452,7 @@ globals "^11.1.0" lodash "^4.17.19" -"@babel/traverse@^7.12.1", "@babel/traverse@^7.12.5", "@babel/traverse@^7.12.9", "@babel/traverse@^7.4.5": +"@babel/traverse@^7.12.1", "@babel/traverse@^7.12.5", "@babel/traverse@^7.12.9": version "7.12.9" resolved "https://registry.yarnpkg.com/@babel/traverse/-/traverse-7.12.9.tgz#fad26c972eabbc11350e0b695978de6cc8e8596f" integrity sha512-iX9ajqnLdoU1s1nHt36JDI9KG4k+vmI8WgjK5d+aDTwQbL2fUnzedNedssA645Ede3PM2ma1n8Q4h2ohwXgMXw== @@ -1547,22 +1514,7 @@ debug "^4.1.0" globals "^11.1.0" -"@babel/traverse@^7.8.3": - version "7.10.5" - resolved "https://registry.yarnpkg.com/@babel/traverse/-/traverse-7.10.5.tgz#77ce464f5b258be265af618d8fddf0536f20b564" - integrity sha512-yc/fyv2gUjPqzTz0WHeRJH2pv7jA9kA7mBX2tXl/x5iOE81uaVPuGPtaYk7wmkx4b67mQ7NqI8rmT2pF47KYKQ== - dependencies: - "@babel/code-frame" "^7.10.4" - "@babel/generator" "^7.10.5" - "@babel/helper-function-name" "^7.10.4" - "@babel/helper-split-export-declaration" "^7.10.4" - "@babel/parser" "^7.10.5" - "@babel/types" "^7.10.5" - debug "^4.1.0" - globals "^11.1.0" - lodash "^4.17.19" - -"@babel/types@^7.0.0", "@babel/types@^7.10.4", "@babel/types@^7.11.0", "@babel/types@^7.11.5", "@babel/types@^7.12.1", "@babel/types@^7.12.5", "@babel/types@^7.12.7", "@babel/types@^7.3.0", "@babel/types@^7.3.3": +"@babel/types@^7.0.0", "@babel/types@^7.10.4", "@babel/types@^7.11.0", "@babel/types@^7.12.1", "@babel/types@^7.12.5", "@babel/types@^7.12.7", "@babel/types@^7.3.0", "@babel/types@^7.3.3": version "7.12.7" resolved "https://registry.yarnpkg.com/@babel/types/-/types-7.12.7.tgz#6039ff1e242640a29452c9ae572162ec9a8f5d13" integrity sha512-MNyI92qZq6jrQkXvtIiykvl4WtoRrVV9MPn+ZfsoEENjiWcBQ3ZSHrkxnJWgWtLX3XXqX5hrSQ+X69wkmesXuQ== @@ -1698,13 +1650,6 @@ resolved "https://registry.yarnpkg.com/@emotion/hash/-/hash-0.9.0.tgz#c5153d50401ee3c027a57a177bc269b16d889cb7" integrity sha512-14FtKiHhy2QoPIzdTcvh//8OyBlknNs2nXRwIhG904opCby3l+9Xaf/wuPvICBF0rc1ZCNBd3nKe9cd2mecVkQ== -"@emotion/is-prop-valid@^1.1.0": - version "1.2.0" - resolved "https://registry.yarnpkg.com/@emotion/is-prop-valid/-/is-prop-valid-1.2.0.tgz#7f2d35c97891669f7e276eb71c83376a5dc44c83" - integrity sha512-3aDpDprjM0AwaxGE09bOPkNxHpBd+kA6jty3RnaEXdweX1DF1U3VQpPYb0g1IStAuK7SVQ1cy+bNBBKp4W3Fjg== - dependencies: - "@emotion/memoize" "^0.8.0" - "@emotion/memoize@^0.8.0": version "0.8.0" resolved "https://registry.yarnpkg.com/@emotion/memoize/-/memoize-0.8.0.tgz#f580f9beb67176fa57aae70b08ed510e1b18980f" @@ -1740,16 +1685,6 @@ resolved "https://registry.yarnpkg.com/@emotion/sheet/-/sheet-1.2.0.tgz#771b1987855839e214fc1741bde43089397f7be5" integrity sha512-OiTkRgpxescko+M51tZsMq7Puu/KP55wMT8BgpcXVG2hqXc0Vo0mfymJ/Uj24Hp0i083ji/o0aLddh08UEjq8w== -"@emotion/stylis@^0.8.4": - version "0.8.5" - resolved "https://registry.yarnpkg.com/@emotion/stylis/-/stylis-0.8.5.tgz#deacb389bd6ee77d1e7fcaccce9e16c5c7e78e04" - integrity sha512-h6KtPihKFn3T9fuIrwvXXUOwlx3rfUvfZIcP5a6rh8Y7zjE3O06hT5Ss4S/YI1AYhuZ1kjaE/5EaOOI2NqSylQ== - -"@emotion/unitless@^0.7.4": - version "0.7.5" - resolved "https://registry.yarnpkg.com/@emotion/unitless/-/unitless-0.7.5.tgz#77211291c1900a700b8a78cfafda3160d76949ed" - integrity sha512-OWORNpfjMsSSUBVrRBVGECkhWcULOAJz9ZW8uK9qgxD+87M7jHRcvh/A96XXNhXTLmKcoYSQtBEX7lHMO7YRwg== - "@emotion/unitless@^0.8.0": version "0.8.0" resolved "https://registry.yarnpkg.com/@emotion/unitless/-/unitless-0.8.0.tgz#a4a36e9cbdc6903737cd20d38033241e1b8833db" @@ -2131,17 +2066,6 @@ slash "^3.0.0" write-file-atomic "^4.0.1" -"@jest/types@^26.6.2": - version "26.6.2" - resolved "https://registry.yarnpkg.com/@jest/types/-/types-26.6.2.tgz#bef5a532030e1d88a2f5a6d933f84e97226ed48e" - integrity sha512-fC6QCp7Sc5sX6g8Tvbmj4XUTbyrik0akgRy03yjXbQaBWWNWGE7SGtJk98m0N8nzegD/7SggrUlivxo5ax4KWQ== - dependencies: - "@types/istanbul-lib-coverage" "^2.0.0" - "@types/istanbul-reports" "^3.0.0" - "@types/node" "*" - "@types/yargs" "^15.0.0" - chalk "^4.0.0" - "@jest/types@^27.1.1": version "27.1.1" resolved "https://registry.yarnpkg.com/@jest/types/-/types-27.1.1.tgz#77a3fc014f906c65752d12123a0134359707c0ad" @@ -2247,10 +2171,10 @@ resolved "https://registry.yarnpkg.com/@next/env/-/env-13.1.6.tgz#c4925609f16142ded1a5cb833359ab17359b7a93" integrity sha512-s+W9Fdqh5MFk6ECrbnVmmAOwxKQuhGMT7xXHrkYIBMBcTiOqNWhv5KbJIboKR5STXxNXl32hllnvKaffzFaWQg== -"@next/eslint-plugin-next@14.1.1", "@next/eslint-plugin-next@^14.1.1": - version "14.1.1" - resolved "https://registry.yarnpkg.com/@next/eslint-plugin-next/-/eslint-plugin-next-14.1.1.tgz#123b8ca9d52fd54c343a787d4e0aa0737c4c7d97" - integrity sha512-NP1WoGFnFLpqqCWgGFjnn/sTwUExdPyjeFKRdQP1X/bL/tjAQ/TXDmYqw6vzGaP5NaZ2u6xzg+N/0nd7fOPOGQ== +"@next/eslint-plugin-next@14.2.10", "@next/eslint-plugin-next@^14.2.10": + version "14.2.10" + resolved "https://registry.yarnpkg.com/@next/eslint-plugin-next/-/eslint-plugin-next-14.2.10.tgz#9733254969a193e4815182490f51c9668ce289c7" + integrity sha512-LqJcPP5QkmKewpwO3zX8SoVfWwKn5NKwfcs/j52oJa5EsEDyUsqjsmj5IRzmAJA0FSuB4umhjG55AGayY306fw== dependencies: glob "10.3.10" @@ -2371,6 +2295,127 @@ resolved "https://registry.yarnpkg.com/@polka/url/-/url-1.0.0-next.15.tgz#6a9d143f7f4f49db2d782f9e1c8839a29b43ae23" integrity sha512-15spi3V28QdevleWBNXE4pIls3nFZmBbUGrW9IVPwiQczuSb9n76TCB4bsk8TSel+I1OkHEdPhu5QKMfY6rQHA== +"@radix-ui/primitive@1.1.0": + version "1.1.0" + resolved "https://registry.yarnpkg.com/@radix-ui/primitive/-/primitive-1.1.0.tgz#42ef83b3b56dccad5d703ae8c42919a68798bbe2" + integrity sha512-4Z8dn6Upk0qk4P74xBhZ6Hd/w0mPEzOOLxy4xiPXOXqjF7jZS0VAKk7/x/H6FyY2zCkYJqePf1G5KmkmNJ4RBA== + +"@radix-ui/react-compose-refs@1.1.0": + version "1.1.0" + resolved "https://registry.yarnpkg.com/@radix-ui/react-compose-refs/-/react-compose-refs-1.1.0.tgz#656432461fc8283d7b591dcf0d79152fae9ecc74" + integrity sha512-b4inOtiaOnYf9KWyO3jAeeCG6FeyfY6ldiEPanbUjWd+xIk5wZeHa8yVwmrJ2vderhu/BQvzCrJI0lHd+wIiqw== + +"@radix-ui/react-context@1.1.0": + version "1.1.0" + resolved "https://registry.yarnpkg.com/@radix-ui/react-context/-/react-context-1.1.0.tgz#6df8d983546cfd1999c8512f3a8ad85a6e7fcee8" + integrity sha512-OKrckBy+sMEgYM/sMmqmErVn0kZqrHPJze+Ql3DzYsDDp0hl0L62nx/2122/Bvps1qz645jlcu2tD9lrRSdf8A== + +"@radix-ui/react-dialog@^1.1.1": + version "1.1.1" + resolved "https://registry.yarnpkg.com/@radix-ui/react-dialog/-/react-dialog-1.1.1.tgz#4906507f7b4ad31e22d7dad69d9330c87c431d44" + integrity sha512-zysS+iU4YP3STKNS6USvFVqI4qqx8EpiwmT5TuCApVEBca+eRCbONi4EgzfNSuVnOXvC5UPHHMjs8RXO6DH9Bg== + dependencies: + "@radix-ui/primitive" "1.1.0" + "@radix-ui/react-compose-refs" "1.1.0" + "@radix-ui/react-context" "1.1.0" + "@radix-ui/react-dismissable-layer" "1.1.0" + "@radix-ui/react-focus-guards" "1.1.0" + "@radix-ui/react-focus-scope" "1.1.0" + "@radix-ui/react-id" "1.1.0" + "@radix-ui/react-portal" "1.1.1" + "@radix-ui/react-presence" "1.1.0" + "@radix-ui/react-primitive" "2.0.0" + "@radix-ui/react-slot" "1.1.0" + "@radix-ui/react-use-controllable-state" "1.1.0" + aria-hidden "^1.1.1" + react-remove-scroll "2.5.7" + +"@radix-ui/react-dismissable-layer@1.1.0": + version "1.1.0" + resolved "https://registry.yarnpkg.com/@radix-ui/react-dismissable-layer/-/react-dismissable-layer-1.1.0.tgz#2cd0a49a732372513733754e6032d3fb7988834e" + integrity sha512-/UovfmmXGptwGcBQawLzvn2jOfM0t4z3/uKffoBlj724+n3FvBbZ7M0aaBOmkp6pqFYpO4yx8tSVJjx3Fl2jig== + dependencies: + "@radix-ui/primitive" "1.1.0" + "@radix-ui/react-compose-refs" "1.1.0" + "@radix-ui/react-primitive" "2.0.0" + "@radix-ui/react-use-callback-ref" "1.1.0" + "@radix-ui/react-use-escape-keydown" "1.1.0" + +"@radix-ui/react-focus-guards@1.1.0": + version "1.1.0" + resolved "https://registry.yarnpkg.com/@radix-ui/react-focus-guards/-/react-focus-guards-1.1.0.tgz#8e9abb472a9a394f59a1b45f3dd26cfe3fc6da13" + integrity sha512-w6XZNUPVv6xCpZUqb/yN9DL6auvpGX3C/ee6Hdi16v2UUy25HV2Q5bcflsiDyT/g5RwbPQ/GIT1vLkeRb+ITBw== + +"@radix-ui/react-focus-scope@1.1.0": + version "1.1.0" + resolved "https://registry.yarnpkg.com/@radix-ui/react-focus-scope/-/react-focus-scope-1.1.0.tgz#ebe2891a298e0a33ad34daab2aad8dea31caf0b2" + integrity sha512-200UD8zylvEyL8Bx+z76RJnASR2gRMuxlgFCPAe/Q/679a/r0eK3MBVYMb7vZODZcffZBdob1EGnky78xmVvcA== + dependencies: + "@radix-ui/react-compose-refs" "1.1.0" + "@radix-ui/react-primitive" "2.0.0" + "@radix-ui/react-use-callback-ref" "1.1.0" + +"@radix-ui/react-id@1.1.0": + version "1.1.0" + resolved "https://registry.yarnpkg.com/@radix-ui/react-id/-/react-id-1.1.0.tgz#de47339656594ad722eb87f94a6b25f9cffae0ed" + integrity sha512-EJUrI8yYh7WOjNOqpoJaf1jlFIH2LvtgAl+YcFqNCa+4hj64ZXmPkAKOFs/ukjz3byN6bdb/AVUqHkI8/uWWMA== + dependencies: + "@radix-ui/react-use-layout-effect" "1.1.0" + +"@radix-ui/react-portal@1.1.1": + version "1.1.1" + resolved "https://registry.yarnpkg.com/@radix-ui/react-portal/-/react-portal-1.1.1.tgz#1957f1eb2e1aedfb4a5475bd6867d67b50b1d15f" + integrity sha512-A3UtLk85UtqhzFqtoC8Q0KvR2GbXF3mtPgACSazajqq6A41mEQgo53iPzY4i6BwDxlIFqWIhiQ2G729n+2aw/g== + dependencies: + "@radix-ui/react-primitive" "2.0.0" + "@radix-ui/react-use-layout-effect" "1.1.0" + +"@radix-ui/react-presence@1.1.0": + version "1.1.0" + resolved "https://registry.yarnpkg.com/@radix-ui/react-presence/-/react-presence-1.1.0.tgz#227d84d20ca6bfe7da97104b1a8b48a833bfb478" + integrity sha512-Gq6wuRN/asf9H/E/VzdKoUtT8GC9PQc9z40/vEr0VCJ4u5XvvhWIrSsCB6vD2/cH7ugTdSfYq9fLJCcM00acrQ== + dependencies: + "@radix-ui/react-compose-refs" "1.1.0" + "@radix-ui/react-use-layout-effect" "1.1.0" + +"@radix-ui/react-primitive@2.0.0": + version "2.0.0" + resolved "https://registry.yarnpkg.com/@radix-ui/react-primitive/-/react-primitive-2.0.0.tgz#fe05715faa9203a223ccc0be15dc44b9f9822884" + integrity sha512-ZSpFm0/uHa8zTvKBDjLFWLo8dkr4MBsiDLz0g3gMUwqgLHz9rTaRRGYDgvZPtBJgYCBKXkS9fzmoySgr8CO6Cw== + dependencies: + "@radix-ui/react-slot" "1.1.0" + +"@radix-ui/react-slot@1.1.0": + version "1.1.0" + resolved "https://registry.yarnpkg.com/@radix-ui/react-slot/-/react-slot-1.1.0.tgz#7c5e48c36ef5496d97b08f1357bb26ed7c714b84" + integrity sha512-FUCf5XMfmW4dtYl69pdS4DbxKy8nj4M7SafBgPllysxmdachynNflAdp/gCsnYWNDnge6tI9onzMp5ARYc1KNw== + dependencies: + "@radix-ui/react-compose-refs" "1.1.0" + +"@radix-ui/react-use-callback-ref@1.1.0": + version "1.1.0" + resolved "https://registry.yarnpkg.com/@radix-ui/react-use-callback-ref/-/react-use-callback-ref-1.1.0.tgz#bce938ca413675bc937944b0d01ef6f4a6dc5bf1" + integrity sha512-CasTfvsy+frcFkbXtSJ2Zu9JHpN8TYKxkgJGWbjiZhFivxaeW7rMeZt7QELGVLaYVfFMsKHjb7Ak0nMEe+2Vfw== + +"@radix-ui/react-use-controllable-state@1.1.0": + version "1.1.0" + resolved "https://registry.yarnpkg.com/@radix-ui/react-use-controllable-state/-/react-use-controllable-state-1.1.0.tgz#1321446857bb786917df54c0d4d084877aab04b0" + integrity sha512-MtfMVJiSr2NjzS0Aa90NPTnvTSg6C/JLCV7ma0W6+OMV78vd8OyRpID+Ng9LxzsPbLeuBnWBA1Nq30AtBIDChw== + dependencies: + "@radix-ui/react-use-callback-ref" "1.1.0" + +"@radix-ui/react-use-escape-keydown@1.1.0": + version "1.1.0" + resolved "https://registry.yarnpkg.com/@radix-ui/react-use-escape-keydown/-/react-use-escape-keydown-1.1.0.tgz#31a5b87c3b726504b74e05dac1edce7437b98754" + integrity sha512-L7vwWlR1kTTQ3oh7g1O0CBF3YCyyTj8NmhLR+phShpyA50HCfBFKVJTpshm9PzLiKmehsrQzTYTpX9HvmC9rhw== + dependencies: + "@radix-ui/react-use-callback-ref" "1.1.0" + +"@radix-ui/react-use-layout-effect@1.1.0": + version "1.1.0" + resolved "https://registry.yarnpkg.com/@radix-ui/react-use-layout-effect/-/react-use-layout-effect-1.1.0.tgz#3c2c8ce04827b26a39e442ff4888d9212268bd27" + integrity sha512-+FPE0rOdziWSrH9athwI1R0HDVbWlEhd+FR+aSDk4uWGmSJ9Z54sdZVDQPZAinJhJXwfT+qnj969mCsT2gfm5w== + "@raruto/leaflet-elevation@1.7.0": version "1.7.0" resolved "https://registry.yarnpkg.com/@raruto/leaflet-elevation/-/leaflet-elevation-1.7.0.tgz#f013886b386ff916690c9c7121c826613a44833d" @@ -2692,43 +2737,40 @@ dependencies: "@tanstack/query-core" "5.51.1" -"@testing-library/dom@^8.5.0": - version "8.19.0" - resolved "https://registry.yarnpkg.com/@testing-library/dom/-/dom-8.19.0.tgz#bd3f83c217ebac16694329e413d9ad5fdcfd785f" - integrity sha512-6YWYPPpxG3e/xOo6HIWwB/58HukkwIVTOaZ0VwdMVjhRUX/01E4FtQbck9GazOOj7MXHc5RBzMrU86iBJHbI+A== +"@testing-library/dom@^10.4.0": + version "10.4.0" + resolved "https://registry.yarnpkg.com/@testing-library/dom/-/dom-10.4.0.tgz#82a9d9462f11d240ecadbf406607c6ceeeff43a8" + integrity sha512-pemlzrSESWbdAloYml3bAJMEfNh1Z7EduzqPKprCH5S341frlpYnUEW0H72dLxa6IsYr+mPno20GiSm+h9dEdQ== dependencies: "@babel/code-frame" "^7.10.4" "@babel/runtime" "^7.12.5" - "@types/aria-query" "^4.2.0" - aria-query "^5.0.0" + "@types/aria-query" "^5.0.1" + aria-query "5.3.0" chalk "^4.1.0" dom-accessibility-api "^0.5.9" - lz-string "^1.4.4" + lz-string "^1.5.0" pretty-format "^27.0.2" -"@testing-library/jest-dom@^5.16.5": - version "5.16.5" - resolved "https://registry.yarnpkg.com/@testing-library/jest-dom/-/jest-dom-5.16.5.tgz#3912846af19a29b2dbf32a6ae9c31ef52580074e" - integrity sha512-N5ixQ2qKpi5OLYfwQmUb/5mSV9LneAcaUfp32pn4yCnpb8r/Yz0pXFPck21dIicKmi+ta5WRAknkZCfA8refMA== +"@testing-library/jest-dom@^6.4.8": + version "6.4.8" + resolved "https://registry.yarnpkg.com/@testing-library/jest-dom/-/jest-dom-6.4.8.tgz#9c435742b20c6183d4e7034f2b329d562c079daa" + integrity sha512-JD0G+Zc38f5MBHA4NgxQMR5XtO5Jx9g86jqturNTt2WUfRmLDIY7iKkWHDCCTiDuFMre6nxAD5wHw9W5kI4rGw== dependencies: - "@adobe/css-tools" "^4.0.1" + "@adobe/css-tools" "^4.4.0" "@babel/runtime" "^7.9.2" - "@types/testing-library__jest-dom" "^5.9.1" aria-query "^5.0.0" chalk "^3.0.0" css.escape "^1.5.1" - dom-accessibility-api "^0.5.6" - lodash "^4.17.15" + dom-accessibility-api "^0.6.3" + lodash "^4.17.21" redent "^3.0.0" -"@testing-library/react@^13.4.0": - version "13.4.0" - resolved "https://registry.yarnpkg.com/@testing-library/react/-/react-13.4.0.tgz#6a31e3bf5951615593ad984e96b9e5e2d9380966" - integrity sha512-sXOGON+WNTh3MLE9rve97ftaZukN3oNf2KjDy7YTx6hcTO2uuLHuCGynMDhFwGw/jYf4OJ2Qk0i4i79qMNNkyw== +"@testing-library/react@^16.0.0": + version "16.0.0" + resolved "https://registry.yarnpkg.com/@testing-library/react/-/react-16.0.0.tgz#0a1e0c7a3de25841c3591b8cb7fb0cf0c0a27321" + integrity sha512-guuxUKRWQ+FgNX0h0NS0FIq3Q3uLtWVpBzcLOggmfMoUpgBnzBzvLLd4fbm6yS8ydJd94cIfY4yP9qUQjM2KwQ== dependencies: "@babel/runtime" "^7.12.5" - "@testing-library/dom" "^8.5.0" - "@types/react-dom" "^18.0.0" "@tootallnate/once@2": version "2.0.0" @@ -2760,10 +2802,10 @@ resolved "https://registry.yarnpkg.com/@tsconfig/node16/-/node16-1.0.2.tgz#423c77877d0569db20e1fc80885ac4118314010e" integrity sha512-eZxlbI8GZscaGS7kkc/trHTT5xgrjH3/1n2JDwusC9iahPKWMRvRjJSAN5mCXviuTGQ/lHnhvv8Q1YTpnfz9gA== -"@types/aria-query@^4.2.0": - version "4.2.0" - resolved "https://registry.yarnpkg.com/@types/aria-query/-/aria-query-4.2.0.tgz#14264692a9d6e2fa4db3df5e56e94b5e25647ac0" - integrity sha512-iIgQNzCm0v7QMhhe4Jjn9uRh+I6GoPmt03CbEtwx3ao8/EfoQcmgtqH4vQ5Db/lxiIGaWDv6nwvunuh0RyX0+A== +"@types/aria-query@^5.0.1": + version "5.0.4" + resolved "https://registry.yarnpkg.com/@types/aria-query/-/aria-query-5.0.4.tgz#1a31c3d378850d2778dabb6374d036dcba4ba708" + integrity sha512-rfT93uj5s0PRL7EzccGMs3brplhcrghnDoV26NqKhCAS1hVo+WdNsPvE/yb6ilfr5hi2MEk6d5EWJTKdxg8jVw== "@types/babel__core@^7.1.14": version "7.1.16" @@ -2828,7 +2870,7 @@ dependencies: "@types/node" "*" -"@types/hoist-non-react-statics@*", "@types/hoist-non-react-statics@^3.3.1": +"@types/hoist-non-react-statics@^3.3.1": version "3.3.1" resolved "https://registry.yarnpkg.com/@types/hoist-non-react-statics/-/hoist-non-react-statics-3.3.1.tgz#1124aafe5118cb591977aeb1ceaaed1070eb039f" integrity sha512-iMIqiko6ooLrTh1joXodJK5X9xeEALT1kM5G3ZLhD3hszxBdIEd5C75U834D9mLcINgD4OyZf5uQXjkuYydWvA== @@ -2855,14 +2897,6 @@ dependencies: "@types/istanbul-lib-report" "*" -"@types/jest@*": - version "26.0.15" - resolved "https://registry.yarnpkg.com/@types/jest/-/jest-26.0.15.tgz#12e02c0372ad0548e07b9f4e19132b834cb1effe" - integrity sha512-s2VMReFXRg9XXxV+CW9e5Nz8fH2K1aEhwgjUqPPbQd7g95T0laAcvLv032EhFHIa5GHsZ8W7iJEQVaJq6k3Gog== - dependencies: - jest-diff "^26.0.0" - pretty-format "^26.0.0" - "@types/jest@27.0.2": version "27.0.2" resolved "https://registry.yarnpkg.com/@types/jest/-/jest-27.0.2.tgz#ac383c4d4aaddd29bbf2b916d8d105c304a5fcd7" @@ -2933,15 +2967,12 @@ resolved "https://registry.yarnpkg.com/@types/minimist/-/minimist-1.2.1.tgz#283f669ff76d7b8260df8ab7a4262cc83d988256" integrity sha512-fZQQafSREFyuZcdWFAExYjBiCL7AUCdgsk80iO0q4yihYYdcIiH28CcuPTGFgLOCC8RlW49GSQxdHwZP+I7CNg== -"@types/node@*": - version "14.14.10" - resolved "https://registry.yarnpkg.com/@types/node/-/node-14.14.10.tgz#5958a82e41863cfc71f2307b3748e3491ba03785" - integrity sha512-J32dgx2hw8vXrSbu4ZlVhn1Nm3GbeCFNw2FWL8S5QKucHGY0cyNwjdQdO+KMBZ4wpmC7KhLCiNsdk1RFRIYUQQ== - -"@types/node@16.9.4": - version "16.9.4" - resolved "https://registry.yarnpkg.com/@types/node/-/node-16.9.4.tgz#a12f0ee7847cf17a97f6fdf1093cb7a9af23cca4" - integrity sha512-KDazLNYAGIuJugdbULwFZULF9qQ13yNWEBFnfVpqlpgAAo6H/qnM9RjBgh0A0kmHf3XxAKLdN5mTIng9iUvVLA== +"@types/node@*", "@types/node@22.5.4": + version "22.5.4" + resolved "https://registry.yarnpkg.com/@types/node/-/node-22.5.4.tgz#83f7d1f65bc2ed223bdbf57c7884f1d5a4fa84e8" + integrity sha512-FDuKUJQm/ju9fT/SeX/6+gBzoPzlVCzfzmGkwKvRHQVxi4BntVbyIwf6a4Xn62mrvndLiml6z/UBXIdEVjQLXg== + dependencies: + undici-types "~6.19.2" "@types/normalize-package-data@^2.4.0": version "2.4.0" @@ -2968,14 +2999,7 @@ resolved "https://registry.yarnpkg.com/@types/prop-types/-/prop-types-15.7.3.tgz#2ab0d5da2e5815f94b0b9d4b95d1e5f243ab2ca7" integrity sha512-KfRL3PuHmqQLOG+2tGpRO26Ctg+Cq1E01D2DMriKEATHgWLfeNDmq9e29Q9WIky0dQ3NPkd1mzYH8Lm936Z9qw== -"@types/react-burger-menu@2.8.7": - version "2.8.7" - resolved "https://registry.yarnpkg.com/@types/react-burger-menu/-/react-burger-menu-2.8.7.tgz#587498c5e74a7fe3f1f610601c81b6efa7334a53" - integrity sha512-MNAvK/pXRtGGpmeV1id2Xd9W9rkIC9ehULPmBiIIcF2oo7C8WPGfHcIBx17HqExbeJIXARXFkenQ7tg2pHZPvQ== - dependencies: - "@types/react" "*" - -"@types/react-dom@^18.0.0", "@types/react-dom@^18.0.8", "@types/react-dom@^18.0.9": +"@types/react-dom@^18.0.8", "@types/react-dom@^18.0.9": version "18.0.9" resolved "https://registry.yarnpkg.com/@types/react-dom/-/react-dom-18.0.9.tgz#ffee5e4bfc2a2f8774b15496474f8e7fe8d0b504" integrity sha512-qnVvHxASt/H7i+XG1U1xMiY5t+IHcPGUK7TDMDzom08xa7e86eCeKOiLZezwCKVxJn6NEiiy2ekgX8aQssjIKg== @@ -3081,22 +3105,6 @@ resolved "https://registry.yarnpkg.com/@types/store/-/store-2.0.2.tgz#6263d4f1aab225032ea55b17d94f3b725a21c943" integrity sha512-ZPHnXkzmGMfk+pHqAGzTSpA9CbsHmJLgkvOl5w52LZ0XTxB1ZIHWZzQ7lEtjTNWScBbsQekg8TjApMXkMe4nkw== -"@types/styled-components@5.1.14": - version "5.1.14" - resolved "https://registry.yarnpkg.com/@types/styled-components/-/styled-components-5.1.14.tgz#e9cf8cdb5eef9d139628183a84c083f630635d67" - integrity sha512-d6P1/tyNytqKwam3cQXq7a9uPtovc/mdAs7dBiz1YbDdNIT3X4WmuFU78YdSYh84TXVuhOwezZ3EeKuNBhwsHQ== - dependencies: - "@types/hoist-non-react-statics" "*" - "@types/react" "*" - csstype "^3.0.2" - -"@types/testing-library__jest-dom@^5.9.1": - version "5.9.5" - resolved "https://registry.yarnpkg.com/@types/testing-library__jest-dom/-/testing-library__jest-dom-5.9.5.tgz#5bf25c91ad2d7b38f264b12275e5c92a66d849b0" - integrity sha512-ggn3ws+yRbOHog9GxnXiEZ/35Mow6YtPZpd7Z5mKDeZS/o7zx3yAle0ov/wjhVB5QT4N2Dt+GNoGCdqkBGCajQ== - dependencies: - "@types/jest" "*" - "@types/tough-cookie@*": version "4.0.2" resolved "https://registry.yarnpkg.com/@types/tough-cookie/-/tough-cookie-4.0.2.tgz#6286b4c7228d58ab7866d19716f3696e03a09397" @@ -3117,13 +3125,6 @@ resolved "https://registry.yarnpkg.com/@types/yargs-parser/-/yargs-parser-15.0.0.tgz#cb3f9f741869e20cce330ffbeb9271590483882d" integrity sha512-FA/BWv8t8ZWJ+gEOnLLd8ygxH/2UFbAvgEonyfN6yWGLKc7zVjbpl2Y4CTjid9h2RfgPP6SEt6uHwEOply00yw== -"@types/yargs@^15.0.0": - version "15.0.11" - resolved "https://registry.yarnpkg.com/@types/yargs/-/yargs-15.0.11.tgz#361d7579ecdac1527687bcebf9946621c12ab78c" - integrity sha512-jfcNBxHFYJ4nPIacsi3woz1+kvUO6s1CyeEhtnDHBjHUMNj5UlW2GynmnSgiJJEdNg9yW5C8lfoNRZrHGv5EqA== - dependencies: - "@types/yargs-parser" "*" - "@types/yargs@^16.0.0": version "16.0.4" resolved "https://registry.yarnpkg.com/@types/yargs/-/yargs-16.0.4.tgz#26aad98dd2c2a38e421086ea9ad42b9e51642977" @@ -3162,6 +3163,23 @@ semver "^7.5.4" ts-api-utils "^1.0.1" +"@typescript-eslint/eslint-plugin@^5.4.2 || ^6.0.0 || 7.0.0 - 7.2.0": + version "7.2.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/eslint-plugin/-/eslint-plugin-7.2.0.tgz#5a5fcad1a7baed85c10080d71ad901f98c38d5b7" + integrity sha512-mdekAHOqS9UjlmyF/LSs6AIEvfceV749GFxoBAjwAv0nkevfKHWQFDMcBZWUiIC5ft6ePWivXoS36aKQ0Cy3sw== + dependencies: + "@eslint-community/regexpp" "^4.5.1" + "@typescript-eslint/scope-manager" "7.2.0" + "@typescript-eslint/type-utils" "7.2.0" + "@typescript-eslint/utils" "7.2.0" + "@typescript-eslint/visitor-keys" "7.2.0" + debug "^4.3.4" + graphemer "^1.4.0" + ignore "^5.2.4" + natural-compare "^1.4.0" + semver "^7.5.4" + ts-api-utils "^1.0.1" + "@typescript-eslint/parser@7.1.0": version "7.1.0" resolved "https://registry.yarnpkg.com/@typescript-eslint/parser/-/parser-7.1.0.tgz#b89dab90840f7d2a926bf4c23b519576e8c31970" @@ -3173,15 +3191,15 @@ "@typescript-eslint/visitor-keys" "7.1.0" debug "^4.3.4" -"@typescript-eslint/parser@^5.4.2 || ^6.0.0": - version "6.21.0" - resolved "https://registry.yarnpkg.com/@typescript-eslint/parser/-/parser-6.21.0.tgz#af8fcf66feee2edc86bc5d1cf45e33b0630bf35b" - integrity sha512-tbsV1jPne5CkFQCgPBcDOt30ItF7aJoZL997JSF7MhGQqOeT3svWRYxiqlfA5RUdlHN6Fi+EI9bxqbdyAUZjYQ== +"@typescript-eslint/parser@^5.4.2 || ^6.0.0 || 7.0.0 - 7.2.0": + version "7.2.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/parser/-/parser-7.2.0.tgz#44356312aea8852a3a82deebdacd52ba614ec07a" + integrity sha512-5FKsVcHTk6TafQKQbuIVkXq58Fnbkd2wDL4LB7AURN7RUOu1utVP+G8+6u3ZhEroW3DF6hyo3ZEXxgKgp4KeCg== dependencies: - "@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" + "@typescript-eslint/scope-manager" "7.2.0" + "@typescript-eslint/types" "7.2.0" + "@typescript-eslint/typescript-estree" "7.2.0" + "@typescript-eslint/visitor-keys" "7.2.0" debug "^4.3.4" "@typescript-eslint/scope-manager@5.62.0": @@ -3192,14 +3210,6 @@ "@typescript-eslint/types" "5.62.0" "@typescript-eslint/visitor-keys" "5.62.0" -"@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.21.0" - "@typescript-eslint/visitor-keys" "6.21.0" - "@typescript-eslint/scope-manager@7.1.0": version "7.1.0" resolved "https://registry.yarnpkg.com/@typescript-eslint/scope-manager/-/scope-manager-7.1.0.tgz#e4babaa39a3d612eff0e3559f3e99c720a2b4a54" @@ -3208,6 +3218,14 @@ "@typescript-eslint/types" "7.1.0" "@typescript-eslint/visitor-keys" "7.1.0" +"@typescript-eslint/scope-manager@7.2.0": + version "7.2.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/scope-manager/-/scope-manager-7.2.0.tgz#cfb437b09a84f95a0930a76b066e89e35d94e3da" + integrity sha512-Qh976RbQM/fYtjx9hs4XkayYujB/aPwglw2choHmf3zBjB4qOywWSdt9+KLRdHubGcoSwBnXUH2sR3hkyaERRg== + dependencies: + "@typescript-eslint/types" "7.2.0" + "@typescript-eslint/visitor-keys" "7.2.0" + "@typescript-eslint/type-utils@7.1.0": version "7.1.0" resolved "https://registry.yarnpkg.com/@typescript-eslint/type-utils/-/type-utils-7.1.0.tgz#372dfa470df181bcee0072db464dc778b75ed722" @@ -3218,21 +3236,31 @@ debug "^4.3.4" ts-api-utils "^1.0.1" +"@typescript-eslint/type-utils@7.2.0": + version "7.2.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/type-utils/-/type-utils-7.2.0.tgz#7be5c30e9b4d49971b79095a1181324ef6089a19" + integrity sha512-xHi51adBHo9O9330J8GQYQwrKBqbIPJGZZVQTHHmy200hvkLZFWJIFtAG/7IYTWUyun6DE6w5InDReePJYJlJA== + dependencies: + "@typescript-eslint/typescript-estree" "7.2.0" + "@typescript-eslint/utils" "7.2.0" + debug "^4.3.4" + ts-api-utils "^1.0.1" + "@typescript-eslint/types@5.62.0": version "5.62.0" resolved "https://registry.yarnpkg.com/@typescript-eslint/types/-/types-5.62.0.tgz#258607e60effa309f067608931c3df6fed41fd2f" integrity sha512-87NVngcbVXUahrRTqIK27gD2t5Cu1yuCXxbLcFtCzZGlfyVWWh8mLHkoxzjsB6DDNnvdL+fW8MiwPEJyGJQDgQ== -"@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/types@7.1.0": version "7.1.0" resolved "https://registry.yarnpkg.com/@typescript-eslint/types/-/types-7.1.0.tgz#52a86d6236fda646e7e5fe61154991dc0dc433ef" integrity sha512-qTWjWieJ1tRJkxgZYXx6WUYtWlBc48YRxgY2JN1aGeVpkhmnopq+SUC8UEVGNXIvWH7XyuTjwALfG6bFEgCkQA== +"@typescript-eslint/types@7.2.0": + version "7.2.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/types/-/types-7.2.0.tgz#0feb685f16de320e8520f13cca30779c8b7c403f" + integrity sha512-XFtUHPI/abFhm4cbCDc5Ykc8npOKBSJePY3a3s+lwumt7XWJuzP5cZcfZ610MIPHjQjNsOLlYK8ASPaNG8UiyA== + "@typescript-eslint/typescript-estree@5.62.0": version "5.62.0" resolved "https://registry.yarnpkg.com/@typescript-eslint/typescript-estree/-/typescript-estree-5.62.0.tgz#7d17794b77fabcac615d6a48fb143330d962eb9b" @@ -3246,13 +3274,13 @@ semver "^7.3.7" tsutils "^3.21.0" -"@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== +"@typescript-eslint/typescript-estree@7.1.0": + version "7.1.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/typescript-estree/-/typescript-estree-7.1.0.tgz#419b1310f061feee6df676c5bed460537310c593" + integrity sha512-k7MyrbD6E463CBbSpcOnwa8oXRdHzH1WiVzOipK3L5KSML92ZKgUBrTlehdi7PEIMT8k0bQixHUGXggPAlKnOQ== dependencies: - "@typescript-eslint/types" "6.21.0" - "@typescript-eslint/visitor-keys" "6.21.0" + "@typescript-eslint/types" "7.1.0" + "@typescript-eslint/visitor-keys" "7.1.0" debug "^4.3.4" globby "^11.1.0" is-glob "^4.0.3" @@ -3260,13 +3288,13 @@ semver "^7.5.4" ts-api-utils "^1.0.1" -"@typescript-eslint/typescript-estree@7.1.0": - version "7.1.0" - resolved "https://registry.yarnpkg.com/@typescript-eslint/typescript-estree/-/typescript-estree-7.1.0.tgz#419b1310f061feee6df676c5bed460537310c593" - integrity sha512-k7MyrbD6E463CBbSpcOnwa8oXRdHzH1WiVzOipK3L5KSML92ZKgUBrTlehdi7PEIMT8k0bQixHUGXggPAlKnOQ== +"@typescript-eslint/typescript-estree@7.2.0": + version "7.2.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/typescript-estree/-/typescript-estree-7.2.0.tgz#5beda2876c4137f8440c5a84b4f0370828682556" + integrity sha512-cyxS5WQQCoBwSakpMrvMXuMDEbhOo9bNHHrNcEWis6XHx6KF518tkF1wBvKIn/tpq5ZpUYK7Bdklu8qY0MsFIA== dependencies: - "@typescript-eslint/types" "7.1.0" - "@typescript-eslint/visitor-keys" "7.1.0" + "@typescript-eslint/types" "7.2.0" + "@typescript-eslint/visitor-keys" "7.2.0" debug "^4.3.4" globby "^11.1.0" is-glob "^4.0.3" @@ -3287,6 +3315,19 @@ "@typescript-eslint/typescript-estree" "7.1.0" semver "^7.5.4" +"@typescript-eslint/utils@7.2.0": + version "7.2.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/utils/-/utils-7.2.0.tgz#fc8164be2f2a7068debb4556881acddbf0b7ce2a" + integrity sha512-YfHpnMAGb1Eekpm3XRK8hcMwGLGsnT6L+7b2XyRv6ouDuJU1tZir1GS2i0+VXRatMwSI1/UfcyPe53ADkU+IuA== + dependencies: + "@eslint-community/eslint-utils" "^4.4.0" + "@types/json-schema" "^7.0.12" + "@types/semver" "^7.5.0" + "@typescript-eslint/scope-manager" "7.2.0" + "@typescript-eslint/types" "7.2.0" + "@typescript-eslint/typescript-estree" "7.2.0" + semver "^7.5.4" + "@typescript-eslint/utils@^5.58.0": version "5.62.0" resolved "https://registry.yarnpkg.com/@typescript-eslint/utils/-/utils-5.62.0.tgz#141e809c71636e4a75daa39faed2fb5f4b10df86" @@ -3309,14 +3350,6 @@ "@typescript-eslint/types" "5.62.0" eslint-visitor-keys "^3.3.0" -"@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.21.0" - eslint-visitor-keys "^3.4.1" - "@typescript-eslint/visitor-keys@7.1.0": version "7.1.0" resolved "https://registry.yarnpkg.com/@typescript-eslint/visitor-keys/-/visitor-keys-7.1.0.tgz#576c4ad462ca1378135a55e2857d7aced96ce0a0" @@ -3325,6 +3358,14 @@ "@typescript-eslint/types" "7.1.0" eslint-visitor-keys "^3.4.1" +"@typescript-eslint/visitor-keys@7.2.0": + version "7.2.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/visitor-keys/-/visitor-keys-7.2.0.tgz#5035f177752538a5750cca1af6044b633610bf9e" + integrity sha512-c6EIQRHhcpl6+tO8EMR+kjkkV+ugUNXOmeASA1rlzkd8EPIriavpWoiEz1HR/VLhbVIdhqnV6E7JZm00cBDx2A== + dependencies: + "@typescript-eslint/types" "7.2.0" + eslint-visitor-keys "^3.4.1" + "@ungap/structured-clone@^1.2.0": version "1.2.0" resolved "https://registry.yarnpkg.com/@ungap/structured-clone/-/structured-clone-1.2.0.tgz#756641adb587851b5ccb3e095daf27ae581c8406" @@ -3441,11 +3482,6 @@ ajv@^8.0.1, ajv@^8.6.0: require-from-string "^2.0.2" uri-js "^4.2.2" -amdefine@>=0.0.4: - version "1.0.1" - resolved "https://registry.yarnpkg.com/amdefine/-/amdefine-1.0.1.tgz#4a5282ac164729e93619bcfd3ad151f817ce91f5" - integrity sha1-SlKCrBZHKek2Gbz9OtFR+BfOkfU= - ansi-colors@^4.1.1: version "4.1.1" resolved "https://registry.yarnpkg.com/ansi-colors/-/ansi-colors-4.1.1.tgz#cbb9ae256bf750af1eab344f229aa27fe94ba348" @@ -3570,18 +3606,25 @@ argparse@^2.0.1: resolved "https://registry.yarnpkg.com/argparse/-/argparse-2.0.1.tgz#246f50f3ca78a3240f6c997e8a9bd1eac49e4b38" integrity sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q== -aria-query@^5.0.0: - version "5.0.2" - resolved "https://registry.yarnpkg.com/aria-query/-/aria-query-5.0.2.tgz#0b8a744295271861e1d933f8feca13f9b70cfdc1" - integrity sha512-eigU3vhqSO+Z8BKDnVLN/ompjhf3pYzecKXz8+whRy+9gZu8n1TCGfwzQUUPnqdHl9ax1Hr9031orZ+UOEYr7Q== +aria-hidden@^1.1.1: + version "1.2.4" + resolved "https://registry.yarnpkg.com/aria-hidden/-/aria-hidden-1.2.4.tgz#b78e383fdbc04d05762c78b4a25a501e736c4522" + integrity sha512-y+CcFFwelSXpLZk/7fMB2mUbGtX9lKycf1MWJ7CaTIERyitVlyQx6C+sxcROU2BAJ24OiZyK+8wj2i8AlBoS3A== + dependencies: + tslib "^2.0.0" -aria-query@^5.3.0: +aria-query@5.3.0, aria-query@^5.3.0: version "5.3.0" resolved "https://registry.yarnpkg.com/aria-query/-/aria-query-5.3.0.tgz#650c569e41ad90b51b3d7df5e5eed1c7549c103e" integrity sha512-b0P0sZPKtyu8HkeRAfCq0IfURZK+SuwMjY1UXGBU27wpAiTwQAIlq56IbIO+ytk/JjS1fMR14ee5WBBfKi5J6A== dependencies: dequal "^2.0.3" +aria-query@^5.0.0: + version "5.0.2" + resolved "https://registry.yarnpkg.com/aria-query/-/aria-query-5.0.2.tgz#0b8a744295271861e1d933f8feca13f9b70cfdc1" + integrity sha512-eigU3vhqSO+Z8BKDnVLN/ompjhf3pYzecKXz8+whRy+9gZu8n1TCGfwzQUUPnqdHl9ax1Hr9031orZ+UOEYr7Q== + arr-diff@^4.0.0: version "4.0.0" resolved "https://registry.yarnpkg.com/arr-diff/-/arr-diff-4.0.0.tgz#d6461074febfec71e7e15235761a329a5dc7c520" @@ -3764,15 +3807,6 @@ assign-symbols@^1.0.0: resolved "https://registry.yarnpkg.com/assign-symbols/-/assign-symbols-1.0.0.tgz#59667f41fadd4f20ccbc2bb96b8d4f7f78ec0367" integrity sha512-Q+JC7Whu8HhmTdBph/Tq59IoRtoy6KAm5zzPv00WdujX82lbAL8K7WVjne7vdCsAmbF4AYaDOPyO3k0kl8qIrw== -ast-transform@0.0.0: - version "0.0.0" - resolved "https://registry.yarnpkg.com/ast-transform/-/ast-transform-0.0.0.tgz#74944058887d8283e189d954600947bc98fe0062" - integrity sha1-dJRAWIh9goPhidlUYAlHvJj+AGI= - dependencies: - escodegen "~1.2.0" - esprima "~1.0.4" - through "~2.3.4" - ast-types-flow@^0.0.8: version "0.0.8" resolved "https://registry.yarnpkg.com/ast-types-flow/-/ast-types-flow-0.0.8.tgz#0a85e1c92695769ac13a428bb653e7538bea27d6" @@ -3785,11 +3819,6 @@ ast-types@0.14.2: dependencies: tslib "^2.0.1" -ast-types@^0.7.0: - version "0.7.8" - resolved "https://registry.yarnpkg.com/ast-types/-/ast-types-0.7.8.tgz#902d2e0d60d071bdcd46dc115e1809ed11c138a9" - integrity sha1-kC0uDWDQcb3NRtwRXhgJ7RHBOKk= - astral-regex@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/astral-regex/-/astral-regex-2.0.0.tgz#483143c567aeed4785759c0865786dc77d7d2e31" @@ -3960,17 +3989,7 @@ babel-plugin-macros@^3.1.0: cosmiconfig "^7.0.0" resolve "^1.19.0" -"babel-plugin-styled-components@>= 1.12.0": - version "1.13.2" - resolved "https://registry.yarnpkg.com/babel-plugin-styled-components/-/babel-plugin-styled-components-1.13.2.tgz#ebe0e6deff51d7f93fceda1819e9b96aeb88278d" - integrity sha512-Vb1R3d4g+MUfPQPVDMCGjm3cDocJEUTR7Xq7QS95JWWeksN1wdFRYpD2kulDgI3Huuaf1CZd+NK4KQmqUFh5dA== - dependencies: - "@babel/helper-annotate-as-pure" "^7.0.0" - "@babel/helper-module-imports" "^7.0.0" - babel-plugin-syntax-jsx "^6.18.0" - lodash "^4.17.11" - -babel-plugin-syntax-jsx@6.18.0, babel-plugin-syntax-jsx@^6.18.0: +babel-plugin-syntax-jsx@6.18.0: version "6.18.0" resolved "https://registry.yarnpkg.com/babel-plugin-syntax-jsx/-/babel-plugin-syntax-jsx-6.18.0.tgz#0af32a9a6e13ca7a3fd5069e62d7b0f58d0d8946" integrity sha1-CvMqmm4Tyno/1QaeYtew9Y0NiUY= @@ -4148,22 +4167,6 @@ browser-process-hrtime@^1.0.0: resolved "https://registry.yarnpkg.com/browser-process-hrtime/-/browser-process-hrtime-1.0.0.tgz#3c9b4b7d782c8121e56f10106d84c0d0ffc94626" integrity sha512-9o5UecI3GhkpM6DrXr69PblIuWxPKk9Y0jHBRhdocZ2y7YECBFCsHm79Pr3OyR2AvjhDkabFJaDJMYRazHgsow== -browser-resolve@^1.8.1: - version "1.11.3" - resolved "https://registry.yarnpkg.com/browser-resolve/-/browser-resolve-1.11.3.tgz#9b7cbb3d0f510e4cb86bdbd796124d28b5890af6" - integrity sha512-exDi1BYWB/6raKHmDTCicQfTkqwN5fioMFV4j8BsfMU4R2DK/QfZfK7kOVkmWCNANf0snkBzqGqAJBao9gZMdQ== - dependencies: - resolve "1.1.7" - -browserify-optional@^1.0.0: - version "1.0.1" - resolved "https://registry.yarnpkg.com/browserify-optional/-/browserify-optional-1.0.1.tgz#1e13722cfde0d85f121676c2a72ced533a018869" - integrity sha1-HhNyLP3g2F8SFnbCpyztUzoBiGk= - dependencies: - ast-transform "0.0.0" - ast-types "^0.7.0" - browser-resolve "^1.8.1" - browserslist@^4.12.0: version "4.15.0" resolved "https://registry.yarnpkg.com/browserslist/-/browserslist-4.15.0.tgz#3d48bbca6a3f378e86102ffd017d9a03f122bdb0" @@ -4332,11 +4335,6 @@ camelcase@^6.2.0: resolved "https://registry.yarnpkg.com/camelcase/-/camelcase-6.2.0.tgz#924af881c9d525ac9d87f40d964e5cea982a1809" integrity sha512-c7wVvbw3f37nuobQNtgsgG9POC9qMbNuMQmTCqZv23b6MIz0fcYpBiOlv9gEN/hdLdnZTDQhg6e9Dq5M1vKvfg== -camelize@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/camelize/-/camelize-1.0.0.tgz#164a5483e630fa4321e5af07020e531831b2609b" - integrity sha1-FkpUg+Yw+kMh5a8HAg5TGDGyYJs= - caniuse-lite@^1.0.30001109, caniuse-lite@^1.0.30001164: version "1.0.30001164" resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30001164.tgz#5bbfd64ca605d43132f13cc7fdabb17c3036bfdc" @@ -4465,7 +4463,14 @@ class-utils@^0.3.5: isobject "^3.0.0" static-extend "^0.1.1" -classnames@^2.2.5, classnames@^2.2.6: +class-variance-authority@^0.7.0: + version "0.7.0" + resolved "https://registry.yarnpkg.com/class-variance-authority/-/class-variance-authority-0.7.0.tgz#1c3134d634d80271b1837452b06d821915954522" + integrity sha512-jFI8IQw4hczaL4ALINxqLEXQbWcNjoSkloa4IaufXCJr6QawJyw7tuRysRsrE8w2p/4gGaxKIt/hX3qz/IbD1A== + dependencies: + clsx "2.0.0" + +classnames@^2.2.5: version "2.2.6" resolved "https://registry.yarnpkg.com/classnames/-/classnames-2.2.6.tgz#43935bffdd291f326dad0a205309b38d00f650ce" integrity sha512-JR/iSQOSt+LQIWwrwEzJ9uk0xfN3mTVYMwt1Ir5mUcSN6pU+V4zQFFaJsclJbPuAUQH+yfWef6tm7l1quW3C8Q== @@ -4536,6 +4541,11 @@ clone-regexp@^2.1.0: dependencies: is-regexp "^2.0.0" +clsx@2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/clsx/-/clsx-2.0.0.tgz#12658f3fd98fafe62075595a5c30e43d18f3d00b" + integrity sha512-rQ1+kcj+ttHG0MKVGBUXwayCCF1oh39BF5COIpRzuCEv8Mwjv0XucrI2ExNTOn9IlLifGClWQcU9BrZORvtw6Q== + clsx@^1.1.1: version "1.1.1" resolved "https://registry.yarnpkg.com/clsx/-/clsx-1.1.1.tgz#98b3134f9abbdf23b2663491ace13c5c03a73188" @@ -4769,11 +4779,6 @@ crypto-random-string@^2.0.0: resolved "https://registry.yarnpkg.com/crypto-random-string/-/crypto-random-string-2.0.0.tgz#ef2a7a966ec11083388369baa02ebead229b30d5" integrity sha512-v1plID3y9r/lPhviJ1wrXpLeyUIGAZ2SHNYTEapm7/8A9nLPoyvVp3RK/EPFqn5kEznyWgYZNsRtYYIWbuG8KA== -css-color-keywords@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/css-color-keywords/-/css-color-keywords-1.0.0.tgz#fea2616dc676b2962686b3af8dbdbe180b244e05" - integrity sha1-/qJhbcZ2spYmhrOvjb2+GAskTgU= - css-color-names@0.0.4: version "0.0.4" resolved "https://registry.yarnpkg.com/css-color-names/-/css-color-names-0.0.4.tgz#808adc2e79cf84738069b646cb20ec27beb629e0" @@ -4795,15 +4800,6 @@ css-shorthand-properties@^1.0.0: resolved "https://registry.yarnpkg.com/css-shorthand-properties/-/css-shorthand-properties-1.1.1.tgz#1c808e63553c283f289f2dd56fcee8f3337bd935" integrity sha512-Md+Juc7M3uOdbAFwOYlTrccIZ7oCFuzrhKYQjdeUEW/sE1hv17Jp/Bws+ReOPpGVBTYCBoYo+G17V5Qo8QQ75A== -css-to-react-native@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/css-to-react-native/-/css-to-react-native-3.0.0.tgz#62dbe678072a824a689bcfee011fc96e02a7d756" - integrity sha512-Ro1yETZA813eoyUp2GDBhG2j+YggidUmzO1/v9eYBKR2EHVEniE2MI/NqpTQ954BMpTPZFsGNPm46qFB9dpaPQ== - dependencies: - camelize "^1.0.0" - css-color-keywords "^1.0.0" - postcss-value-parser "^4.0.2" - css-tree@^2.2.1: version "2.3.1" resolved "https://registry.yarnpkg.com/css-tree/-/css-tree-2.3.1.tgz#10264ce1e5442e8572fc82fbe490644ff54b5c20" @@ -5137,6 +5133,11 @@ detect-newline@^3.0.0: resolved "https://registry.yarnpkg.com/detect-newline/-/detect-newline-3.1.0.tgz#576f5dfc63ae1a192ff192d8ad3af6308991b651" integrity sha512-TLz+x/vEXm/Y7P7wn1EJFNLxYpUD4TgMosxY6fAVJUnJMbupHBOncxyWUG9OpTaH9EBD7uFI5LfEgmMOc54DsA== +detect-node-es@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/detect-node-es/-/detect-node-es-1.1.0.tgz#163acdf643330caa0b4cd7c21e7ee7755d6fa493" + integrity sha512-ypdmJU/TbBby2Dxibuv7ZLW3Bs1QEmM7nHjEANfohJLvE0XVujisn1qPJcZxg+qDucsr+bP6fLD1rPS3AhJ7EQ== + diacritics@^1.3.0: version "1.3.0" resolved "https://registry.yarnpkg.com/diacritics/-/diacritics-1.3.0.tgz#3efa87323ebb863e6696cebb0082d48ff3d6f7a1" @@ -5147,11 +5148,6 @@ didyoumean@^1.2.2: resolved "https://registry.yarnpkg.com/didyoumean/-/didyoumean-1.2.2.tgz#989346ffe9e839b4555ecf5666edea0d3e8ad037" integrity sha512-gxtyfqMg7GKyhQmb056K7M3xszy/myH8w+B4RT+QXBQsvAOdc3XymqDDPHx1BgPgsdAA5SIifona89YtRATDzw== -diff-sequences@^26.6.2: - version "26.6.2" - resolved "https://registry.yarnpkg.com/diff-sequences/-/diff-sequences-26.6.2.tgz#48ba99157de1923412eed41db6b6d4aa9ca7c0b1" - integrity sha512-Mv/TDa3nZ9sbc5soK+OoA74BsS3mL37yixCvUAQkiuA4Wz6YtwP/K47n2rv2ovzHZvoiQeA5FTQOschKkEwB0Q== - diff-sequences@^27.0.6: version "27.0.6" resolved "https://registry.yarnpkg.com/diff-sequences/-/diff-sequences-27.0.6.tgz#3305cb2e55a033924054695cc66019fd7f8e5723" @@ -5193,15 +5189,15 @@ doctrine@^3.0.0: dependencies: esutils "^2.0.2" -dom-accessibility-api@^0.5.6: - version "0.5.7" - resolved "https://registry.yarnpkg.com/dom-accessibility-api/-/dom-accessibility-api-0.5.7.tgz#8c2aa6325968f2933160a0b7dbb380893ddf3e7d" - integrity sha512-ml3lJIq9YjUfM9TUnEPvEYWFSwivwIGBPKpewX7tii7fwCazA8yCioGdqQcNsItPpfFvSJ3VIdMQPj60LJhcQA== - dom-accessibility-api@^0.5.9: - version "0.5.14" - resolved "https://registry.yarnpkg.com/dom-accessibility-api/-/dom-accessibility-api-0.5.14.tgz#56082f71b1dc7aac69d83c4285eef39c15d93f56" - integrity sha512-NMt+m9zFMPZe0JcY9gN224Qvk6qLIdqex29clBvc/y75ZBX9YA9wNK3frsYvu2DI1xcCIwxwnX+TlsJ2DSOADg== + version "0.5.16" + resolved "https://registry.yarnpkg.com/dom-accessibility-api/-/dom-accessibility-api-0.5.16.tgz#5a7429e6066eb3664d911e33fb0e45de8eb08453" + integrity sha512-X7BJ2yElsnOJ30pZF4uIIDfBEVgF4XEBxL9Bxhy6dnrm5hkzqmsWHGTiHqRiITNhMyFLyAiWndIJP7Z1NTteDg== + +dom-accessibility-api@^0.6.3: + version "0.6.3" + resolved "https://registry.yarnpkg.com/dom-accessibility-api/-/dom-accessibility-api-0.6.3.tgz#993e925cc1d73f2c662e7d75dd5a5445259a8fd8" + integrity sha512-7ZgogeTnjuHbo+ct10G9Ffp0mif17idi0IyWNVA/wcwcm7NPOD/WEHVP3n7n3MhXqxoIYm8d6MuZohYWIZ4T3w== dom-helpers@^5.0.1: version "5.2.0" @@ -5654,25 +5650,15 @@ escodegen@^2.0.0: optionalDependencies: source-map "~0.6.1" -escodegen@~1.2.0: - version "1.2.0" - resolved "https://registry.yarnpkg.com/escodegen/-/escodegen-1.2.0.tgz#09de7967791cc958b7f89a2ddb6d23451af327e1" - integrity sha1-Cd55Z3kcyVi3+Jot220jRRrzJ+E= +eslint-config-next@^14.2.10: + version "14.2.10" + resolved "https://registry.yarnpkg.com/eslint-config-next/-/eslint-config-next-14.2.10.tgz#bd56aa506bde6ef256b533a399dcdd5c9aee1c11" + integrity sha512-qO/L8LbfhBhobNowiJP+UBOb7w+JRvbz6T5X05heLOGO6/VwDIIsZL6XjWiKJ45lnwSpwP1kxoBBxCYr2wTMaw== dependencies: - esprima "~1.0.4" - estraverse "~1.5.0" - esutils "~1.0.0" - optionalDependencies: - source-map "~0.1.30" - -eslint-config-next@^14.1.1: - version "14.1.1" - resolved "https://registry.yarnpkg.com/eslint-config-next/-/eslint-config-next-14.1.1.tgz#5c8d5afcede9aac36e5515f0fa88432e63ebc9c1" - integrity sha512-OLyw2oHzwE0M0EODGYMbjksDQKSshQWBzYY+Nkoxoe3+Q5G0lpb9EkekyDk7Foz9BMfotbYShJrgYoBEAVqU4Q== - dependencies: - "@next/eslint-plugin-next" "14.1.1" + "@next/eslint-plugin-next" "14.2.10" "@rushstack/eslint-patch" "^1.3.3" - "@typescript-eslint/parser" "^5.4.2 || ^6.0.0" + "@typescript-eslint/eslint-plugin" "^5.4.2 || ^6.0.0 || 7.0.0 - 7.2.0" + "@typescript-eslint/parser" "^5.4.2 || ^6.0.0 || 7.0.0 - 7.2.0" eslint-import-resolver-node "^0.3.6" eslint-import-resolver-typescript "^3.5.2" eslint-plugin-import "^2.28.1" @@ -5882,11 +5868,6 @@ esprima@^4.0.0, esprima@^4.0.1, esprima@~4.0.0: resolved "https://registry.yarnpkg.com/esprima/-/esprima-4.0.1.tgz#13b04cdb3e6c5d19df91ab6987a8695619b0aa71" integrity sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A== -esprima@~1.0.4: - version "1.0.4" - resolved "https://registry.yarnpkg.com/esprima/-/esprima-1.0.4.tgz#9f557e08fc3b4d26ece9dd34f8fbf476b62585ad" - integrity sha1-n1V+CPw7TSbs6d00+Pv0drYlha0= - esquery@^1.4.2: version "1.5.0" resolved "https://registry.yarnpkg.com/esquery/-/esquery-1.5.0.tgz#6ce17738de8577694edd7361c57182ac8cb0db0b" @@ -5916,11 +5897,6 @@ estraverse@^5.3.0: resolved "https://registry.yarnpkg.com/estraverse/-/estraverse-5.3.0.tgz#2eea5290702f26ab8fe5370370ff86c965d21123" integrity sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA== -estraverse@~1.5.0: - version "1.5.1" - resolved "https://registry.yarnpkg.com/estraverse/-/estraverse-1.5.1.tgz#867a3e8e58a9f84618afb6c2ddbcd916b7cbaf71" - integrity sha1-hno+jlip+EYYr7bC3bzZFrfLr3E= - estree-walker@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/estree-walker/-/estree-walker-1.0.1.tgz#31bc5d612c96b704106b477e6dd5d8aa138cb700" @@ -5936,21 +5912,11 @@ esutils@^2.0.2: resolved "https://registry.yarnpkg.com/esutils/-/esutils-2.0.3.tgz#74d2eb4de0b8da1293711910d50775b9b710ef64" integrity sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g== -esutils@~1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/esutils/-/esutils-1.0.0.tgz#8151d358e20c8acc7fb745e7472c0025fe496570" - integrity sha1-gVHTWOIMisx/t0XnRywAJf5JZXA= - etag@1.8.1, etag@~1.8.1: version "1.8.1" resolved "https://registry.yarnpkg.com/etag/-/etag-1.8.1.tgz#41ae2eeb65efa62268aebfea83ac7d79299b0887" integrity sha1-Qa4u62XvpiJorr/qg6x9eSmbCIc= -eve@~0.5.1: - version "0.5.4" - resolved "https://registry.yarnpkg.com/eve/-/eve-0.5.4.tgz#67d080b9725291d7e389e34c26860dd97f1debaa" - integrity sha1-Z9CAuXJSkdfjieNMJoYN2X8d66o= - eventemitter2@6.4.7: version "6.4.7" resolved "https://registry.yarnpkg.com/eventemitter2/-/eventemitter2-6.4.7.tgz#a7f6c4d7abf28a14c1ef3442f21cb306a054271d" @@ -6505,6 +6471,11 @@ get-intrinsic@^1.1.3, get-intrinsic@^1.2.1, get-intrinsic@^1.2.2, get-intrinsic@ has-symbols "^1.0.3" hasown "^2.0.0" +get-nonce@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/get-nonce/-/get-nonce-1.0.1.tgz#fdf3f0278073820d2ce9426c18f07481b1e0cdf3" + integrity sha512-FJhYRoDaiatfEkUK8HKlicmu/3SGFD51q3itKDGoSTysQJBnfOcxU5GxnhE1E6soB76MbT0MBtnKJuXyAx+96Q== + get-own-enumerable-property-symbols@^3.0.0: version "3.0.2" resolved "https://registry.yarnpkg.com/get-own-enumerable-property-symbols/-/get-own-enumerable-property-symbols-3.0.2.tgz#b5fde77f22cbe35f390b4e089922c50bce6ef664" @@ -6858,7 +6829,7 @@ hasown@^2.0.0, hasown@^2.0.1: dependencies: function-bind "^1.1.2" -hoist-non-react-statics@^3.0.0, hoist-non-react-statics@^3.3.0, hoist-non-react-statics@^3.3.1, hoist-non-react-statics@^3.3.2: +hoist-non-react-statics@^3.3.0, hoist-non-react-statics@^3.3.1, hoist-non-react-statics@^3.3.2: version "3.3.2" resolved "https://registry.yarnpkg.com/hoist-non-react-statics/-/hoist-non-react-statics-3.3.2.tgz#ece0acaf71d62c2969c2ec59feff42a4b1a85b45" integrity sha512-/gGivxi8JPKWNm/W0jSmzcMPpfpPLc3dY/6GxhX2hQ9iGj3aDfklV4ET7NjKpSinLpJ5vafa9iiGIEZg10SfBw== @@ -7123,6 +7094,13 @@ intl-messageformat@10.2.1: "@formatjs/icu-messageformat-parser" "2.1.10" tslib "2.4.0" +invariant@^2.2.4: + version "2.2.4" + resolved "https://registry.yarnpkg.com/invariant/-/invariant-2.2.4.tgz#610f3c92c9359ce1db616e538008d23ff35158e6" + integrity sha512-phJfQVBuaJM5raOpJjSfkiD6BpbCE4Ns//LaXl6wGYtUBY83nWS6Rf9tXm2e8VaK60JEjYldbPif/A2B1C2gNA== + dependencies: + loose-envify "^1.0.0" + ipaddr.js@1.9.0: version "1.9.0" resolved "https://registry.yarnpkg.com/ipaddr.js/-/ipaddr.js-1.9.0.tgz#37df74e430a0e47550fe54a2defe30d8acd95f65" @@ -7782,16 +7760,6 @@ jest-config@^28.1.3: slash "^3.0.0" strip-json-comments "^3.1.1" -jest-diff@^26.0.0: - version "26.6.2" - resolved "https://registry.yarnpkg.com/jest-diff/-/jest-diff-26.6.2.tgz#1aa7468b52c3a68d7d5c5fdcdfcd5e49bd164394" - integrity sha512-6m+9Z3Gv9wN0WFVasqjCL/06+EFCMTqDEUl/b87HYK2rAPTyfz4ZIuSlPhY51PIQRWx5TaxeF1qmXKe9gfN3sA== - dependencies: - chalk "^4.0.0" - diff-sequences "^26.6.2" - jest-get-type "^26.3.0" - pretty-format "^26.6.2" - jest-diff@^27.0.0: version "27.2.0" resolved "https://registry.yarnpkg.com/jest-diff/-/jest-diff-27.2.0.tgz#bda761c360f751bab1e7a2fe2fc2b0a35ce8518c" @@ -7856,11 +7824,6 @@ jest-environment-node@^28.1.3: jest-mock "^28.1.3" jest-util "^28.1.3" -jest-get-type@^26.3.0: - version "26.3.0" - resolved "https://registry.yarnpkg.com/jest-get-type/-/jest-get-type-26.3.0.tgz#e97dc3c3f53c2b406ca7afaed4493b1d099199e0" - integrity sha512-TpfaviN1R2pQWkIihlfEanwOXK0zcxrKEE4MlU6Tn7keoXdN6/3gK/xl0yEh8DOunn5pOVGKf8hB4R9gVh04ig== - jest-get-type@^27.0.6: version "27.0.6" resolved "https://registry.yarnpkg.com/jest-get-type/-/jest-get-type-27.0.6.tgz#0eb5c7f755854279ce9b68a9f1a4122f69047cfe" @@ -8422,10 +8385,10 @@ leaflet.fullscreen@2.4.0: resolved "https://registry.yarnpkg.com/leaflet.fullscreen/-/leaflet.fullscreen-2.4.0.tgz#8503c69b6f6afe6f54594c9cdd5e4f131cfa97b4" integrity sha512-41O0ikdUR0bVC0QfoFN3W5S+9yoeHqL74i0QQafa/W79+ij/G7IRZwpfwPuxoNwpydoUJ/9Mq/6Hp7WZOnkWzQ== -leaflet.locatecontrol@0.74.0: - version "0.74.0" - resolved "https://registry.yarnpkg.com/leaflet.locatecontrol/-/leaflet.locatecontrol-0.74.0.tgz#a62153a0de5e05ef7efd73df7247a23060330fd7" - integrity sha512-Rs4u2ZH9SeEB4IBLhBT3yPWaN81CtFq4XWT6gTCZeqVOImMJKpwqkVn9FKxge9Z5JFBRJHFFquYEdwR3mxgHxg== +leaflet.locatecontrol@^0.81.1: + version "0.81.1" + resolved "https://registry.yarnpkg.com/leaflet.locatecontrol/-/leaflet.locatecontrol-0.81.1.tgz#8aec3124ef5cdda3476fd9013315789b4e301a45" + integrity sha512-ZtsdScGufPw330X3UIaGGjnfQ1NrhLySnlruWufIMnfzsHgQPz0+mSxsCQMVh7QgOBoefCGb/lioSejiaNx1EQ== leaflet.markercluster@^1.4.1: version "1.4.1" @@ -8584,7 +8547,7 @@ lodash.truncate@^4.4.2: resolved "https://registry.yarnpkg.com/lodash.truncate/-/lodash.truncate-4.4.2.tgz#5a350da0b1113b837ecfffd5812cbe58d6eae193" integrity sha1-WjUNoLERO4N+z//VgSy+WNbq4ZM= -lodash@^4.17.11, lodash@^4.17.15, lodash@^4.17.19, lodash@^4.17.20, lodash@^4.17.4: +lodash@^4.17.19, lodash@^4.17.20, lodash@^4.17.4: version "4.17.20" resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.20.tgz#b44a9b6297bcb698f1c51a3545a2b3b368d59c52" integrity sha512-PlhdFcillOINfeV7Ni6oF1TAEayyZBoZ8bcshTHqOYJYlrqzRK5hagpagky5o4HfCzzd1TRkXPMFq6cKk9rGmA== @@ -8641,10 +8604,10 @@ lru_map@^0.3.3: resolved "https://registry.yarnpkg.com/lru_map/-/lru_map-0.3.3.tgz#b5c8351b9464cbd750335a79650a0ec0e56118dd" integrity sha1-tcg1G5Rky9dQM1p5ZQoOwOVhGN0= -lz-string@^1.4.4: - version "1.4.4" - resolved "https://registry.yarnpkg.com/lz-string/-/lz-string-1.4.4.tgz#c0d8eaf36059f705796e1e344811cf4c498d3a26" - integrity sha1-wNjq82BZ9wV5bh40SBHPTEmNOiY= +lz-string@^1.5.0: + version "1.5.0" + resolved "https://registry.yarnpkg.com/lz-string/-/lz-string-1.5.0.tgz#c1ab50f77887b712621201ba9fd4e3a6ed099941" + integrity sha512-h5bgJWpxJNswbU7qCrV0tIKQCaS3blPDrqKWx+QxzuzL1zGUzij9XCWLrSLsJPu5t+eWA/ycetzYAO5IOMcWAQ== magic-string@^0.25.0, magic-string@^0.25.7: version "0.25.7" @@ -9033,6 +8996,11 @@ next-pwa@^5.6.0: workbox-webpack-plugin "^6.5.4" workbox-window "^6.5.4" +next-router-mock@^0.9.13: + version "0.9.13" + resolved "https://registry.yarnpkg.com/next-router-mock/-/next-router-mock-0.9.13.tgz#bdee2011ea6c09e490121c354ef917f339767f72" + integrity sha512-906n2RRaE6Y28PfYJbaz5XZeJ6Tw8Xz1S6E31GGwZ0sXB6/XjldD1/2azn1ZmBmRk5PQRkzjg+n+RHZe5xQzWA== + next-server@^9.0.5: version "9.0.5" resolved "https://registry.yarnpkg.com/next-server/-/next-server-9.0.5.tgz#4b7fe976d0900dd865b3c5777287ccd4df200794" @@ -9775,7 +9743,7 @@ postcss-value-parser@^4.0.0, postcss-value-parser@^4.2.0: resolved "https://registry.yarnpkg.com/postcss-value-parser/-/postcss-value-parser-4.2.0.tgz#723c09920836ba6d3e5af019f92bc0971c02e514" integrity sha512-1NNCs6uurfkVbeXG4S8JFT9t19m45ICnif8zWLd5oPSZ50QnwMfK+H3jv408d4jw/7Bttv5axS5IiHoLaVNHeQ== -postcss-value-parser@^4.0.2, postcss-value-parser@^4.1.0: +postcss-value-parser@^4.1.0: version "4.1.0" resolved "https://registry.yarnpkg.com/postcss-value-parser/-/postcss-value-parser-4.1.0.tgz#443f6a20ced6481a2bda4fa8532a6e55d789a2cb" integrity sha512-97DXOFbQJhk71ne5/Mt6cOu6yxsSfM0QGQyl0L25Gca4yGWEGJaig7l7gbCX623VqTBNGLRLaVUCnNkcedlRSQ== @@ -9846,17 +9814,7 @@ pretty-bytes@^5.6.0: resolved "https://registry.yarnpkg.com/pretty-bytes/-/pretty-bytes-5.6.0.tgz#356256f643804773c82f64723fe78c92c62beaeb" integrity sha512-FFw039TmrBqFK8ma/7OL3sDz/VytdtJr044/QUJtH0wK9lb9jLq9tJyIxUwtQJHwar2BqtiA4iCWSwo9JLkzFg== -pretty-format@^26.0.0, pretty-format@^26.6.2: - version "26.6.2" - resolved "https://registry.yarnpkg.com/pretty-format/-/pretty-format-26.6.2.tgz#e35c2705f14cb7fe2fe94fa078345b444120fc93" - integrity sha512-7AeGuCYNGmycyQbCqd/3PWH4eOoX/OiCa0uphp57NVTeAGdJGaAliecxwBDHYQCIvrW7aDBZCYeNTP/WX69mkg== - dependencies: - "@jest/types" "^26.6.2" - ansi-regex "^5.0.0" - ansi-styles "^4.0.0" - react-is "^17.0.1" - -pretty-format@^27.0.0, pretty-format@^27.0.2, pretty-format@^27.2.0: +pretty-format@^27.0.0, pretty-format@^27.2.0: version "27.2.0" resolved "https://registry.yarnpkg.com/pretty-format/-/pretty-format-27.2.0.tgz#ee37a94ce2a79765791a8649ae374d468c18ef19" integrity sha512-KyJdmgBkMscLqo8A7K77omgLx5PWPiXJswtTtFV7XgVZv2+qPk6UivpXXO+5k6ZEbWIbLoKdx1pZ6ldINzbwTA== @@ -9866,6 +9824,15 @@ pretty-format@^27.0.0, pretty-format@^27.0.2, pretty-format@^27.2.0: ansi-styles "^5.0.0" react-is "^17.0.1" +pretty-format@^27.0.2: + version "27.5.1" + resolved "https://registry.yarnpkg.com/pretty-format/-/pretty-format-27.5.1.tgz#2181879fdea51a7a5851fb39d920faa63f01d88e" + integrity sha512-Qb1gy5OrP5+zDf2Bvnzdl3jsTf1qXVMazbvCoKhtKqVs4/YK4ozX4gKQJJVyNe+cajNPn0KoC0MC3FUmaHWEmQ== + dependencies: + ansi-regex "^5.0.1" + ansi-styles "^5.0.0" + react-is "^17.0.1" + pretty-format@^28.1.3: version "28.1.3" resolved "https://registry.yarnpkg.com/pretty-format/-/pretty-format-28.1.3.tgz#c9fba8cedf99ce50963a11b27d982a9ae90970d5" @@ -10022,29 +9989,18 @@ react-addons-test-utils@^15.6.2: resolved "https://registry.yarnpkg.com/react-addons-test-utils/-/react-addons-test-utils-15.6.2.tgz#c12b6efdc2247c10da7b8770d185080a7b047156" integrity sha1-wStu/cIkfBDae4dw0YUICnsEcVY= -react-burger-menu@^3.0.9: - version "3.0.9" - resolved "https://registry.yarnpkg.com/react-burger-menu/-/react-burger-menu-3.0.9.tgz#8ce525adfbf2dd760af7650a3ac3baadbc782e26" - integrity sha512-Qy15hkCxwxNEKfqdAv43F+8ZSl+/c6KkqrBwGP0CesFYJ02onHtiUFUbuhSWCMtBH8/n0HhfekFlp/NyCdKYzQ== - dependencies: - browserify-optional "^1.0.0" - classnames "^2.2.6" - eve "~0.5.1" - prop-types "^15.7.2" - snapsvg-cjs "0.0.6" - react-country-flag@^3.0.2: version "3.0.2" resolved "https://registry.yarnpkg.com/react-country-flag/-/react-country-flag-3.0.2.tgz#54c37abe2c87251e95b0f40bb4c09b000f4669e7" integrity sha512-JPaz+q3QD0/nZtHBKj5x3O7r/SgSG9kxbymdaIU0RqlDAcorJIe4KV0DFhWIdKh69q5cPVkIVERcMYGZdvXgAA== react-dom@^18.2.0: - version "18.2.0" - resolved "https://registry.yarnpkg.com/react-dom/-/react-dom-18.2.0.tgz#22aaf38708db2674ed9ada224ca4aa708d821e3d" - integrity sha512-6IMTriUmvsjHUjNtEDudZfuDQUoWXVxKHhlEGSk81n4YFS+r/Kl99wXiwlVXtPBtJenozv2P+hxDsw9eA7Xo6g== + version "18.3.1" + resolved "https://registry.yarnpkg.com/react-dom/-/react-dom-18.3.1.tgz#c2265d79511b57d479b3dd3fdfa51536494c5cb4" + integrity sha512-5m4nQKp+rZRb09LNH59GM4BxTh9251/ylbKIbpe7TpGxfJ+9kv6BLkLBXIjjspbgbnIBNqlI23tRnTWT0snUIw== dependencies: loose-envify "^1.1.0" - scheduler "^0.23.0" + scheduler "^0.23.2" react-from-dom@^0.6.2: version "0.6.2" @@ -10164,6 +10120,25 @@ react-property@2.0.0: resolved "https://registry.yarnpkg.com/react-property/-/react-property-2.0.0.tgz#2156ba9d85fa4741faf1918b38efc1eae3c6a136" integrity sha512-kzmNjIgU32mO4mmH5+iUyrqlpFQhF8K2k7eZ4fdLSOPFrD1XgEuSBv9LDEgxRXTMBqMd8ppT0x6TIzqE5pdGdw== +react-remove-scroll-bar@^2.3.4: + version "2.3.6" + resolved "https://registry.yarnpkg.com/react-remove-scroll-bar/-/react-remove-scroll-bar-2.3.6.tgz#3e585e9d163be84a010180b18721e851ac81a29c" + integrity sha512-DtSYaao4mBmX+HDo5YWYdBWQwYIQQshUV/dVxFxK+KM26Wjwp1gZ6rv6OC3oujI6Bfu6Xyg3TwK533AQutsn/g== + dependencies: + react-style-singleton "^2.2.1" + tslib "^2.0.0" + +react-remove-scroll@2.5.7: + version "2.5.7" + resolved "https://registry.yarnpkg.com/react-remove-scroll/-/react-remove-scroll-2.5.7.tgz#15a1fd038e8497f65a695bf26a4a57970cac1ccb" + integrity sha512-FnrTWO4L7/Bhhf3CYBNArEG/yROV0tKmTv7/3h9QCFvH6sndeFf1wPqOcbFVu5VAulS5dV1wGT3GZZ/1GawqiA== + dependencies: + react-remove-scroll-bar "^2.3.4" + react-style-singleton "^2.2.1" + tslib "^2.1.0" + use-callback-ref "^1.3.0" + use-sidecar "^1.1.2" + react-select@^5.7.2: version "5.7.2" resolved "https://registry.yarnpkg.com/react-select/-/react-select-5.7.2.tgz#ccd40071b9429277983bf15526e7a5773a060e09" @@ -10190,6 +10165,15 @@ react-slick@^0.29.0: lodash.debounce "^4.0.8" resize-observer-polyfill "^1.5.0" +react-style-singleton@^2.2.1: + version "2.2.1" + resolved "https://registry.yarnpkg.com/react-style-singleton/-/react-style-singleton-2.2.1.tgz#f99e420492b2d8f34d38308ff660b60d0b1205b4" + integrity sha512-ZWj0fHEMyWkHzKYUr2Bs/4zU6XLmq9HsgBURm7g5pAVfyn49DgUiNgY2d4lXRlYSiCif9YBGpQleewkcqddc7g== + dependencies: + get-nonce "^1.0.0" + invariant "^2.2.4" + tslib "^2.0.0" + react-transition-group@^4.3.0: version "4.4.1" resolved "https://registry.yarnpkg.com/react-transition-group/-/react-transition-group-4.4.1.tgz#63868f9325a38ea5ee9535d828327f85773345c9" @@ -10201,9 +10185,9 @@ react-transition-group@^4.3.0: prop-types "^15.6.2" react@^18.2.0: - version "18.2.0" - resolved "https://registry.yarnpkg.com/react/-/react-18.2.0.tgz#555bd98592883255fa00de14f1151a917b5d77d5" - integrity sha512-/3IjMdb2L9QbBdWiW5e3P2/npwMBaU9mHCSCUzNln0ZCYbcfTsGbTJrU/kGemdH2IWmB2ioZ+zkxtmq6g09fGQ== + version "18.3.1" + resolved "https://registry.yarnpkg.com/react/-/react-18.3.1.tgz#49ab892009c53933625bd16b2533fc754cab2891" + integrity sha512-wS+hAgJShR0KhEvPJArfuPVN1+Hz1t0Y6n5jLrGQbkb4urgPE/0Rve+1kMB1v/oWgHgm4WIcV+i7F2pTVj+2iQ== dependencies: loose-envify "^1.1.0" @@ -10479,11 +10463,6 @@ resolve.exports@^1.1.0: resolved "https://registry.yarnpkg.com/resolve.exports/-/resolve.exports-1.1.0.tgz#5ce842b94b05146c0e03076985d1d0e7e48c90c9" integrity sha512-J1l+Zxxp4XK3LUDZ9m60LRJF/mAe4z6a4xyabPHk7pvK5t35dACV32iIjJDFeWZFfZlO29w6SZ67knR0tHzJtQ== -resolve@1.1.7: - version "1.1.7" - resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.1.7.tgz#203114d82ad2c5ed9e8e0411b3932875e889e97b" - integrity sha1-IDEU2CrSxe2ejgQRs5ModeiJ6Xs= - resolve@^1.1.7: version "1.22.2" resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.22.2.tgz#0ed0943d4e301867955766c9f3e1ae6d01c6845f" @@ -10670,10 +10649,10 @@ saxes@^5.0.1: dependencies: xmlchars "^2.2.0" -scheduler@^0.23.0: - version "0.23.0" - resolved "https://registry.yarnpkg.com/scheduler/-/scheduler-0.23.0.tgz#ba8041afc3d30eb206a487b6b384002e4e61fdfe" - integrity sha512-CtuThmgHNg7zIZWAXi3AsyIzA3n4xx7aNyjwC2VJldO2LMVDhFK+63xGqq6CsJH4rTAt6/M+N4GhZiDYPx9eUw== +scheduler@^0.23.2: + version "0.23.2" + resolved "https://registry.yarnpkg.com/scheduler/-/scheduler-0.23.2.tgz#414ba64a3b282892e944cf2108ecc078d115cdc3" + integrity sha512-UOShsPwz7NrMUqhR6t0hWjFduvOzbtv7toDH1/hIrfRNIDBnnBWd0CwJTGvTpngVlmwGCdP9/Zl/tVrDqcuYzQ== dependencies: loose-envify "^1.1.0" @@ -10840,11 +10819,6 @@ shallow-clone@^3.0.0: dependencies: kind-of "^6.0.2" -shallowequal@^1.1.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/shallowequal/-/shallowequal-1.1.0.tgz#188d521de95b9087404fd4dcb68b13df0ae4e7f8" - integrity sha512-y0m1JoUZSlPAjXVtPPW70aZWfIL/dSP7AFkRnniLCrK/8MDKog3TySTBmckD+RObVxH0v4Tox67+F14PdED2oQ== - shebang-command@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/shebang-command/-/shebang-command-2.0.0.tgz#ccd0af4f8835fbdc265b82461aaf0c36663f34ea" @@ -10965,20 +10939,6 @@ snapdragon@^0.8.1: source-map-resolve "^0.5.0" use "^3.1.0" -snapsvg-cjs@0.0.6: - version "0.0.6" - resolved "https://registry.yarnpkg.com/snapsvg-cjs/-/snapsvg-cjs-0.0.6.tgz#3b2f56af2573d3d364c3ed5bf8885745f4d2dde1" - integrity sha1-Oy9WryVz09Nkw+1b+IhXRfTS3eE= - dependencies: - snapsvg "0.5.1" - -snapsvg@0.5.1: - version "0.5.1" - resolved "https://registry.yarnpkg.com/snapsvg/-/snapsvg-0.5.1.tgz#0caf52c79189a290746fc446cc5e863f6bdddfe3" - integrity sha1-DK9Sx5GJopB0b8RGzF6GP2vd3+M= - dependencies: - eve "~0.5.1" - source-list-map@^2.0.0: version "2.0.1" resolved "https://registry.yarnpkg.com/source-list-map/-/source-list-map-2.0.1.tgz#3993bd873bfc48479cca9ea3a547835c7c154b34" @@ -11069,13 +11029,6 @@ source-map@^0.8.0-beta.0: dependencies: whatwg-url "^7.0.0" -source-map@~0.1.30: - version "0.1.43" - resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.1.43.tgz#c24bc146ca517c1471f5dacbe2571b2b7f9e3346" - integrity sha1-wkvBRspRfBRx9drL4lcbK3+eM0Y= - dependencies: - amdefine ">=0.0.4" - sourcemap-codec@^1.4.4: version "1.4.8" resolved "https://registry.yarnpkg.com/sourcemap-codec/-/sourcemap-codec-1.4.8.tgz#ea804bd94857402e6992d05a38ef1ae35a9ab4c4" @@ -11182,7 +11135,7 @@ string-length@^4.0.1: char-regex "^1.0.2" strip-ansi "^6.0.0" -"string-width-cjs@npm:string-width@^4.2.0", "string-width@^1.0.2 || 2 || 3 || 4", string-width@^4.2.3: +"string-width-cjs@npm:string-width@^4.2.0": 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== @@ -11200,6 +11153,15 @@ string-width@^1.0.1: is-fullwidth-code-point "^1.0.0" strip-ansi "^3.0.0" +"string-width@^1.0.2 || 2 || 3 || 4", 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== + dependencies: + emoji-regex "^8.0.0" + is-fullwidth-code-point "^3.0.0" + strip-ansi "^6.0.1" + string-width@^4.1.0, string-width@^4.2.0: version "4.2.0" resolved "https://registry.yarnpkg.com/string-width/-/string-width-4.2.0.tgz#952182c46cc7b2c313d1596e623992bd163b72b5" @@ -11338,7 +11300,7 @@ stringify-object@^3.3.0: is-obj "^1.0.1" is-regexp "^1.0.0" -"strip-ansi-cjs@npm:strip-ansi@^6.0.1", strip-ansi@^6.0.1: +"strip-ansi-cjs@npm: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== @@ -11359,6 +11321,13 @@ strip-ansi@^6.0.0: dependencies: ansi-regex "^5.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== + dependencies: + ansi-regex "^5.0.1" + strip-ansi@^7.0.1: version "7.1.0" resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-7.1.0.tgz#d5b6568ca689d8561370b0707685d22434faff45" @@ -11422,22 +11391,6 @@ style-to-object@0.3.0: dependencies: inline-style-parser "0.1.1" -styled-components@^5.3.6: - version "5.3.6" - resolved "https://registry.yarnpkg.com/styled-components/-/styled-components-5.3.6.tgz#27753c8c27c650bee9358e343fc927966bfd00d1" - integrity sha512-hGTZquGAaTqhGWldX7hhfzjnIYBZ0IXQXkCYdvF1Sq3DsUaLx6+NTHC5Jj1ooM2F68sBiVz3lvhfwQs/S3l6qg== - dependencies: - "@babel/helper-module-imports" "^7.0.0" - "@babel/traverse" "^7.4.5" - "@emotion/is-prop-valid" "^1.1.0" - "@emotion/stylis" "^0.8.4" - "@emotion/unitless" "^0.7.4" - babel-plugin-styled-components ">= 1.12.0" - css-to-react-native "^3.0.0" - hoist-non-react-statics "^3.0.0" - shallowequal "^1.1.0" - supports-color "^5.5.0" - styled-jsx@3.2.1: version "3.2.1" resolved "https://registry.yarnpkg.com/styled-jsx/-/styled-jsx-3.2.1.tgz#452051fe50df5e9c7c7f3dd20fa46c3060ac65b0" @@ -11476,11 +11429,6 @@ stylelint-config-standard@22.0.0: dependencies: stylelint-config-recommended "^5.0.0" -stylelint-config-styled-components@^0.1.1: - version "0.1.1" - resolved "https://registry.yarnpkg.com/stylelint-config-styled-components/-/stylelint-config-styled-components-0.1.1.tgz#b408388d7c687833ab4be4c4e6522d97d2827ede" - integrity sha512-z5Xz/9GmvxO6e/DLzBMwkB85zHxEEjN6K7Cj80Bi+o/9vR9eS3GX3E9VuMnX9WLFYulqbqLtTapGGY28JBiy9Q== - stylelint-declaration-strict-value@1.7.12: version "1.7.12" resolved "https://registry.yarnpkg.com/stylelint-declaration-strict-value/-/stylelint-declaration-strict-value-1.7.12.tgz#a4ff5d6cfc955c91f2dbe1b75bd35da99dd35d02" @@ -11489,16 +11437,6 @@ stylelint-declaration-strict-value@1.7.12: css-values "^0.1.0" shortcss "^0.1.3" -stylelint-processor-styled-components@^1.10.0: - version "1.10.0" - resolved "https://registry.yarnpkg.com/stylelint-processor-styled-components/-/stylelint-processor-styled-components-1.10.0.tgz#8082fc68779476aac411d3afffac0bc833d77a29" - integrity sha512-g4HpN9rm0JD0LoHuIOcd/FIjTZCJ0ErQ+dC3VTxp+dSvnkV+MklKCCmCQEdz5K5WxF4vPuzfVgdbSDuPYGZhoA== - dependencies: - "@babel/parser" "^7.8.3" - "@babel/traverse" "^7.8.3" - micromatch "^4.0.2" - postcss "^7.0.26" - stylelint@13.13.1: version "13.13.1" resolved "https://registry.yarnpkg.com/stylelint/-/stylelint-13.13.1.tgz#fca9c9f5de7990ab26a00f167b8978f083a18f3c" @@ -11600,7 +11538,7 @@ sugarss@^2.0.0: dependencies: postcss "^7.0.2" -supports-color@^5.3.0, supports-color@^5.5.0: +supports-color@^5.3.0: version "5.5.0" resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-5.5.0.tgz#e2e69a44ac8772f78a1ec0b35b689df6530efc8f" integrity sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow== @@ -11675,12 +11613,15 @@ table@^6.6.0: string-width "^4.2.0" strip-ansi "^6.0.0" -tailwind-merge@^2.2.2: - version "2.2.2" - resolved "https://registry.yarnpkg.com/tailwind-merge/-/tailwind-merge-2.2.2.tgz#87341e7604f0e20499939e152cd2841f41f7a3df" - integrity sha512-tWANXsnmJzgw6mQ07nE3aCDkCK4QdT3ThPMCzawoYA2Pws7vSTCvz3Vrjg61jVUGfFZPJzxEP+NimbcW+EdaDw== - dependencies: - "@babel/runtime" "^7.24.0" +tailwind-merge@^2.5.2: + version "2.5.2" + resolved "https://registry.yarnpkg.com/tailwind-merge/-/tailwind-merge-2.5.2.tgz#000f05a703058f9f9f3829c644235f81d4c08a1f" + integrity sha512-kjEBm+pvD+6eAwzJL2Bi+02/9LFLal1Gs61+QB7HvTfQQ0aXwC5LGT8PEt1gS0CWKktKe6ysPTAy3cBC5MeiIg== + +tailwindcss-animate@^1.0.7: + version "1.0.7" + resolved "https://registry.yarnpkg.com/tailwindcss-animate/-/tailwindcss-animate-1.0.7.tgz#318b692c4c42676cc9e67b19b78775742388bef4" + integrity sha512-bl6mpH3T7I3UFxuvDEXLxy/VuFxBk5bbzplh7tXI68mwMokNYd1t9qPBHlnyTwfa4JGC4zP516I1hYYtQ/vspA== tailwindcss@^3.4.1: version "3.4.1" @@ -11813,7 +11754,7 @@ throttleit@^1.0.0: resolved "https://registry.yarnpkg.com/throttleit/-/throttleit-1.0.0.tgz#9e785836daf46743145a5984b6268d828528ac6c" integrity sha1-nnhYNtr0Z0MUWlmEtiaNgoUorGw= -through@^2.3.8, through@~2.3.4: +through@^2.3.8: version "2.3.8" resolved "https://registry.yarnpkg.com/through/-/through-2.3.8.tgz#0dd4c9ffaabc357960b1b724115d7e0e86a2e1f5" integrity sha1-DdTJ/6q8NXlgsbckEV1+Doai4fU= @@ -11985,6 +11926,11 @@ tslib@^1.8.1, tslib@^1.9.3: resolved "https://registry.yarnpkg.com/tslib/-/tslib-1.14.1.tgz#cf2d38bdc34a134bcaf1091c41f6619e2f672d00" integrity sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg== +tslib@^2.0.0: + version "2.7.0" + resolved "https://registry.yarnpkg.com/tslib/-/tslib-2.7.0.tgz#d9b40c5c40ab59e8738f297df3087bf1a2690c01" + integrity sha512-gLXCKdN1/j47AiHiOkJN69hJmcbGTHI0ImLmbYLHykhgeN0jVGola9yVjFgzCUklsZQMW55o+dW7IXv3RCXDzA== + tslib@^2.1.0: version "2.6.1" resolved "https://registry.yarnpkg.com/tslib/-/tslib-2.6.1.tgz#fd8c9a0ff42590b25703c0acb3de3d3f4ede0410" @@ -12165,6 +12111,11 @@ unbox-primitive@^1.0.2: has-symbols "^1.0.3" which-boxed-primitive "^1.0.2" +undici-types@~6.19.2: + version "6.19.8" + resolved "https://registry.yarnpkg.com/undici-types/-/undici-types-6.19.8.tgz#35111c9d1437ab83a7cdc0abae2f26d88eda0a02" + integrity sha512-ve2KP6f/JnbPBFyobGHuerC9g1FYGn/F8n1LWTwNxCEzd6IfqTwUQcNXgEtmmQ6DlRrC1hrSrBnCZPokRrDHjw== + unicode-canonical-property-names-ecmascript@^1.0.4: version "1.0.4" resolved "https://registry.yarnpkg.com/unicode-canonical-property-names-ecmascript/-/unicode-canonical-property-names-ecmascript-1.0.4.tgz#2619800c4c825800efdd8343af7dd9933cbe2818" @@ -12318,11 +12269,26 @@ url@0.11.0: punycode "1.3.2" querystring "0.2.0" +use-callback-ref@^1.3.0: + version "1.3.2" + resolved "https://registry.yarnpkg.com/use-callback-ref/-/use-callback-ref-1.3.2.tgz#6134c7f6ff76e2be0b56c809b17a650c942b1693" + integrity sha512-elOQwe6Q8gqZgDA8mrh44qRTQqpIHDcZ3hXTLjBe1i4ph8XpNJnO+aQf3NaG+lriLopI4HMx9VjQLfPQ6vhnoA== + dependencies: + tslib "^2.0.0" + use-isomorphic-layout-effect@^1.1.2: version "1.1.2" resolved "https://registry.yarnpkg.com/use-isomorphic-layout-effect/-/use-isomorphic-layout-effect-1.1.2.tgz#497cefb13d863d687b08477d9e5a164ad8c1a6fb" integrity sha512-49L8yCO3iGT/ZF9QttjwLF/ZD9Iwto5LnH5LmEdk/6cFmXddqi2ulF0edxTwjj+7mqvpVVGQWvbXZdn32wRSHA== +use-sidecar@^1.1.2: + version "1.1.2" + resolved "https://registry.yarnpkg.com/use-sidecar/-/use-sidecar-1.1.2.tgz#2f43126ba2d7d7e117aa5855e5d8f0276dfe73c2" + integrity sha512-epTbsLuzZ7lPClpz2TyryBfztm7m+28DlEv2ZCQ3MDr5ssiwyOwGH/e5F9CkfWjJ1t4clvI58yF822/GUkjjhw== + dependencies: + detect-node-es "^1.1.0" + tslib "^2.0.0" + use@^3.1.0: version "3.1.1" resolved "https://registry.yarnpkg.com/use/-/use-3.1.1.tgz#d50c8cac79a19fbc20f2911f56eb973f4e10070f" @@ -12775,7 +12741,7 @@ workbox-window@6.5.4, workbox-window@^6.5.4: "@types/trusted-types" "^2.0.2" workbox-core "6.5.4" -"wrap-ansi-cjs@npm:wrap-ansi@^7.0.0", wrap-ansi@^7.0.0: +"wrap-ansi-cjs@npm: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== @@ -12793,6 +12759,15 @@ wrap-ansi@^6.2.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== + dependencies: + ansi-styles "^4.0.0" + string-width "^4.1.0" + strip-ansi "^6.0.0" + wrap-ansi@^8.1.0: version "8.1.0" resolved "https://registry.yarnpkg.com/wrap-ansi/-/wrap-ansi-8.1.0.tgz#56dc22368ee570face1b49819975d9b9a5ead214"