diff --git a/.dockerignore b/.dockerignore new file mode 100644 index 0000000..5882c53 --- /dev/null +++ b/.dockerignore @@ -0,0 +1 @@ +theme-build/node_modules \ No newline at end of file diff --git a/.gitignore b/.gitignore index 005a2ff..f51a244 100644 --- a/.gitignore +++ b/.gitignore @@ -128,3 +128,5 @@ modules.xml .nfs* # End of https://www.toptal.com/developers/gitignore/api/linux,go,intellij+all + +theme-build/node_modules \ No newline at end of file diff --git a/CHANGELOG.md b/CHANGELOG.md index 68ecc02..c2d0285 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -7,6 +7,11 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 ## [Unreleased] +## [v1.26.1-9] - 2024-09-13 +### Changed +- [#107] Redesign error-pages + - Change UI language of the error-pages to german + ## [v1.26.1-8] - 2024-09-04 ### Fixed - Fix problems with content security policies (CSP) caused by whitelabeling diff --git a/Dockerfile b/Dockerfile index a344812..6faa808 100644 --- a/Dockerfile +++ b/Dockerfile @@ -1,3 +1,19 @@ +FROM node:lts-alpine as templating + +ENV WORKDIR=/template \ + # Used in template to invalidate caches - do not remove. The release script will auto update this line + VERSION="1.26.1-9" + +RUN mkdir -p ${WORKDIR} +WORKDIR ${WORKDIR} + +COPY theme-build ${WORKDIR}/ +COPY resources ${WORKDIR}/resources + +RUN yarn install +RUN node template-colors.js ${WORKDIR}/resources/var/www/html/styles/default.css.tpl ${WORKDIR}/build/default.css +RUN node template-error-pages.js ${WORKDIR}/resources/var/www/html/errors/error-page.html.tpl ${WORKDIR}/build/errors + FROM registry.cloudogu.com/official/base:3.20.2-1 as builder LABEL maintainer="hello@cloudogu.com" @@ -9,9 +25,7 @@ ENV NGINX_VERSION=1.26.1 \ WARP_MENU_VERSION=2.0.0 \ WARP_MENU_TAR_SHA256="51a1010ec0f82b634999e48976d7fec98e6eb574a4401a841cd53f8cd0e14040" \ CES_ABOUT_VERSION="0.5.0" \ - CES_ABOUT_TAR_SHA256="c4664340a248d9c2d9333a9a9df7aa9141ebeb40c051d65f78c57f2439b6f07d" \ - CES_THEME_VERSION=0.7.0 \ - CES_THEME_TAR_SHA256="d3c8ba654cdaccff8fa3202f3958ac0c61156fb25a288d6008354fae75227941" + CES_ABOUT_TAR_SHA256="c4664340a248d9c2d9333a9a9df7aa9141ebeb40c051d65f78c57f2439b6f07d" WORKDIR /build @@ -51,20 +65,14 @@ RUN wget --progress=bar:force:noscroll -O /tmp/warp.zip https://github.com/cloud && echo "${WARP_MENU_TAR_SHA256} */tmp/warp.zip" | sha256sum -c - \ && unzip /tmp/warp.zip -d /build/var/www/html -# install custom error pages -RUN wget --progress=bar:force:noscroll -O /tmp/theme.zip https://github.com/cloudogu/ces-theme/archive/v${CES_THEME_VERSION}.zip \ - && echo "${CES_THEME_TAR_SHA256} */tmp/theme.zip" | sha256sum -c - \ - && unzip /tmp/theme.zip -d /tmp/theme \ - && cp -r /tmp/theme/ces-theme-${CES_THEME_VERSION}/dist/errors /build/var/www/html - FROM registry.cloudogu.com/official/base:3.20.2-1 LABEL maintainer="hello@cloudogu.com" \ NAME="official/nginx" \ - VERSION="1.26.1-8" + VERSION="1.26.1-9" ENV CES_MAINTENANCE_MODE=false \ # Used in template to invalidate caches - do not remove. The release script will auto update this line - VERSION="1.26.1-8" + VERSION="1.26.1-9" RUN set -x -o errexit \ && set -o nounset \ @@ -81,6 +89,10 @@ COPY resources / COPY --from=builder /usr/sbin/nginx /usr/sbin/nginx COPY --from=builder /build / +# copy templated files +COPY --from=templating /template/build/default.css /var/www/html/styles/default.css +COPY --from=templating /template/build/errors /var/www/html/errors + # redirect logs # cannot be done via builder container as symlinks cannot get copied RUN ln -sf /dev/stdout /var/log/nginx/access.log \ diff --git a/docs/dev/ces-theme_de.md b/docs/dev/ces-theme_de.md new file mode 100644 index 0000000..e64abd9 --- /dev/null +++ b/docs/dev/ces-theme_de.md @@ -0,0 +1,27 @@ +# CES-Theme-Integration + +Im Nginx-Dogu wird das [CES-Theme-Tailwind][ces-theme-tailwind] an eingebunden um die allgemeine CES-Styles im Nginx-Dogu bereitzustellen. + +## Templating +Im Ordner [theme-build](../../theme-build) ist eine NodeJS-projekt definiert, das das [CES-Theme-Tailwind][ces-theme-tailwind] inkludiert. + +### Default-Styles +Die Default-Styles werden vom nginx als `default.css` in jede HTML-Seite eingebunden. +Diese Styles sind in der Datei [default.css.tpl](../../resources/var/www/html/styles/default.css.tpl) definiert. +Dabei werden die Farb-Variablen als CSS-Custom-Properties aus dem [CES-Theme-Tailwind][ces-theme-tailwind] inkludiert. + +Mit `yarn template-default-css` wird aus der Template-Datei die `default.css` mit allen Farb-Variablen generiert. + + +### Error-Pages +Die Error-Pages im Nginx-Dogu sind alle gleich aufgebaut und unterscheiden sich nur durch einzelne Texte und Bilder. +Aus diesem Grund gibt es auch nur ein Template für die Error-Pages: [error-page.html.tpl](../../resources/var/www/html/errors/error-page.html.tpl). + +Aus diesem Template werden mit `yarn template-error-pages` die error-pages generiert. + +Die Konfiguration der einzelnen Error-Pages ist in der Datei [error-pages.json](../../theme-build/error-pages.json) zu finden. + + + + +[ces-theme-tailwind]: https://github.com/cloudogu/ces-theme-tailwind/ \ No newline at end of file diff --git a/docs/dev/ces-theme_en.md b/docs/dev/ces-theme_en.md new file mode 100644 index 0000000..6ae6901 --- /dev/null +++ b/docs/dev/ces-theme_en.md @@ -0,0 +1,26 @@ +# CES-Theme-Integration + +The [CES-Theme-Tailwind][ces-theme-tailwind] is integrated in the Nginx-Dogu to provide the general CES styles in the Nginx-Dogu. + +## Templating +A NodeJS project is defined in the [theme-build](../../theme-build) folder, which includes the [CES-Theme-Tailwind][ces-theme-tailwind]. + +### Default styles +The default styles are integrated into every HTML page by nginx as `default.css`. +These styles are defined in the file [default.css.tpl](../../resources/var/www/html/styles/default.css.tpl). +The color variables are included as CSS custom properties from the [CES-Theme-Tailwind][ces-theme-tailwind]. + +With `yarn template-default-css` the `default.css` with all color variables is generated from the template file. + +### Error pages +The error pages in the Nginx-Dogu all have the same structure and only differ in individual texts and images. +For this reason, there is only one template for the error pages: [error-page.html.tpl](../../resources/var/www/html/errors/error-page.html.tpl). + +The error pages are generated from this template with `yarn template-error-pages`. + +The configuration of the individual error pages can be found in the file [error-pages.json](../../theme-build/error-pages.json). + + + + +[ces-theme-tailwind]: https://github.com/cloudogu/ces-theme-tailwind/ \ No newline at end of file diff --git a/docs/gui/release_notes_de.md b/docs/gui/release_notes_de.md index 70a6e4d..6022d8d 100644 --- a/docs/gui/release_notes_de.md +++ b/docs/gui/release_notes_de.md @@ -4,6 +4,11 @@ Im Folgenden finden Sie die Release Notes für das Nginx-Dogu. Technische Details zu einem Release finden Sie im zugehörigen [Changelog](https://docs.cloudogu.com/de/docs/dogus/nginx/CHANGELOG/). +## Release 1.26.1-7 + +* Verbesserung der Barrierefreiheit der Fehlerseiten durch Hinzufügen des neuen Designs +* Die Fehlerseiten jetzt über das Whitelabeling-Dogu whitelabelbar + ## Release 1.26.1-6 * Verbesserung der Barrierefreiheit des Warp-Menüs durch Hinzufügen des neuen Designs diff --git a/docs/gui/release_notes_en.md b/docs/gui/release_notes_en.md index 6e38bc4..ceab333 100644 --- a/docs/gui/release_notes_en.md +++ b/docs/gui/release_notes_en.md @@ -4,6 +4,11 @@ Below you will find the release notes for the Nginx-Dogu. Technical details on a release can be found in the corresponding [Changelog](https://docs.cloudogu.com/de/docs/dogus/nginx/CHANGELOG/). +## Release 1.26.1-7 + +* Improved accessibility of the error pages by adding the new design +* The error pages can now be whitelabeled via the Whitelabeling-Dogu + ## Release 1.26.1-6 * Improved accessibility of the warp menu by adding the new design diff --git a/dogu.json b/dogu.json index e7ea070..9ddaa25 100644 --- a/dogu.json +++ b/dogu.json @@ -1,6 +1,6 @@ { "Name": "official/nginx", - "Version": "1.26.1-8", + "Version": "1.26.1-9", "DisplayName": "Nginx", "Description": "Nginx WebServer.", "Logo": "https://cloudogu.com/images/dogus/nginx.png", diff --git a/resources/etc/ces-confd/config.yaml.tpl b/resources/etc/ces-confd/config.yaml.tpl index 0605b69..82aa4f0 100644 --- a/resources/etc/ces-confd/config.yaml.tpl +++ b/resources/etc/ces-confd/config.yaml.tpl @@ -34,8 +34,8 @@ maintenance: source: path: /config/_global/maintenance default: - title: Maintenance - text: The EcoSystem is currently in maintenance mode + title: Wartungsmodus + text: Das EcoSystem ist aktuell nicht erreichbar - Bitte warten Sie target: /var/www/html/errors/503.html - template: /etc/ces-confd/templates/maintenance.html.tpl + template: /var/www/html/errors/maintenance.html.tpl \ No newline at end of file diff --git a/resources/etc/ces-confd/templates/maintenance.html.tpl b/resources/etc/ces-confd/templates/maintenance.html.tpl deleted file mode 100644 index b87d938..0000000 --- a/resources/etc/ces-confd/templates/maintenance.html.tpl +++ /dev/null @@ -1,32 +0,0 @@ - - - - - - {{.Title}} - - - - - - - - - - - -
-
-

{{.Title}}

-
{{.Text}}
-
-
- -
- -
- - - diff --git a/resources/var/www/html/errors/css/dogu-starting.css b/resources/var/www/html/errors/css/dogu-starting.css deleted file mode 100755 index 7ec60ce..0000000 --- a/resources/var/www/html/errors/css/dogu-starting.css +++ /dev/null @@ -1,131 +0,0 @@ -:root { - font-family: Calibri, Gill Sans, Gill Sans MT, Liberation Sans, Carlito, -apple-system, BlinkMacSystemFont, avenir next, avenir, segoe ui, helvetica neue, helvetica, Cantarell, Ubuntu, roboto, noto, arial, sans-serif; - - --ces-dogu-starting-color: var(--ces-color-brand, #00629E); - --ces-dogu-starting-button-color-bg: var(--ces-dogu-starting-color, #00629E); - --ces-dogu-starting-button-color-text: var(--ces-color-inverted-text, #FCFCFD); - --ces-dogu-starting-button-color-hover: var(--ces-color-brand-strong, #00426B); - --ces-dogu-starting-button-color-active: var(--ces-color-brand-stronger, #003250); - - --ces-dogu-starting-logo: url("../img/dogu-starting.svg"); - --ces-dogu-starting-logo-width: 20rem; - --ces-dogu-starting-logo-height-mobile: 12rem; - - --ces-dogu-starting-docs-visibility: visible; - - color: var(--ces-dogu-starting-color); -} - -body { - margin: 0; -} - -.dogu-starting { - margin: 2rem; - height: calc(100vh - 4rem); - display: flex; - flex-flow: row; - justify-content: center; - align-items: center; - gap: 2rem; -} - -.dogu-starting .logo { - width: var(--ces-dogu-starting-logo-width); - content: var(--ces-dogu-starting-logo); -} - -.dogu-starting h1 { - font-size: 8.5rem; - font-weight: 400; - line-height: 9rem; - margin: 0; -} - -.dogu-starting h2 { - font-size: 3rem; - font-weight: 400; - line-height: 4rem; - margin: 0; -} - -.dogu-starting .actions { - margin: 1rem 0; - display: flex; - gap: 1rem; - align-items: center; -} - -.dogu-starting .actions .docs-link{ - visibility: var(--ces-dogu-starting-docs-visibility); -} - -.dogu-starting button { - cursor: pointer; - padding: .5rem .625rem; - border: 0; - border-radius: 2.5rem; - background-color: var(--ces-dogu-starting-button-color-bg); - color: var(--ces-dogu-starting-button-color-text); - font-weight: 700; - line-height: 1.5rem; -} - -.dogu-starting button:hover { - background-color: var(--ces-dogu-starting-button-color-hover); -} - -.dogu-starting button:active { - background-color: var(--ces-dogu-starting-button-color-active); -} - -.dogu-starting button:focus-visible, a:focus-visible { - outline: none; - box-shadow: 0 0 0 2px var(--ces-color-default-focus-inner), 0 0 0 4px var(--ces-color-default-focus-outer); -} - -.dogu-starting button svg { - margin-left: .375rem; - vertical-align: text-bottom; -} - -.dogu-starting a, .dogu-starting a:visited { - text-decoration-line: underline; - text-decoration-style: dashed; - text-decoration-thickness: 1px; - text-decoration-color: var(--ces-dogu-starting-color); - color: var(--ces-dogu-starting-color); - font-weight: 700; -} - -.dogu-starting a:hover { - text-decoration-style: solid; -} - -@media (max-width: 767px) { - .dogu-starting { - flex-flow: column; - justify-content: flex-start; - text-align: center; - } - - .dogu-starting .logo { - width: unset; - height: var(--ces-dogu-starting-logo-height-mobile); - } - - .dogu-starting h1 { - font-size: 4.25rem; - line-height: 4.5rem; - } - - .dogu-starting h2 { - font-size: 1.5rem; - line-height: 2rem; - } - - .dogu-starting .actions { - flex-flow: column; - align-items: center; - } -} \ No newline at end of file diff --git a/resources/var/www/html/errors/css/errors.css b/resources/var/www/html/errors/css/errors.css new file mode 100755 index 0000000..8762907 --- /dev/null +++ b/resources/var/www/html/errors/css/errors.css @@ -0,0 +1,195 @@ +:root { + font-family: Calibri, Gill Sans, Gill Sans MT, Liberation Sans, Carlito, -apple-system, BlinkMacSystemFont, avenir next, avenir, segoe ui, helvetica neue, helvetica, Cantarell, Ubuntu, roboto, noto, arial, sans-serif; + + /* errors defaults */ + --ces-error-color: var(--ces-color-brand, #00629E); + --ces-error-button-color-bg: var(--ces-error-color, #00629E); + --ces-error-button-color-text: var(--ces-color-inverted-text, #FCFCFD); + --ces-error-button-color-hover: var(--ces-color-brand-strong, #00426B); + --ces-error-button-color-active: var(--ces-color-brand-stronger, #003250); + --ces-error-logo: url("../img/forbidden.svg"); + --ces-error-logo-width: 20rem; + --ces-error-logo-height-mobile: 12rem; + --ces-error-docs-visibility: visible; + + /* dogu starting page */ + --ces-dogu-starting-logo: url("../img/dogu-starting.svg"); + --ces-dogu-starting-logo-width: var(--ces-error-logo-width); + --ces-dogu-starting-logo-height-mobile: var(--ces-error-logo-height-mobile); + + /* maintenance page */ + --ces-maintenance-logo: url("../img/maintenance.svg"); + --ces-maintenance-logo-width: var(--ces-error-logo-width); + --ces-maintenance-logo-height-mobile: var(--ces-error-logo-height-mobile); + + /* not found page */ + --ces-not-found-logo: url("../img/not-found.svg"); + --ces-not-found-logo-width: var(--ces-error-logo-width); + --ces-not-found-logo-height-mobile: var(--ces-error-logo-height-mobile); + + color: var(--ces-error-color); +} + +body { + margin: 0; +} + +.dogu-error { + margin: 2rem; + height: calc(100vh - 4rem); + display: flex; + flex-flow: row; + justify-content: center; + align-items: center; + gap: 2rem; +} + +.dogu-error .logo { + width: var(--ces-error-logo-width); + content: var(--ces-error-logo); +} + +.dogu-error h1 { + font-size: 8.5rem; + font-weight: 400; + line-height: 9rem; + margin: 0; + word-break: break-word; +} + +.dogu-error h2 { + font-size: 3rem; + font-weight: 400; + line-height: 4rem; + margin: 0; +} + +.dogu-error .actions { + margin: 1rem 0; + display: flex; + gap: 1rem; + align-items: center; +} + +.dogu-error .actions .docs-link{ + visibility: var(--ces-error-docs-visibility); +} + +/* hide home-page-button for dogu-starting- and maintenance-page */ +.dogu-error.dogu-starting .actions .home-page-button, .dogu-error.maintenance .actions .home-page-button { + display: none; +} + +/* hide reload-button for all pages but dogu-starting- and maintenance-page */ +.dogu-error .actions .reload-button { + display: none; +} + +.dogu-error.dogu-starting .actions .reload-button, .dogu-error.maintenance .actions .reload-button { + display: initial; +} + +.dogu-error button { + cursor: pointer; + padding: .5rem .625rem; + border: 0; + border-radius: 2.5rem; + background-color: var(--ces-error-button-color-bg); + color: var(--ces-error-button-color-text); + font-weight: 700; + line-height: 1.5rem; +} + +.dogu-error button:hover { + background-color: var(--ces-error-button-color-hover); +} + +.dogu-error button:active { + background-color: var(--ces-error-button-color-active); +} + +.dogu-error button:focus-visible, a:focus-visible { + outline: none; + box-shadow: 0 0 0 2px var(--ces-color-default-focus-inner), 0 0 0 4px var(--ces-color-default-focus-outer); +} + +.dogu-error button svg { + margin-left: .375rem; + vertical-align: text-bottom; +} + +.dogu-error a, .dogu-error a:visited { + text-decoration-line: underline; + text-decoration-style: dashed; + text-decoration-thickness: 1px; + text-decoration-color: var(--ces-error-color); + color: var(--ces-error-color); + font-weight: 700; +} + +.dogu-error a:hover { + text-decoration-style: solid; +} + + +/* dogu starting page */ +.dogu-error.dogu-starting .logo { + width: var(--ces-dogu-starting-logo-width); + content: var(--ces-dogu-starting-logo); +} + +/* not found page */ +.dogu-error.not-found .logo { + width: var(--ces-not-found-logo-width); + content: var(--ces-not-found-logo); +} + +/* maintenance page */ +.dogu-error.maintenance .logo { + width: var(--ces-maintenance-logo-width); + content: var(--ces-maintenance-logo); +} + + +@media (max-width: 767px) { + .dogu-error { + flex-flow: column; + justify-content: flex-start; + text-align: center; + } + + .dogu-error .logo { + width: unset; + height: var(--ces-error-logo-height-mobile); + } + + .dogu-error h1 { + font-size: 4.25rem; + line-height: 4.5rem; + } + + .dogu-error h2 { + font-size: 1.5rem; + line-height: 2rem; + } + + .dogu-error .actions { + flex-flow: column; + align-items: center; + } + + /* dogu starting page */ + .dogu-error.dogu-starting .logo { + height: var(--ces-dogu-starting-logo-height-mobile); + } + + /* not found page */ + .dogu-error.not-found .logo { + height: var(--ces-not-found-logo-height-mobile); + } + + /* maintenance page */ + .dogu-error.maintenance .logo { + height: var(--ces-maintenance-logo-height-mobile); + } +} \ No newline at end of file diff --git a/resources/var/www/html/errors/starting.html b/resources/var/www/html/errors/error-page.html.tpl old mode 100755 new mode 100644 similarity index 63% rename from resources/var/www/html/errors/starting.html rename to resources/var/www/html/errors/error-page.html.tpl index 07a3798..30b563f --- a/resources/var/www/html/errors/starting.html +++ b/resources/var/www/html/errors/error-page.html.tpl @@ -4,25 +4,32 @@ - Dogu startet - + ${title} + -
+
- +
-

Dogu startet

-

Bitte haben Sie Geduld.

+

${title}

+

${subtitle}

- + Dokumentation
diff --git a/resources/var/www/html/errors/img/background-cloud.svg b/resources/var/www/html/errors/img/background-cloud.svg deleted file mode 100755 index 8731278..0000000 --- a/resources/var/www/html/errors/img/background-cloud.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/var/www/html/errors/img/flying_cloud.svg b/resources/var/www/html/errors/img/flying_cloud.svg deleted file mode 100755 index f3c38f7..0000000 --- a/resources/var/www/html/errors/img/flying_cloud.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/var/www/html/errors/img/forbidden.svg b/resources/var/www/html/errors/img/forbidden.svg new file mode 100644 index 0000000..b3e95d9 --- /dev/null +++ b/resources/var/www/html/errors/img/forbidden.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/resources/var/www/html/errors/img/logo-white-320px.png b/resources/var/www/html/errors/img/logo-white-320px.png deleted file mode 100755 index 40648b3..0000000 Binary files a/resources/var/www/html/errors/img/logo-white-320px.png and /dev/null differ diff --git a/resources/var/www/html/errors/img/maintenance.svg b/resources/var/www/html/errors/img/maintenance.svg new file mode 100644 index 0000000..0edfdef --- /dev/null +++ b/resources/var/www/html/errors/img/maintenance.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/resources/var/www/html/errors/img/not-found.svg b/resources/var/www/html/errors/img/not-found.svg new file mode 100644 index 0000000..022fecc --- /dev/null +++ b/resources/var/www/html/errors/img/not-found.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/resources/var/www/html/styles/default.css b/resources/var/www/html/styles/default.css.tpl similarity index 67% rename from resources/var/www/html/styles/default.css rename to resources/var/www/html/styles/default.css.tpl index 5d9ad44..dff6104 100644 --- a/resources/var/www/html/styles/default.css +++ b/resources/var/www/html/styles/default.css.tpl @@ -1,39 +1,5 @@ :root { - --ces-color-brand-stronger: #003250; - --ces-color-brand-strong: #00426B; - --ces-color-brand: #00629E; - --ces-color-brand-weak: #9EDAFF; - --ces-color-brand-weaker: #D4EDFC; - - --ces-color-success-stronger: #0A2913; - --ces-color-success-strong: #145226; - --ces-color-success: #1F7A38; - --ces-color-success-weak: #85E09E; - --ces-color-success-weaker: #EBFAEF; - - --ces-color-danger-stronger: #521414; - --ces-color-danger-strong: #7A1F1F; - --ces-color-danger: #CC3333; - --ces-color-danger-weak: #EBADAD; - --ces-color-danger-weaker: #F8EDED; - - --ces-color-warning-stronger: #3D3700; - --ces-color-warning-strong: #574E00; - --ces-color-warning: #707600; - --ces-color-warning-weak: #FFE500; - --ces-color-warning-weaker: #FFFACC; - - --ces-color-neutral-stronger: #333333; - --ces-color-neutral-strong: #4D4D4D; - --ces-color-neutral: #666666; - --ces-color-neutral-weak: #CCCCCC; - --ces-color-neutral-weaker: #F5F5F5; - - --ces-color-default-background: #FFFFFF; - --ces-color-default-focus-inner: #FFFFFF; - --ces-color-default-focus-outer: #CC14CC; - --ces-color-default-text: #0D1C26; - --ces-color-inverted-text: #FCFCFD; + ${colors} /* The base64 encoded vector image (cloudogu logo: blib blue): https://github.com/cloudogu/ces-theme/blob/develop/dist/images/logo/blib-blue-vec.svg */ --ces-logo-default: url('data:image/svg+xml;base64,PHN2ZyBpZD0iZ2VzY2hsb3NzZW5lc19FbGVtZW50IiBkYXRhLW5hbWU9Imdlc2NobG9zc2VuZXMgRWxlbWVudCIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2aWV3Qm94PSIwIDAgODM4LjY3IDUxMy43NyI+PGRlZnM+PHN0eWxlPi5jbHMtMXtmaWxsOiMyNGEyZGN9PC9zdHlsZT48L2RlZnM+PHBhdGggY2xhc3M9ImNscy0xIiBkPSJNNzIxLjMxIDMyOS4zNmE2MC42NiA2MC42NiAwIDAgMS0xMTcuMSAyMi4yNGwuNTMgMi41MS0xMTguMSAyMy4zN2E2Ny43MyA2Ny43MyAwIDAgMS0xMzUuNC4xN2wtMTE5LTIzLjU0YTYwLjY4IDYwLjY4IDAgMSAxIDUuMjctMjQuNzVsMTE3LjMgMjQuMTRhNjcuODMgNjcuODMgMCAwIDEgNTEuNjQtNDQuNjRoLS4wNnYtNzAuMjVhNjAuNjggNjAuNjggMCAxIDEgMjQuMjUuMTV2NzBhNjguMjEgNjguMjEgMCAwIDEgNTIuMjcgNDQuNjFsMTE2LjUzLTI0IC42IDIuODFjLS4wNS0uOTMtLjA3LTEuODctLjA3LTIuODFhNjAuNjYgNjAuNjYgMCAxIDEgMTIxLjMxIDB6Ii8+PHBhdGggY2xhc3M9ImNscy0xIiBkPSJNNzQyIDE3My41MWMtNTUuMzItMjUuODgtMTA2LjUtMjMtMTQ3LjY1LTYuMTgtMi00Mi42Ny0yMC44OC04My43Ni01Ny0xMThDNDY3LjExLTE3LjE4IDM1My44Ni0xMSAyODcuNTUgNjIuNzVjLTI3LjggMzAuOTMtNDIgNjcuNDEtNDQuMiAxMDQuNTYtNDEuMTMtMTYuODQtOTIuMy0xOS42Ny0xNDcuNTkgNi4yLTcwLjI0IDMyLjg2LTEyNS42IDEzNi4xMi03NS4wNyAyMzYuMTQgMzYuODIgNzIuOSAxMjguNDkgMTA3LjU3IDE4NyAxMDEuNjRsNDIzLjU3LjEzQzY4OS44MSA1MTYuNzMgNzgwLjQ2IDQ4MiA4MTcgNDA5LjY1YzUwLjU1LTEwMC4wMi00LjgxLTIwMy4yOC03NS0yMzYuMTR6bTE0LjU5IDIwOS4yM2MtMjEuNTUgMzkuNy01OC43NSA1NC43My0xMDAuNzcgNTguNTRINTA2LjU5Yy0xOS4zOSAyNC40NS00Ny4zNCA0My41OC04Ny41NSA0My41OC0zNS44MyAwLTY2LjQyLTE1LjI1LTg3LjU1LTQzLjU4bC0xNDggLjE0Yy00Mi42Ni0zLjU4LTgwLjUyLTE4LjQ5LTEwMi4zNC01OC42OC0zMS44NC01OC42Ni02LjU4LTEyNS40NSA0OC4zNy0xNTIuMzJzMTIyLTEuODUgMTQ4IDU0LjY3YTExNC4yOCAxMTQuMjggMCAwIDEgNi4xNyAxOC4xNnM0LjIzLTUgNC45My01Ljc3YzIwLjQ2LTIxLjU3IDMzLjUzLTI5IDUzLjMyLTM5LjkyYTkxLjY5IDkxLjY5IDAgMCAxLTEzLjc4LTE2LjM2Yy0uNTctMS0xLTEuODEtMS4yMy0yLjEyLTIzLjE2LTM0LjMyLTI2LjcxLTg5LjgyIDkuMjQtMTMxLjg0QzM3NS41MiA2MS4yIDQ0Mi42OCA1Ni45MyA0OTAgOTUuNjZjMzEuODggMjYuMDggNTIuMTkgNzkuNTYgMjcuNjMgMTMxLjhsLS4wNy4xcy04LjU0IDE3LjkzLTIxLjc4IDMwYzE5Ljc5IDExIDMyLjg2IDE4LjM1IDUzLjMyIDM5LjkyLjcuNzQgNC44OCA1LjczIDQuOTMgNS43N2ExMTUuMyAxMTUuMyAwIDAgMSA2LjE3LTE4LjE2YzI1LjkyLTU2LjUyIDkzLTgxLjU0IDE0Ny45NS01NC42N3M4MC4yMyA5My42NiA0OC4zOSAxNTIuMzJ6Ii8+PC9zdmc+'); @@ -43,4 +9,4 @@ * Whenever the image is change, the ration variable has to be set as well */ --ces-logo-default-ratio: 1.63; -} +} \ No newline at end of file diff --git a/theme-build/error-pages.json b/theme-build/error-pages.json new file mode 100644 index 0000000..8b413d0 --- /dev/null +++ b/theme-build/error-pages.json @@ -0,0 +1,56 @@ +[ + { + "name": "starting.html", + "pageType": "dogu-starting", + "title": "Dogu startet", + "subtitle": "Bitte haben Sie Geduld." + }, + { + "name": "404.html", + "pageType": "not-found", + "title": "404", + "subtitle": "Seite nicht gefunden" + }, + { + "name": "401.html", + "pageType": "error", + "title": "401", + "subtitle": "Nicht authentifiziert - Bitte einloggen" + }, + { + "name": "403.html", + "pageType": "error", + "title": "403", + "subtitle": "Kein Zugriff - Bitte an Admin wenden" + }, + { + "name": "408.html", + "pageType": "error", + "title": "408", + "subtitle": "Zeitüberschreitung der Anfrage" + }, + { + "name": "500.html", + "pageType": "error", + "title": "500", + "subtitle": "Interner Serverfehler - Bitte an Admin wenden" + }, + { + "name": "502.html", + "pageType": "error", + "title": "502", + "subtitle": "Dogu nicht erreichbar - Bitte an Admin wenden" + }, + { + "name": "maintenance.html.tpl", + "pageType": "maintenance", + "title": "{{.Title}}", + "subtitle": "{{.Text}}" + }, + { + "name": "504.html", + "pageType": "error", + "title": "504", + "subtitle": "Dogu nicht erreichbar - Bitte an Admin wenden" + } +] \ No newline at end of file diff --git a/theme-build/package.json b/theme-build/package.json new file mode 100644 index 0000000..1ecd0a2 --- /dev/null +++ b/theme-build/package.json @@ -0,0 +1,15 @@ +{ + "name": "theme-build", + "version": "0.0.1", + "license": "AGPL-3.0-only", + "scripts": { + "template-default-css-dev": "node template-colors.js ../resources/var/www/html/styles/default.css.tpl ./out/default.css", + "template-default-css": "node template-colors.js ../resources/var/www/html/styles/default.css.tpl ../resources/var/www/html/styles/default.css", + "template-error-pages-dev": "node template-error-pages.js ../resources/var/www/html/errors/error-page.html.tpl ./out", + "template-error-pages": "node template-error-pages.js ../resources/var/www/html/errors/error-page.html.tpl ../resources/var/www/html/errors" + }, + "dependencies": { + "lodash": "^4.17.21", + "@cloudogu/ces-theme-tailwind": "1.0.0" + } +} diff --git a/theme-build/template-colors.js b/theme-build/template-colors.js new file mode 100644 index 0000000..8273cfc --- /dev/null +++ b/theme-build/template-colors.js @@ -0,0 +1,40 @@ +const cm = require('@cloudogu/ces-theme-tailwind/config/colormapping.cjs'); +const fs = require("fs"); +const path = require("path"); +const _ = require('lodash'); + +function createColors() { + let colors = ""; + for (const variablesKey in cm.variables) { + colors += `${variablesKey}: ${cm.variables[variablesKey]};\n\t` + } + + return colors +} + +function addColorsToDefaultCss() { + const args = process.argv.slice(2); + if (args.length !== 2) { + console.error("wrong arguments. Must be 2"); + return + } + + const src = args[0]; + const dst = args[1]; + + const srcData = fs.readFileSync(src); + + // template + const compiledTemplate = _.template(srcData) + const dstData = compiledTemplate({colors: createColors()}) + + + // make sure that the destination-dir exists + const dstDir = path.dirname(dst); + fs.mkdirSync(dstDir, {recursive: true}); + + console.log("creating default-css at", dst); + fs.writeFileSync(dst, dstData); +} + +addColorsToDefaultCss(); \ No newline at end of file diff --git a/theme-build/template-error-pages.js b/theme-build/template-error-pages.js new file mode 100644 index 0000000..7f81ec7 --- /dev/null +++ b/theme-build/template-error-pages.js @@ -0,0 +1,38 @@ +const fs = require('fs'); +const _ = require("lodash"); +const path = require("path"); + + +const pages = require("./error-pages.json") + +function createErrorPages() { + const args = process.argv.slice(2); + if (args.length !== 2) { + console.error("wrong arguments. Must be 2"); + return + } + + const version = process.env.VERSION?? "v0"; + + const template = args[0]; + const dstDir = args[1]; + + const templateData = fs.readFileSync(template); + const compiledTemplate = _.template(templateData) + + // make sure that the destination-dir exists + fs.mkdirSync(dstDir, {recursive: true}); + + // template pages + for (const page of pages) { + const renderedPage = compiledTemplate({version: version, ...page}) + + const pageFile = `${dstDir}/${page.name}`; + console.log("creating page", pageFile); + fs.writeFileSync(pageFile, renderedPage); + } +} +createErrorPages(); + + + diff --git a/theme-build/yarn.lock b/theme-build/yarn.lock new file mode 100644 index 0000000..22d5a99 --- /dev/null +++ b/theme-build/yarn.lock @@ -0,0 +1,798 @@ +# THIS IS AN AUTOGENERATED FILE. DO NOT EDIT THIS FILE DIRECTLY. +# yarn lockfile v1 + + +"@babel/runtime@^7.15.4", "@babel/runtime@^7.22.5", "@babel/runtime@^7.23.2": + version "7.25.6" + resolved "https://registry.yarnpkg.com/@babel/runtime/-/runtime-7.25.6.tgz#9afc3289f7184d8d7f98b099884c26317b9264d2" + integrity sha512-VBj9MYyDb9tuLq7yzqjgzt6Q+IBQLrGZfdjOekyEirZPHxXWoTSGUTMrpsfi58Up73d13NfYLv8HT9vmznjzhQ== + dependencies: + regenerator-runtime "^0.14.0" + +"@cloudogu/ces-theme-tailwind@1.0.0": + version "1.0.0" + resolved "https://registry.yarnpkg.com/@cloudogu/ces-theme-tailwind/-/ces-theme-tailwind-1.0.0.tgz#ca999dac028019cb1eb976d69772d5cfa22507fa" + integrity sha512-+dvJuzhKqOHcucWseMiPdT1/2/0nWbLLmfj9jmS7voJ2XdxyU33qQCCagSyWa9EwW7QNP07hbmOW/G+qOgiLJA== + dependencies: + "@headlessui/react" "^1.7.17" + "@phosphor-icons/react" "2.0.15" + "@radix-ui/react-checkbox" "^1.0.4" + "@radix-ui/react-dialog" "^1.0.5" + "@radix-ui/react-dropdown-menu" "^2.0.6" + "@radix-ui/react-label" "^2.0.2" + "@radix-ui/react-navigation-menu" "^1.1.4" + "@radix-ui/react-radio-group" "^1.1.3" + "@radix-ui/react-select" "^2.0.0" + "@radix-ui/react-toast" "^1.1.5" + big.js "^6.2.1" + class-variance-authority "^0.7.0" + formik "^2.2.9" + i18next "^23.6.0" + i18next-browser-languagedetector "^7.1.0" + i18next-http-backend "^2.2.2" + react "^18.2.0" + react-dom "^18.2.0" + react-i18next "^13.3.1" + react-loading-skeleton "^3.3.1" + react-router-dom "^6.8.2" + tailwind-merge "^1.11.0" + tailwindcss-aria-attributes "^1.3.0" + uuid "^9.0.1" + yup "^0.32.11" + +"@floating-ui/core@^1.6.0": + version "1.6.7" + resolved "https://registry.yarnpkg.com/@floating-ui/core/-/core-1.6.7.tgz#7602367795a390ff0662efd1c7ae8ca74e75fb12" + integrity sha512-yDzVT/Lm101nQ5TCVeK65LtdN7Tj4Qpr9RTXJ2vPFLqtLxwOrpoxAHAJI8J3yYWUc40J0BDBheaitK5SJmno2g== + dependencies: + "@floating-ui/utils" "^0.2.7" + +"@floating-ui/dom@^1.0.0": + version "1.6.10" + resolved "https://registry.yarnpkg.com/@floating-ui/dom/-/dom-1.6.10.tgz#b74c32f34a50336c86dcf1f1c845cf3a39e26d6f" + integrity sha512-fskgCFv8J8OamCmyun8MfjB1Olfn+uZKjOKZ0vhYF3gRmEUXcGOjxWL8bBr7i4kIuPZ2KD2S3EUIOxnjC8kl2A== + dependencies: + "@floating-ui/core" "^1.6.0" + "@floating-ui/utils" "^0.2.7" + +"@floating-ui/react-dom@^2.0.0": + version "2.1.1" + resolved "https://registry.yarnpkg.com/@floating-ui/react-dom/-/react-dom-2.1.1.tgz#cca58b6b04fc92b4c39288252e285e0422291fb0" + integrity sha512-4h84MJt3CHrtG18mGsXuLCHMrug49d7DFkU0RMIyshRveBeyV2hmV/pDaF2Uxtu8kgq5r46llp5E5FQiR0K2Yg== + dependencies: + "@floating-ui/dom" "^1.0.0" + +"@floating-ui/utils@^0.2.7": + version "0.2.7" + resolved "https://registry.yarnpkg.com/@floating-ui/utils/-/utils-0.2.7.tgz#d0ece53ce99ab5a8e37ebdfe5e32452a2bfc073e" + integrity sha512-X8R8Oj771YRl/w+c1HqAC1szL8zWQRwFvgDwT129k9ACdBoud/+/rX9V0qiMl6LWUdP9voC2nDVZYPMQQsb6eA== + +"@headlessui/react@^1.7.17": + version "1.7.19" + resolved "https://registry.yarnpkg.com/@headlessui/react/-/react-1.7.19.tgz#91c78cf5fcb254f4a0ebe96936d48421caf75f40" + integrity sha512-Ll+8q3OlMJfJbAKM/+/Y2q6PPYbryqNTXDbryx7SXLIDamkF6iQFbriYHga0dY44PvDhvvBWCx1Xj4U5+G4hOw== + dependencies: + "@tanstack/react-virtual" "^3.0.0-beta.60" + client-only "^0.0.1" + +"@phosphor-icons/react@2.0.15": + version "2.0.15" + resolved "https://registry.yarnpkg.com/@phosphor-icons/react/-/react-2.0.15.tgz#4d8e28484d45649f53a6cd75db161cf8b8379e1d" + integrity sha512-PQKNcRrfERlC8gJGNz0su0i9xVmeubXSNxucPcbCLDd9u0cwJVTEyYK87muul/svf0UXFdL2Vl6bbeOhT1Mwow== + +"@radix-ui/number@1.1.0": + version "1.1.0" + resolved "https://registry.yarnpkg.com/@radix-ui/number/-/number-1.1.0.tgz#1e95610461a09cdf8bb05c152e76ca1278d5da46" + integrity sha512-V3gRzhVNU1ldS5XhAPTom1fOIo4ccrjjJgmE+LI2h/WaFpHmx0MQApT+KZHnx8abG6Avtfcz4WoEciMnpFT3HQ== + +"@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-arrow@1.1.0": + version "1.1.0" + resolved "https://registry.yarnpkg.com/@radix-ui/react-arrow/-/react-arrow-1.1.0.tgz#744f388182d360b86285217e43b6c63633f39e7a" + integrity sha512-FmlW1rCg7hBpEBwFbjHwCW6AmWLQM6g/v0Sn8XbP9NvmSZ2San1FpQeyPtufzOMSIx7Y4dzjlHoifhp+7NkZhw== + dependencies: + "@radix-ui/react-primitive" "2.0.0" + +"@radix-ui/react-checkbox@^1.0.4": + version "1.1.1" + resolved "https://registry.yarnpkg.com/@radix-ui/react-checkbox/-/react-checkbox-1.1.1.tgz#a559c4303957d797acee99914480b755aa1f27d6" + integrity sha512-0i/EKJ222Afa1FE0C6pNJxDq1itzcl3HChE9DwskA4th4KRse8ojx8a1nVcOjwJdbpDLcz7uol77yYnQNMHdKw== + 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-presence" "1.1.0" + "@radix-ui/react-primitive" "2.0.0" + "@radix-ui/react-use-controllable-state" "1.1.0" + "@radix-ui/react-use-previous" "1.1.0" + "@radix-ui/react-use-size" "1.1.0" + +"@radix-ui/react-collection@1.1.0": + version "1.1.0" + resolved "https://registry.yarnpkg.com/@radix-ui/react-collection/-/react-collection-1.1.0.tgz#f18af78e46454a2360d103c2251773028b7724ed" + integrity sha512-GZsZslMJEyo1VKm5L1ZJY8tGDxZNPAoUeQUIbKeJfoi7Q4kmig5AsgLMYYuyYbfjd8fBmFORAIwYAkXMnXZgZw== + dependencies: + "@radix-ui/react-compose-refs" "1.1.0" + "@radix-ui/react-context" "1.1.0" + "@radix-ui/react-primitive" "2.0.0" + "@radix-ui/react-slot" "1.1.0" + +"@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.0.5": + 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-direction@1.1.0": + version "1.1.0" + resolved "https://registry.yarnpkg.com/@radix-ui/react-direction/-/react-direction-1.1.0.tgz#a7d39855f4d077adc2a1922f9c353c5977a09cdc" + integrity sha512-BUuBvgThEiAXh2DWu93XsT+a3aWrGqolGlqqw5VU1kG7p/ZH2cuDlM1sRLNnY3QcBS69UIz2mcKhMxDsdewhjg== + +"@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-dropdown-menu@^2.0.6": + version "2.1.1" + resolved "https://registry.yarnpkg.com/@radix-ui/react-dropdown-menu/-/react-dropdown-menu-2.1.1.tgz#3dc578488688250dbbe109d9ff2ca28a9bca27ec" + integrity sha512-y8E+x9fBq9qvteD2Zwa4397pUVhYsh9iq44b5RD5qu1GMJWBCBuVg1hMyItbc6+zH00TxGRqd9Iot4wzf3OoBQ== + 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-id" "1.1.0" + "@radix-ui/react-menu" "2.1.1" + "@radix-ui/react-primitive" "2.0.0" + "@radix-ui/react-use-controllable-state" "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-label@^2.0.2": + version "2.1.0" + resolved "https://registry.yarnpkg.com/@radix-ui/react-label/-/react-label-2.1.0.tgz#3aa2418d70bb242be37c51ff5e51a2adcbc372e3" + integrity sha512-peLblDlFw/ngk3UWq0VnYaOLy6agTZZ+MUO/WhVfm14vJGML+xH4FAl2XQGLqdefjNb7ApRg6Yn7U42ZhmYXdw== + dependencies: + "@radix-ui/react-primitive" "2.0.0" + +"@radix-ui/react-menu@2.1.1": + version "2.1.1" + resolved "https://registry.yarnpkg.com/@radix-ui/react-menu/-/react-menu-2.1.1.tgz#bd623ace0e1ae1ac78023a505fec0541d59fb346" + integrity sha512-oa3mXRRVjHi6DZu/ghuzdylyjaMXLymx83irM7hTxutQbD+7IhPKdMdRHD26Rm+kHRrWcrUkkRPv5pd47a2xFQ== + dependencies: + "@radix-ui/primitive" "1.1.0" + "@radix-ui/react-collection" "1.1.0" + "@radix-ui/react-compose-refs" "1.1.0" + "@radix-ui/react-context" "1.1.0" + "@radix-ui/react-direction" "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-popper" "1.2.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-roving-focus" "1.1.0" + "@radix-ui/react-slot" "1.1.0" + "@radix-ui/react-use-callback-ref" "1.1.0" + aria-hidden "^1.1.1" + react-remove-scroll "2.5.7" + +"@radix-ui/react-navigation-menu@^1.1.4": + version "1.2.0" + resolved "https://registry.yarnpkg.com/@radix-ui/react-navigation-menu/-/react-navigation-menu-1.2.0.tgz#884c9b9fd141cc5db257bd3f6bf3b84e349c6617" + integrity sha512-OQ8tcwAOR0DhPlSY3e4VMXeHiol7la4PPdJWhhwJiJA+NLX0SaCaonOkRnI3gCDHoZ7Fo7bb/G6q25fRM2Y+3Q== + dependencies: + "@radix-ui/primitive" "1.1.0" + "@radix-ui/react-collection" "1.1.0" + "@radix-ui/react-compose-refs" "1.1.0" + "@radix-ui/react-context" "1.1.0" + "@radix-ui/react-direction" "1.1.0" + "@radix-ui/react-dismissable-layer" "1.1.0" + "@radix-ui/react-id" "1.1.0" + "@radix-ui/react-presence" "1.1.0" + "@radix-ui/react-primitive" "2.0.0" + "@radix-ui/react-use-callback-ref" "1.1.0" + "@radix-ui/react-use-controllable-state" "1.1.0" + "@radix-ui/react-use-layout-effect" "1.1.0" + "@radix-ui/react-use-previous" "1.1.0" + "@radix-ui/react-visually-hidden" "1.1.0" + +"@radix-ui/react-popper@1.2.0": + version "1.2.0" + resolved "https://registry.yarnpkg.com/@radix-ui/react-popper/-/react-popper-1.2.0.tgz#a3e500193d144fe2d8f5d5e60e393d64111f2a7a" + integrity sha512-ZnRMshKF43aBxVWPWvbj21+7TQCvhuULWJ4gNIKYpRlQt5xGRhLx66tMp8pya2UkGHTSlhpXwmjqltDYHhw7Vg== + dependencies: + "@floating-ui/react-dom" "^2.0.0" + "@radix-ui/react-arrow" "1.1.0" + "@radix-ui/react-compose-refs" "1.1.0" + "@radix-ui/react-context" "1.1.0" + "@radix-ui/react-primitive" "2.0.0" + "@radix-ui/react-use-callback-ref" "1.1.0" + "@radix-ui/react-use-layout-effect" "1.1.0" + "@radix-ui/react-use-rect" "1.1.0" + "@radix-ui/react-use-size" "1.1.0" + "@radix-ui/rect" "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-radio-group@^1.1.3": + version "1.2.0" + resolved "https://registry.yarnpkg.com/@radix-ui/react-radio-group/-/react-radio-group-1.2.0.tgz#f937dd6b9436ded80c4bebdf3901c20cb8bcbb5a" + integrity sha512-yv+oiLaicYMBpqgfpSPw6q+RyXlLdIpQWDHZbUKURxe+nEh53hFXPPlfhfQQtYkS5MMK/5IWIa76SksleQZSzw== + 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-direction" "1.1.0" + "@radix-ui/react-presence" "1.1.0" + "@radix-ui/react-primitive" "2.0.0" + "@radix-ui/react-roving-focus" "1.1.0" + "@radix-ui/react-use-controllable-state" "1.1.0" + "@radix-ui/react-use-previous" "1.1.0" + "@radix-ui/react-use-size" "1.1.0" + +"@radix-ui/react-roving-focus@1.1.0": + version "1.1.0" + resolved "https://registry.yarnpkg.com/@radix-ui/react-roving-focus/-/react-roving-focus-1.1.0.tgz#b30c59daf7e714c748805bfe11c76f96caaac35e" + integrity sha512-EA6AMGeq9AEeQDeSH0aZgG198qkfHSbvWTf1HvoDmOB5bBG/qTxjYMWUKMnYiV6J/iP/J8MEFSuB2zRU2n7ODA== + dependencies: + "@radix-ui/primitive" "1.1.0" + "@radix-ui/react-collection" "1.1.0" + "@radix-ui/react-compose-refs" "1.1.0" + "@radix-ui/react-context" "1.1.0" + "@radix-ui/react-direction" "1.1.0" + "@radix-ui/react-id" "1.1.0" + "@radix-ui/react-primitive" "2.0.0" + "@radix-ui/react-use-callback-ref" "1.1.0" + "@radix-ui/react-use-controllable-state" "1.1.0" + +"@radix-ui/react-select@^2.0.0": + version "2.1.1" + resolved "https://registry.yarnpkg.com/@radix-ui/react-select/-/react-select-2.1.1.tgz#df05cb0b29d3deaef83b505917c4042e0e418a9f" + integrity sha512-8iRDfyLtzxlprOo9IicnzvpsO1wNCkuwzzCM+Z5Rb5tNOpCdMvcc2AkzX0Fz+Tz9v6NJ5B/7EEgyZveo4FBRfQ== + dependencies: + "@radix-ui/number" "1.1.0" + "@radix-ui/primitive" "1.1.0" + "@radix-ui/react-collection" "1.1.0" + "@radix-ui/react-compose-refs" "1.1.0" + "@radix-ui/react-context" "1.1.0" + "@radix-ui/react-direction" "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-popper" "1.2.0" + "@radix-ui/react-portal" "1.1.1" + "@radix-ui/react-primitive" "2.0.0" + "@radix-ui/react-slot" "1.1.0" + "@radix-ui/react-use-callback-ref" "1.1.0" + "@radix-ui/react-use-controllable-state" "1.1.0" + "@radix-ui/react-use-layout-effect" "1.1.0" + "@radix-ui/react-use-previous" "1.1.0" + "@radix-ui/react-visually-hidden" "1.1.0" + aria-hidden "^1.1.1" + react-remove-scroll "2.5.7" + +"@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-toast@^1.1.5": + version "1.2.1" + resolved "https://registry.yarnpkg.com/@radix-ui/react-toast/-/react-toast-1.2.1.tgz#4bde231ed27d007dcd0455a446565ca619f92a2d" + integrity sha512-5trl7piMXcZiCq7MW6r8YYmu0bK5qDpTWz+FdEPdKyft2UixkspheYbjbrLXVN5NGKHFbOP7lm8eD0biiSqZqg== + dependencies: + "@radix-ui/primitive" "1.1.0" + "@radix-ui/react-collection" "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-portal" "1.1.1" + "@radix-ui/react-presence" "1.1.0" + "@radix-ui/react-primitive" "2.0.0" + "@radix-ui/react-use-callback-ref" "1.1.0" + "@radix-ui/react-use-controllable-state" "1.1.0" + "@radix-ui/react-use-layout-effect" "1.1.0" + "@radix-ui/react-visually-hidden" "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== + +"@radix-ui/react-use-previous@1.1.0": + version "1.1.0" + resolved "https://registry.yarnpkg.com/@radix-ui/react-use-previous/-/react-use-previous-1.1.0.tgz#d4dd37b05520f1d996a384eb469320c2ada8377c" + integrity sha512-Z/e78qg2YFnnXcW88A4JmTtm4ADckLno6F7OXotmkQfeuCVaKuYzqAATPhVzl3delXE7CxIV8shofPn3jPc5Og== + +"@radix-ui/react-use-rect@1.1.0": + version "1.1.0" + resolved "https://registry.yarnpkg.com/@radix-ui/react-use-rect/-/react-use-rect-1.1.0.tgz#13b25b913bd3e3987cc9b073a1a164bb1cf47b88" + integrity sha512-0Fmkebhr6PiseyZlYAOtLS+nb7jLmpqTrJyv61Pe68MKYW6OWdRE2kI70TaYY27u7H0lajqM3hSMMLFq18Z7nQ== + dependencies: + "@radix-ui/rect" "1.1.0" + +"@radix-ui/react-use-size@1.1.0": + version "1.1.0" + resolved "https://registry.yarnpkg.com/@radix-ui/react-use-size/-/react-use-size-1.1.0.tgz#b4dba7fbd3882ee09e8d2a44a3eed3a7e555246b" + integrity sha512-XW3/vWuIXHa+2Uwcc2ABSfcCledmXhhQPlGbfcRXbiUQI5Icjcg19BGCZVKKInYbvUCut/ufbbLLPFC5cbb1hw== + dependencies: + "@radix-ui/react-use-layout-effect" "1.1.0" + +"@radix-ui/react-visually-hidden@1.1.0": + version "1.1.0" + resolved "https://registry.yarnpkg.com/@radix-ui/react-visually-hidden/-/react-visually-hidden-1.1.0.tgz#ad47a8572580f7034b3807c8e6740cd41038a5a2" + integrity sha512-N8MDZqtgCgG5S3aV60INAB475osJousYpZ4cTJ2cFbMpdHS5Y6loLTH8LPtkj2QN0x93J30HT/M3qJXM0+lyeQ== + dependencies: + "@radix-ui/react-primitive" "2.0.0" + +"@radix-ui/rect@1.1.0": + version "1.1.0" + resolved "https://registry.yarnpkg.com/@radix-ui/rect/-/rect-1.1.0.tgz#f817d1d3265ac5415dadc67edab30ae196696438" + integrity sha512-A9+lCBZoaMJlVKcRBz2YByCG+Cp2t6nAnMnNba+XiWxnj6r4JUFqfsgwocMBZU9LPtdxC6wB56ySYpc7LQIoJg== + +"@remix-run/router@1.19.2": + version "1.19.2" + resolved "https://registry.yarnpkg.com/@remix-run/router/-/router-1.19.2.tgz#0c896535473291cb41f152c180bedd5680a3b273" + integrity sha512-baiMx18+IMuD1yyvOGaHM9QrVUPGGG0jC+z+IPHnRJWUAUvaKuWKyE8gjDj2rzv3sz9zOGoRSPgeBVHRhZnBlA== + +"@tanstack/react-virtual@^3.0.0-beta.60": + version "3.10.7" + resolved "https://registry.yarnpkg.com/@tanstack/react-virtual/-/react-virtual-3.10.7.tgz#428d0c29c6d2046ab905f4278446a3fe89bfd4ef" + integrity sha512-yeP+M0G8D+15ZFPivpuQ5hoM4Fa/PzERBx8P8EGcfEsXX3JOb9G9UUrqc47ZXAxvK+YqzM9T5qlJUYUFOwCZJw== + dependencies: + "@tanstack/virtual-core" "3.10.7" + +"@tanstack/virtual-core@3.10.7": + version "3.10.7" + resolved "https://registry.yarnpkg.com/@tanstack/virtual-core/-/virtual-core-3.10.7.tgz#fb1d8ae1257c9fe3a6e99c911cad0d1a1b07f598" + integrity sha512-ND5dfsU0n9F4gROzwNNDJmg6y8n9pI8YWxtgbfJ5UcNn7Hx+MxEXtXcQ189tS7sh8pmCObgz2qSiyRKTZxT4dg== + +"@types/hoist-non-react-statics@^3.3.1": + version "3.3.5" + resolved "https://registry.yarnpkg.com/@types/hoist-non-react-statics/-/hoist-non-react-statics-3.3.5.tgz#dab7867ef789d87e2b4b0003c9d65c49cc44a494" + integrity sha512-SbcrWzkKBw2cdwRTwQAswfpB9g9LJWfjtUeW/jvNwbhC8cpmmNYVePa+ncbUe0rGTQ7G3Ff6mYUN2VMfLVr+Sg== + dependencies: + "@types/react" "*" + hoist-non-react-statics "^3.3.0" + +"@types/lodash@^4.14.175": + version "4.17.7" + resolved "https://registry.yarnpkg.com/@types/lodash/-/lodash-4.17.7.tgz#2f776bcb53adc9e13b2c0dfd493dfcbd7de43612" + integrity sha512-8wTvZawATi/lsmNu10/j2hk1KEP0IvjubqPE3cu1Xz7xfXXt5oCq3SNUz4fMIP4XGF9Ky+Ue2tBA3hcS7LSBlA== + +"@types/prop-types@*": + version "15.7.12" + resolved "https://registry.yarnpkg.com/@types/prop-types/-/prop-types-15.7.12.tgz#12bb1e2be27293c1406acb6af1c3f3a1481d98c6" + integrity sha512-5zvhXYtRNRluoE/jAp4GVsSduVUzNWKkOZrCDBWYtE7biZywwdC2AcEzg+cSMLFRfVgeAFqpfNabiPjxFddV1Q== + +"@types/react@*": + version "18.3.5" + resolved "https://registry.yarnpkg.com/@types/react/-/react-18.3.5.tgz#5f524c2ad2089c0ff372bbdabc77ca2c4dbadf8f" + integrity sha512-WeqMfGJLGuLCqHGYRGHxnKrXcTitc6L/nBUWfWPcTarG3t9PsquqUMuVeXZeca+mglY4Vo5GZjCi0A3Or2lnxA== + dependencies: + "@types/prop-types" "*" + csstype "^3.0.2" + +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" + +big.js@^6.2.1: + version "6.2.2" + resolved "https://registry.yarnpkg.com/big.js/-/big.js-6.2.2.tgz#be3bb9ac834558b53b099deef2a1d06ac6368e1a" + integrity sha512-y/ie+Faknx7sZA5MfGA2xKlu0GDv8RWrXGsmlteyJQ2lvoKv9GBK/fpRMc2qlSoBAgNxrixICFCBefIq8WCQpQ== + +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" + +client-only@^0.0.1: + version "0.0.1" + resolved "https://registry.yarnpkg.com/client-only/-/client-only-0.0.1.tgz#38bba5d403c41ab150bff64a95c85013cf73bca1" + integrity sha512-IV3Ou0jSMzZrd3pZ48nLkT9DA7Ag1pnPzaiQhpW7c3RbcqqzvzzVu+L8gfqMp/8IM2MQtSiqaCxrrcfu8I8rMA== + +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== + +cross-fetch@4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/cross-fetch/-/cross-fetch-4.0.0.tgz#f037aef1580bb3a1a35164ea2a848ba81b445983" + integrity sha512-e4a5N8lVvuLgAWgnCrLr2PP0YyDOTHa9H/Rj54dirp61qXnNq46m82bRhNqIA5VccJtWBvPTFRV3TtvHUKPB1g== + dependencies: + node-fetch "^2.6.12" + +csstype@^3.0.2: + version "3.1.3" + resolved "https://registry.yarnpkg.com/csstype/-/csstype-3.1.3.tgz#d80ff294d114fb0e6ac500fbf85b60137d7eff81" + integrity sha512-M1uQkMl8rQK/szD0LNhtqxIPLpimGm8sOBwU7lLnCpSbTyY3yeU1Vc7l4KT5zT4s/yOxHH5O7tIuuLOCnLADRw== + +deepmerge@^2.1.1: + version "2.2.1" + resolved "https://registry.yarnpkg.com/deepmerge/-/deepmerge-2.2.1.tgz#5d3ff22a01c00f645405a2fbc17d0778a1801170" + integrity sha512-R9hc1Xa/NOBi9WRVUWg19rl1UB7Tt4kuPd+thNJgFZoxXsTz7ncaPaeIm+40oSGuP33DfMb4sZt1QIGiJzC4EA== + +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== + +formik@^2.2.9: + version "2.4.6" + resolved "https://registry.yarnpkg.com/formik/-/formik-2.4.6.tgz#4da75ca80f1a827ab35b08fd98d5a76e928c9686" + integrity sha512-A+2EI7U7aG296q2TLGvNapDNTZp1khVt5Vk0Q/fyfSROss0V/V6+txt2aJnwEos44IxTCW/LYAi/zgWzlevj+g== + dependencies: + "@types/hoist-non-react-statics" "^3.3.1" + deepmerge "^2.1.1" + hoist-non-react-statics "^3.3.0" + lodash "^4.17.21" + lodash-es "^4.17.21" + react-fast-compare "^2.0.1" + tiny-warning "^1.0.2" + tslib "^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== + +hoist-non-react-statics@^3.3.0: + 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== + dependencies: + react-is "^16.7.0" + +html-parse-stringify@^3.0.1: + version "3.0.1" + resolved "https://registry.yarnpkg.com/html-parse-stringify/-/html-parse-stringify-3.0.1.tgz#dfc1017347ce9f77c8141a507f233040c59c55d2" + integrity sha512-KknJ50kTInJ7qIScF3jeaFRpMpE8/lfiTdzf/twXyPBLAGrLRTmkz3AdTnKeh40X8k9L2fdYwEp/42WGXIRGcg== + dependencies: + void-elements "3.1.0" + +i18next-browser-languagedetector@^7.1.0: + version "7.2.1" + resolved "https://registry.yarnpkg.com/i18next-browser-languagedetector/-/i18next-browser-languagedetector-7.2.1.tgz#1968196d437b4c8db847410c7c33554f6c448f6f" + integrity sha512-h/pM34bcH6tbz8WgGXcmWauNpQupCGr25XPp9cZwZInR9XHSjIFDYp1SIok7zSPsTOMxdvuLyu86V+g2Kycnfw== + dependencies: + "@babel/runtime" "^7.23.2" + +i18next-http-backend@^2.2.2: + version "2.6.1" + resolved "https://registry.yarnpkg.com/i18next-http-backend/-/i18next-http-backend-2.6.1.tgz#186c3a1359e10245c9119a13129f9b5bf328c9a7" + integrity sha512-rCilMAnlEQNeKOZY1+x8wLM5IpYOj10guGvEpeC59tNjj6MMreLIjIW8D1RclhD3ifLwn6d/Y9HEM1RUE6DSog== + dependencies: + cross-fetch "4.0.0" + +i18next@^23.6.0: + version "23.15.1" + resolved "https://registry.yarnpkg.com/i18next/-/i18next-23.15.1.tgz#c50de337bf12ca5195e697cc0fbe5f32304871d9" + integrity sha512-wB4abZ3uK7EWodYisHl/asf8UYEhrI/vj/8aoSsrj/ZDxj4/UXPOa1KvFt1Fq5hkUHquNqwFlDprmjZ8iySgYA== + dependencies: + "@babel/runtime" "^7.23.2" + +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" + +"js-tokens@^3.0.0 || ^4.0.0": + version "4.0.0" + resolved "https://registry.yarnpkg.com/js-tokens/-/js-tokens-4.0.0.tgz#19203fb59991df98e3a287050d4647cdeaf32499" + integrity sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ== + +lodash-es@^4.17.21: + version "4.17.21" + resolved "https://registry.yarnpkg.com/lodash-es/-/lodash-es-4.17.21.tgz#43e626c46e6591b7750beb2b50117390c609e3ee" + integrity sha512-mKnC+QJ9pWVzv+C4/U3rRsHapFfHvQFoFB92e52xeyGMcX6/OlIl78je1u8vePzYZSkkogMPJ2yjxxsb89cxyw== + +lodash@^4.17.21: + version "4.17.21" + resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.21.tgz#679591c564c3bffaae8454cf0b3df370c3d6911c" + integrity sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg== + +loose-envify@^1.0.0, loose-envify@^1.1.0: + version "1.4.0" + resolved "https://registry.yarnpkg.com/loose-envify/-/loose-envify-1.4.0.tgz#71ee51fa7be4caec1a63839f7e682d8132d30caf" + integrity sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q== + dependencies: + js-tokens "^3.0.0 || ^4.0.0" + +nanoclone@^0.2.1: + version "0.2.1" + resolved "https://registry.yarnpkg.com/nanoclone/-/nanoclone-0.2.1.tgz#dd4090f8f1a110d26bb32c49ed2f5b9235209ed4" + integrity sha512-wynEP02LmIbLpcYw8uBKpcfF6dmg2vcpKqxeH5UcoKEYdExslsdUA4ugFauuaeYdTB76ez6gJW8XAZ6CgkXYxA== + +node-fetch@^2.6.12: + version "2.7.0" + resolved "https://registry.yarnpkg.com/node-fetch/-/node-fetch-2.7.0.tgz#d0f0fa6e3e2dc1d27efcd8ad99d550bda94d187d" + integrity sha512-c4FRfUm/dbcWZ7U+1Wq0AwCyFL+3nt2bEw05wfxSz+DWpWsitgmSgYmy2dQdWyKC1694ELPqMs/YzUSNozLt8A== + dependencies: + whatwg-url "^5.0.0" + +property-expr@^2.0.4: + version "2.0.6" + resolved "https://registry.yarnpkg.com/property-expr/-/property-expr-2.0.6.tgz#f77bc00d5928a6c748414ad12882e83f24aec1e8" + integrity sha512-SVtmxhRE/CGkn3eZY1T6pC8Nln6Fr/lu1mKSgRud0eC73whjGfoAogbn78LkD8aFL0zz3bAFerKSnOl7NlErBA== + +react-dom@^18.2.0: + 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.2" + +react-fast-compare@^2.0.1: + version "2.0.4" + resolved "https://registry.yarnpkg.com/react-fast-compare/-/react-fast-compare-2.0.4.tgz#e84b4d455b0fec113e0402c329352715196f81f9" + integrity sha512-suNP+J1VU1MWFKcyt7RtjiSWUjvidmQSlqu+eHslq+342xCbGTYmC0mEhPCOHxlW0CywylOC1u2DFAT+bv4dBw== + +react-i18next@^13.3.1: + version "13.5.0" + resolved "https://registry.yarnpkg.com/react-i18next/-/react-i18next-13.5.0.tgz#44198f747628267a115c565f0c736a50a76b1ab0" + integrity sha512-CFJ5NDGJ2MUyBohEHxljOq/39NQ972rh1ajnadG9BjTk+UXbHLq4z5DKEbEQBDoIhUmmbuS/fIMJKo6VOax1HA== + dependencies: + "@babel/runtime" "^7.22.5" + html-parse-stringify "^3.0.1" + +react-is@^16.7.0: + version "16.13.1" + resolved "https://registry.yarnpkg.com/react-is/-/react-is-16.13.1.tgz#789729a4dc36de2999dc156dd6c1d9c18cea56a4" + integrity sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ== + +react-loading-skeleton@^3.3.1: + version "3.4.0" + resolved "https://registry.yarnpkg.com/react-loading-skeleton/-/react-loading-skeleton-3.4.0.tgz#c71a3a17259d08e4064974aa0b07f150a09dfd57" + integrity sha512-1oJEBc9+wn7BbkQQk7YodlYEIjgeR+GrRjD+QXkVjwZN7LGIcAFHrx4NhT7UHGBxNY1+zax3c+Fo6XQM4R7CgA== + +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-router-dom@^6.8.2: + version "6.26.2" + resolved "https://registry.yarnpkg.com/react-router-dom/-/react-router-dom-6.26.2.tgz#a6e3b0cbd6bfd508e42b9342099d015a0ac59680" + integrity sha512-z7YkaEW0Dy35T3/QKPYB1LjMK2R1fxnHO8kWpUMTBdfVzZrWOiY9a7CtN8HqdWtDUWd5FY6Dl8HFsqVwH4uOtQ== + dependencies: + "@remix-run/router" "1.19.2" + react-router "6.26.2" + +react-router@6.26.2: + version "6.26.2" + resolved "https://registry.yarnpkg.com/react-router/-/react-router-6.26.2.tgz#2f0a68999168954431cdc29dd36cec3b6fa44a7e" + integrity sha512-tvN1iuT03kHgOFnLPfLJ8V95eijteveqdOSk+srqfePtQvqCExB8eHOYnlilbOcyJyKnYkr1vJvf7YqotAJu1A== + dependencies: + "@remix-run/router" "1.19.2" + +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@^18.2.0: + 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" + +regenerator-runtime@^0.14.0: + version "0.14.1" + resolved "https://registry.yarnpkg.com/regenerator-runtime/-/regenerator-runtime-0.14.1.tgz#356ade10263f685dda125100cd862c1db895327f" + integrity sha512-dYnhHh0nJoMfnkZs6GmmhFknAGRrLznOu5nc9ML+EJxGvrx6H7teuevqVqCuPcPK//3eDrrjQhehXVx9cnkGdw== + +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" + +tailwind-merge@^1.11.0: + version "1.14.0" + resolved "https://registry.yarnpkg.com/tailwind-merge/-/tailwind-merge-1.14.0.tgz#e677f55d864edc6794562c63f5001f45093cdb8b" + integrity sha512-3mFKyCo/MBcgyOTlrY8T7odzZFx+w+qKSMAmdFzRvqBfLlSigU6TZnlFHK0lkMwj9Bj8OYU+9yW9lmGuS0QEnQ== + +tailwindcss-aria-attributes@^1.3.0: + version "1.3.0" + resolved "https://registry.yarnpkg.com/tailwindcss-aria-attributes/-/tailwindcss-aria-attributes-1.3.0.tgz#35ed5f0668f0a1a2d19a174540cc48ce6e6b5f32" + integrity sha512-daIxRKGTUH3a3SkqS4pJfzoj1d8osvZ9mUKIw8qz7Peop94o73XCiZXOWm8X+0bdUMunn8w6+/tRm6o/TbTvmQ== + +tiny-warning@^1.0.2: + version "1.0.3" + resolved "https://registry.yarnpkg.com/tiny-warning/-/tiny-warning-1.0.3.tgz#94a30db453df4c643d0fd566060d60a875d84754" + integrity sha512-lBN9zLN/oAf68o3zNXYrdCt1kP8WsiGW8Oo2ka41b2IM5JL/S1CTyX1rW0mb/zSuJun0ZUrDxx4sqvYS2FWzPA== + +toposort@^2.0.2: + version "2.0.2" + resolved "https://registry.yarnpkg.com/toposort/-/toposort-2.0.2.tgz#ae21768175d1559d48bef35420b2f4962f09c330" + integrity sha512-0a5EOkAUp8D4moMi2W8ZF8jcga7BgZd91O/yabJCFY8az+XSzeGyTKs0Aoo897iV1Nj6guFq8orWDS96z91oGg== + +tr46@~0.0.3: + version "0.0.3" + resolved "https://registry.yarnpkg.com/tr46/-/tr46-0.0.3.tgz#8184fd347dac9cdc185992f3a6622e14b9d9ab6a" + integrity sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw== + +tslib@^2.0.0, tslib@^2.1.0: + version "2.7.0" + resolved "https://registry.yarnpkg.com/tslib/-/tslib-2.7.0.tgz#d9b40c5c40ab59e8738f297df3087bf1a2690c01" + integrity sha512-gLXCKdN1/j47AiHiOkJN69hJmcbGTHI0ImLmbYLHykhgeN0jVGola9yVjFgzCUklsZQMW55o+dW7IXv3RCXDzA== + +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-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" + +uuid@^9.0.1: + version "9.0.1" + resolved "https://registry.yarnpkg.com/uuid/-/uuid-9.0.1.tgz#e188d4c8853cc722220392c424cd637f32293f30" + integrity sha512-b+1eJOlsR9K8HJpow9Ok3fiWOWSIcIzXodvv0rQjVoOVNpWMpxf1wZNpt4y9h10odCNrqnYp1OBzRktckBe3sA== + +void-elements@3.1.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/void-elements/-/void-elements-3.1.0.tgz#614f7fbf8d801f0bb5f0661f5b2f5785750e4f09" + integrity sha512-Dhxzh5HZuiHQhbvTW9AMetFfBHDMYpo23Uo9btPXgdYP+3T5S+p+jgNy7spra+veYhBP2dCSgxR/i2Y02h5/6w== + +webidl-conversions@^3.0.0: + version "3.0.1" + resolved "https://registry.yarnpkg.com/webidl-conversions/-/webidl-conversions-3.0.1.tgz#24534275e2a7bc6be7bc86611cc16ae0a5654871" + integrity sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ== + +whatwg-url@^5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/whatwg-url/-/whatwg-url-5.0.0.tgz#966454e8765462e37644d3626f6742ce8b70965d" + integrity sha512-saE57nupxk6v3HY35+jzBwYa0rKSy0XR8JSxZPwgLr7ys0IBzhGviA1/TUGJLmSVqs8pb9AnvICXEuOHLprYTw== + dependencies: + tr46 "~0.0.3" + webidl-conversions "^3.0.0" + +yup@^0.32.11: + version "0.32.11" + resolved "https://registry.yarnpkg.com/yup/-/yup-0.32.11.tgz#d67fb83eefa4698607982e63f7ca4c5ed3cf18c5" + integrity sha512-Z2Fe1bn+eLstG8DRR6FTavGD+MeAwyfmouhHsIUgaADz8jvFKbO/fXc2trJKZg+5EBjh4gGm3iU/t3onKlXHIg== + dependencies: + "@babel/runtime" "^7.15.4" + "@types/lodash" "^4.14.175" + lodash "^4.17.21" + lodash-es "^4.17.21" + nanoclone "^0.2.1" + property-expr "^2.0.4" + toposort "^2.0.2"