diff --git a/.github/workflows/ci.yaml b/.github/workflows/ci.yaml index 5c60d73c..e9475607 100644 --- a/.github/workflows/ci.yaml +++ b/.github/workflows/ci.yaml @@ -85,12 +85,6 @@ jobs: - run: cd web - name: Build run: yarn build - - name: Keycloakify - run: cd web && npx keycloakify && cd .. - env: - XDG_CACHE_HOME: "/home/runner/.cache/yarn" - - run: mv web/build_keycloak/target/retrocompat-*.jar retrocompat-keycloak-theme.jar - - run: mv web/build_keycloak/target/*.jar keycloak-theme.jar - name: "Generate release candidate on github" uses: softprops/action-gh-release@v2 with: @@ -99,9 +93,6 @@ jobs: tag_name: ${{ env.PRE_RELEASE_TAG }} generate_release_notes: true token: ${{ secrets.GITHUB_TOKEN }} - files: | - retrocompat-keycloak-theme.jar - keycloak-theme.jar - name: Delete old prereleases uses: actions/github-script@v7 with: diff --git a/api/renovate.json b/api/renovate.json index 4b087849..0955a918 100644 --- a/api/renovate.json +++ b/api/renovate.json @@ -13,11 +13,11 @@ "packageRules": [ { "packagePatterns": ["*"], - "excludePackagePatterns": ["keycloakify", "run-exclusive", "i18nifty", "tsafe", "evt"], + "excludePackagePatterns": ["run-exclusive", "i18nifty", "tsafe", "evt"], "enabled": false }, { - "packagePatterns": ["keycloakify", "run-exclusive", "i18nifty", "tsafe", "evt"], + "packagePatterns": ["run-exclusive", "i18nifty", "tsafe", "evt"], "matchUpdateTypes": ["minor", "patch"], "automerge": false, "automergeType": "pr", diff --git a/web/package.json b/web/package.json index 95542545..77e8819c 100644 --- a/web/package.json +++ b/web/package.json @@ -4,15 +4,14 @@ "license": "MIT", "scripts": { "dev": "react-app-rewired start", - "build": "react-app-rewired build && rimraf build/keycloak-resources", - "build-keycloak-theme": "yarn build && keycloakify", + "build": "react-app-rewired build", "storybook": "start-storybook -p 6006", "lint": "eslint --max-warnings=0 --ext .ts,.tsx,.js,.jsx src", "_format": "prettier '**/*.{ts,tsx,json,md}'", "format": "yarn _format --write", "format:check": "yarn _format --list-different", "analyze": "source-map-explorer 'build/static/js/*.js'", - "postinstall": "react-dsfr copy-static-assets && copy-keycloak-resources-to-public", + "postinstall": "react-dsfr copy-static-assets", "prestorybook": "react-dsfr update-icons", "prestart": "react-dsfr update-icons", "prebuild": "react-dsfr update-icons", @@ -33,7 +32,6 @@ "evt": "^2.5.7", "flexsearch": "0.7.43", "i18nifty": "^3.2.2", - "keycloakify": "^9.6.7", "memoizee": "^0.4.14", "moment": "^2.29.1", "oidc-spa": "^5.1.2", @@ -42,7 +40,7 @@ "react": "^18.2.0", "react-dom": "^18.2.0", "react-hook-form": "^7.43.0", - "react-markdown": "^5.0.3", + "react-markdown": "^9.0.1", "react-scripts": "5.0.1", "react-waypoint": "^10.3.0", "redux-clean-architecture": "^4.1.1", @@ -82,14 +80,6 @@ "ts-node": "^10.2.1", "typescript": "^4.1.6" }, - "keycloakify": { - "themeName": "dsfr", - "extraThemeProperties": [ - "homeUrl=${env.DSFR_THEME_HOME_URL:}", - "serviceTitle=${env.DSFR_THEME_SERVICE_TITLE:}", - "brandTop=${env.DSFR_THEME_BRAND_TOP:}" - ] - }, "eslintConfig": { "plugins": [ "tss-unused-classes" diff --git a/web/src/index.tsx b/web/src/index.tsx index 07a3a10a..9cdc9f42 100644 --- a/web/src/index.tsx +++ b/web/src/index.tsx @@ -1,15 +1,11 @@ import { lazy, Suspense } from "react"; import { createRoot } from "react-dom/client"; -import { kcContext as kcLoginThemeContext } from "keycloak-theme/login/kcContext"; -import { kcContext as kcAccountThemeContext } from "keycloak-theme/account/kcContext"; import { MuiDsfrThemeProvider } from "@codegouvfr/react-dsfr/mui"; import { startReactDsfr } from "@codegouvfr/react-dsfr/spa"; import { assert } from "tsafe/assert"; startReactDsfr({ "defaultColorScheme": "system" }); const App = lazy(() => import("ui/App")); -const KcLoginThemeApp = lazy(() => import("keycloak-theme/login/KcApp")); -const KcAccountThemeApp = lazy(() => import("keycloak-theme/account/KcApp")); createRoot( (() => { @@ -22,17 +18,7 @@ createRoot( ).render( - {(() => { - if (kcLoginThemeContext !== undefined) { - return ; - } - - if (kcAccountThemeContext !== undefined) { - return ; - } - - return ; - })()} + ); diff --git a/web/src/keycloak-theme/account/KcApp.tsx b/web/src/keycloak-theme/account/KcApp.tsx deleted file mode 100644 index 227467a4..00000000 --- a/web/src/keycloak-theme/account/KcApp.tsx +++ /dev/null @@ -1,46 +0,0 @@ -import { lazy, Suspense } from "react"; -import type { PageProps } from "keycloakify/account"; -import type { KcContext } from "./kcContext"; -import { useI18n } from "./i18n"; - -const Template = lazy(() => import("./Template")); -const DefaultTemplate = lazy(() => import("keycloakify/account/Template")); - -const Password = lazy(() => import("./pages/Password")); -const Fallback = lazy(() => import("keycloakify/account")); - -const classes: PageProps["classes"] = {}; - -export default function KcApp(props: { kcContext: KcContext }) { - const { kcContext } = props; - - const i18n = useI18n({ kcContext }); - - if (i18n === null) { - return null; - } - - return ( - - {(() => { - switch (kcContext.pageId) { - case "password.ftl": - return ( - - ); - default: - return ( - - ); - } - })()} - - ); -} diff --git a/web/src/keycloak-theme/account/Template.tsx b/web/src/keycloak-theme/account/Template.tsx deleted file mode 100644 index 326a1e8d..00000000 --- a/web/src/keycloak-theme/account/Template.tsx +++ /dev/null @@ -1,103 +0,0 @@ -// Copy pasted from: https://github.com/InseeFrLab/keycloakify/blob/main/src/login/Template.tsx - -import { clsx } from "keycloakify/tools/clsx"; -import { usePrepareTemplate } from "keycloakify/lib/usePrepareTemplate"; -import { type TemplateProps } from "keycloakify/account/TemplateProps"; -import { useGetClassName } from "keycloakify/account/lib/useGetClassName"; -import type { KcContext } from "./kcContext"; -import type { I18n } from "./i18n"; -import { Alert } from "@codegouvfr/react-dsfr/Alert"; -import { Header } from "@codegouvfr/react-dsfr/Header"; -import { Footer } from "@codegouvfr/react-dsfr/Footer"; -import { headerFooterDisplayItem } from "@codegouvfr/react-dsfr/Display"; -import { fr } from "@codegouvfr/react-dsfr"; -import { MuiDsfrThemeProvider } from "@codegouvfr/react-dsfr/mui"; - -export default function Template(props: TemplateProps) { - const { kcContext, i18n, doUseDefaultCss, classes, children } = props; - - const { getClassName } = useGetClassName({ doUseDefaultCss, classes }); - - const { msg } = i18n; - - const { url, message, referrer } = kcContext; - - const { isReady } = usePrepareTemplate({ - "doFetchDefaultThemeResources": doUseDefaultCss, - "styles": [ - `${url.resourcesCommonPath}/node_modules/patternfly/dist/css/patternfly.min.css`, - `${url.resourcesCommonPath}/node_modules/patternfly/dist/css/patternfly-additions.min.css`, - `${url.resourcesPath}/css/account.css` - ], - "htmlClassName": undefined, - "bodyClassName": clsx("admin-console", "user", getClassName("kcBodyClass")) - }); - - if (!isReady) { - return null; - } - - return ( -
-
- {" "} - République
Française{" "} - - } - homeLinkProps={{ - "href": referrer?.url, - "title": "Go back to the website" - }} - quickAccessItems={[ - { - "iconId": "fr-icon-lock-line", - "linkProps": { - "href": url.getLogoutUrl() - }, - "text": msg("doSignOut") - } - ]} - serviceTitle={serviceTitle} - /> -
- - {message !== undefined && ( - - )} - {children} - -
-
-
- ); -} - -const serviceTitle = "Socle interministériel de logiciels libres"; diff --git a/web/src/keycloak-theme/account/i18n.ts b/web/src/keycloak-theme/account/i18n.ts deleted file mode 100644 index 45f75c4f..00000000 --- a/web/src/keycloak-theme/account/i18n.ts +++ /dev/null @@ -1,6 +0,0 @@ -import { createUseI18n } from "keycloakify/account"; - -//NOTE: See src/login/i18n.ts for instructions on customization of i18n messages. -export const { useI18n } = createUseI18n({}); - -export type I18n = NonNullable>; diff --git a/web/src/keycloak-theme/account/kcContext.ts b/web/src/keycloak-theme/account/kcContext.ts deleted file mode 100644 index 91d9430f..00000000 --- a/web/src/keycloak-theme/account/kcContext.ts +++ /dev/null @@ -1,9 +0,0 @@ -import { createGetKcContext } from "keycloakify/account"; - -export const { getKcContext } = createGetKcContext(); - -export const { kcContext } = getKcContext({ - //"mockPageId": "password.ftl" -}); - -export type KcContext = NonNullable["kcContext"]>; diff --git a/web/src/keycloak-theme/account/pages/Password.tsx b/web/src/keycloak-theme/account/pages/Password.tsx deleted file mode 100644 index 34f5374d..00000000 --- a/web/src/keycloak-theme/account/pages/Password.tsx +++ /dev/null @@ -1,209 +0,0 @@ -import { useState, useEffect } from "react"; -import type { PageProps } from "keycloakify/account/pages/PageProps"; -import type { KcContext } from "../kcContext"; -import type { I18n } from "../i18n"; -import { fr } from "@codegouvfr/react-dsfr"; -import { PasswordInput } from "@codegouvfr/react-dsfr/blocks/PasswordInput"; -import { Button } from "@codegouvfr/react-dsfr/Button"; -import { useStyles } from "tss-react"; - -export default function Password( - props: PageProps, I18n> -) { - const { kcContext, i18n, doUseDefaultCss, Template, classes } = props; - - const { css } = useStyles(); - - const { url, password, account, stateChecker, message, referrer } = kcContext; - - const { msgStr, msg } = i18n; - - const [currentPassword, setCurrentPassword] = useState(""); - const [newPassword, setNewPassword] = useState(""); - const [newPasswordConfirm, setNewPasswordConfirm] = useState(""); - const [newPasswordError, setNewPasswordError] = useState(""); - const [newPasswordConfirmError, setNewPasswordConfirmError] = useState(""); - const [hasNewPasswordBlurred, setHasNewPasswordBlurred] = useState(false); - // prettier-ignore - const [hasNewPasswordConfirmBlurred, setHasNewPasswordConfirmBlurred] = useState(false); - - useEffect(() => { - const appUrl = referrer?.url; - - if (appUrl === undefined) { - return; - } - - if (message?.type !== "success") { - return; - } - - setTimeout(() => { - window.location.href = appUrl; - }, 1000); - }, []); - - const checkNewPassword = (newPassword: string) => { - if (!password.passwordSet) { - return; - } - - if (newPassword === currentPassword) { - setNewPasswordError(msgStr("newPasswordSameAsOld")); - } else { - setNewPasswordError(""); - } - }; - - const checkNewPasswordConfirm = (newPasswordConfirm: string) => { - if (newPasswordConfirm === "") { - return; - } - - if (newPassword !== newPasswordConfirm) { - setNewPasswordConfirmError(msgStr("passwordConfirmNotMatch")); - } else { - setNewPasswordConfirmError(""); - } - }; - - return ( - - ); -} diff --git a/web/src/keycloak-theme/login/KcApp.tsx b/web/src/keycloak-theme/login/KcApp.tsx deleted file mode 100644 index 033b65ea..00000000 --- a/web/src/keycloak-theme/login/KcApp.tsx +++ /dev/null @@ -1,101 +0,0 @@ -import { lazy, Suspense, useEffect } from "react"; -import { tss } from "tss-react"; -import { fr } from "@codegouvfr/react-dsfr"; -import Fallback, { type PageProps } from "keycloakify/login"; -import type { KcContext } from "./kcContext"; -import { useI18n } from "./i18n"; -// Leave it this way, it must always be evaluated. -import { isDark as isAppDark } from "./valuesTransferredOverUrl"; -import { useIsDark } from "@codegouvfr/react-dsfr/useIsDark"; - -const Template = lazy(() => import("./Template")); -const Login = lazy(() => import("./pages/Login")); -const RegisterUserProfile = lazy(() => import("./pages/RegisterUserProfile")); -const Terms = lazy(() => import("./pages/Terms")); - -export default function KcApp(props: { kcContext: KcContext }) { - const { kcContext } = props; - - const i18n = useI18n({ kcContext }); - - const { classes, cx, css } = useStyles(); - - { - const { setIsDark } = useIsDark(); - - useEffect(() => { - if (isAppDark === undefined) { - return; - } - - setIsDark(isAppDark); - }, [isAppDark]); - } - - //NOTE: Locales not yet downloaded - if (i18n === null) { - return null; - } - - const pageProps: Omit, "kcContext"> = { - i18n, - Template, - "doUseDefaultCss": false, - "classes": { - "kcHtmlClass": classes.kcHtmlClass, - "kcButtonPrimaryClass": cx(classes.kcButtonPrimaryClass, fr.cx("fr-btn")), - "kcInputClass": fr.cx("fr-input"), - "kcLabelWrapperClass": cx( - fr.cx("fr-label"), - css({ - "marginBottom": fr.spacing("2v") - }) - ), - "kcFormOptionsWrapperClass": css({ - "marginTop": fr.spacing("5v") - }) - } - }; - - return ( - - {(() => { - switch (kcContext.pageId) { - case "login.ftl": - return ; - case "register-user-profile.ftl": - return ; - case "terms.ftl": - return ; - default: - return ; - } - })()} - - ); -} - -const useStyles = tss.withName({ KcApp }).create({ - "kcHtmlClass": { - "fontSize": "unset", - "& label": { - "fontWeight": "unset" - }, - "& #kc-header-wrapper": { - "visibility": "hidden" - }, - "& a": { - "&:hover, &:focus": { - "textDecoration": "unset" - } - }, - "& #kc-form-buttons": { - "float": "right" - } - }, - "kcButtonPrimaryClass": { - "&:hover": { - "color": fr.colors.decisions.text.inverted.blueFrance.default - } - } -}); diff --git a/web/src/keycloak-theme/login/Template.tsx b/web/src/keycloak-theme/login/Template.tsx deleted file mode 100644 index 13b9c3a4..00000000 --- a/web/src/keycloak-theme/login/Template.tsx +++ /dev/null @@ -1,317 +0,0 @@ -// Copy pasted from: https://github.com/InseeFrLab/keycloakify/blob/main/src/lib/components/shared/Template.tsx - -// You can replace all relative imports by cherry picking files from the keycloakify module. -// For example, the following import: -// import { assert } from "./tools/assert"; -// becomes: -import { clsx } from "keycloakify/tools/clsx"; -import type { TemplateProps } from "keycloakify/login/TemplateProps"; -import { usePrepareTemplate } from "keycloakify/lib/usePrepareTemplate"; -import type { KcContext } from "./kcContext"; -import type { I18n } from "./i18n"; -import { tss } from "tss-react"; -import { useGetClassName } from "keycloakify/login/lib/useGetClassName"; -import Header from "@codegouvfr/react-dsfr/Header"; -import { Alert } from "@codegouvfr/react-dsfr/Alert"; -import { fr } from "@codegouvfr/react-dsfr"; -import { appLocationOrigin } from "keycloak-theme/login/valuesTransferredOverUrl"; -import { useBreakpointsValues } from "@codegouvfr/react-dsfr/useBreakpointsValues"; -import { keyframes } from "tss-react"; -import { LoadingFallback } from "ui/shared/LoadingFallback"; -import { headerFooterDisplayItem } from "@codegouvfr/react-dsfr/Display"; - -export default function Template(props: TemplateProps) { - const { - displayInfo = false, - displayMessage = true, - displayRequiredFields = false, - displayWide = false, - showAnotherWayIfPresent = true, - headerNode, - showUsernameNode = null, - children, - infoNode = null, - kcContext, - i18n, - doUseDefaultCss, - classes: classes_props - } = props; - - const { msg, msgStr } = i18n; - - const { getClassName } = useGetClassName({ - doUseDefaultCss, - "classes": classes_props - }); - - const { auth, url, message, isAppInitiatedAction } = kcContext; - - const { breakpointsValues } = useBreakpointsValues(); - - const { isReady } = usePrepareTemplate({ - "doFetchDefaultThemeResources": doUseDefaultCss, - "styles": [ - `${url.resourcesCommonPath}/lib/zocial/zocial.css`, - `${url.resourcesPath}/css/login.css` - ], - "htmlClassName": getClassName("kcHtmlClass"), - "bodyClassName": getClassName("kcBodyClass") - }); - - const { classes, cx, css } = useStyles({ "contentWidth": breakpointsValues.sm }); - - if (!isReady) { - return ; - } - - return ( - <> -
Française" - }} - /> - } - serviceTitle={ - - } - quickAccessItems={[headerFooterDisplayItem]} - homeLinkProps={{ - "href": - appLocationOrigin || - kcContext.properties.homeUrl || - window.location.origin, - "title": `${msgStr("home")} - ${kcContext.realm.displayName ?? ""}` - }} - /> -
-
-
- {!( - auth !== undefined && - auth.showUsername && - !auth.showResetCredentials - ) ? ( - displayRequiredFields ? ( -
-
- - * - {msg("requiredFields")} - -
-
-

{headerNode}

-
-
- ) : ( -

{headerNode}

- ) - ) : displayRequiredFields ? ( -
-
- - *{" "} - {msg("requiredFields")} - -
-
- {showUsernameNode} -
-
- - -
- - - {msg("restartLoginTooltip")} - -
-
-
-
-
-
- ) : ( - <> - {showUsernameNode} -
-
- - -
- - - {msg("restartLoginTooltip")} - -
-
-
-
- - )} -
-
-
- {/* App-initiated actions should not see warning messages about the need to complete the action during login. */} - {displayMessage && - message !== undefined && - (message.type !== "warning" || !isAppInitiatedAction) && ( - - )} -
{children}
- {auth !== undefined && - auth.showTryAnotherWayLink && - showAnotherWayIfPresent && ( -
- -
- )} - {displayInfo && ( -
-
- {infoNode} -
-
- )} -
-
-
-
- - ); -} - -const useStyles = tss - .withName({ Template }) - .withParams<{ contentWidth: number }>() - .create(({ contentWidth }) => ({ - "container": { - "marginTop": fr.spacing("10v"), - "animation": `${keyframes` - 0% { - opacity: 0; - } - 100% { - opacity: 1; - } - `} 400ms` - }, - "centerCol": { - "display": "flex", - "flexDirection": "column", - "alignItems": "center" - }, - "feedback": { - "marginBottom": fr.spacing("6v") - }, - "kcContent": { - "width": "100%" - }, - "contentWrapper": { - "maxWidth": `${contentWidth}px`, - "width": "100%", - "margin": "0 auto" - } - })); diff --git a/web/src/keycloak-theme/login/assets/tos_en.md b/web/src/keycloak-theme/login/assets/tos_en.md deleted file mode 100644 index 6a77158e..00000000 --- a/web/src/keycloak-theme/login/assets/tos_en.md +++ /dev/null @@ -1,17 +0,0 @@ -# Terms of Service - -## Legal Notice - -code.gouv.fr/sill is published by the Free Software unit at DINUM. - -Hosting is provided by INSEE. - -Address : DINUM, 20 avenue de Ségur, 75007 Paris -SIRET : 12000101100010 (secrétariat général du gouvernement) -SIREN : 120 001 011 - -Head of publication : Directeur interministériel du numérique. - -## Contact - -You can reach us at . diff --git a/web/src/keycloak-theme/login/assets/tos_fr.md b/web/src/keycloak-theme/login/assets/tos_fr.md deleted file mode 100644 index 1b53ec93..00000000 --- a/web/src/keycloak-theme/login/assets/tos_fr.md +++ /dev/null @@ -1,18 +0,0 @@ -# Conditions générales d'utilisation - -## Mentions légales - -Le site code.gouv.fr/sill est édité par la mission logiciels libres de la direction interministérielle du numérique (DINUM). - -L’hébergement du SILL est assuré par l'Insee. - -Coordonnées : -Adresse : DINUM, 20 avenue de Ségur, 75007 Paris -SIRET : 12000101100010 (secrétariat général du gouvernement) -SIREN : 120 001 011 - -Directeur de la publication : Directeur interministériel du numérique. - -## Contact - -Vous pouvez nous joindre à l'adresse . diff --git a/web/src/keycloak-theme/login/i18n.tsx b/web/src/keycloak-theme/login/i18n.tsx deleted file mode 100644 index b7dc0a36..00000000 --- a/web/src/keycloak-theme/login/i18n.tsx +++ /dev/null @@ -1,62 +0,0 @@ -import { createUseI18n } from "keycloakify/login"; - -export const { useI18n } = createUseI18n({ - "en": { - "home": "Home", - "back": "Back", - "alphanumericalCharsOnly": "Only alphanumerical characters", - "administrativeEmail": "Administrative Email", - "agencyName": "Agency Name", - "connect": "Connect", - "selfCredentials": "Or use your credentials", - "email": "Your professional email", - "email hint": "For example : name@agency.gouv.fr", - "password": "Your password", - "noAccount": "No account yet", - "backToLogin": "Back to login", - "you domain isn't allowed yet": - "Your email domain isn't allowed yet. Contact us at ", - "mail body": [ - "Hello, ", - "Would you, assuming it's granted, add my domain to the accept list. ", - "", - "Best regards," - ].join("\n"), - "mail subject": "[SILL] Adding new mail domain to the accept list", - "login using": "Login using", - "what is franceConnect": "What is FranceConnect ?", - "what is franceConnect title": "What is FranceConnect - new window", - "organization": "Organization of attachment" - }, - "fr": { - /* spell-checker: disable */ - "home": "Accueil", - "back": "Retour", - "alphanumericalCharsOnly": "Caractères alphanumériques uniquement", - "administrativeEmail": "Email administratif", - "agencyName": "Nom du service de rattachement", - "connect": "Se connecter", - "selfCredentials": "Ou utiliser vos identifiants", - "email": "Votre adresse électronique professionnelle", - "email hint": "Par exemple : prenom.nom@monadministration.gouv.fr", - "password": "Votre mot de passe", - "noAccount": "Pas encore de compte", - "backToLogin": "Retour à la connexion", - "you domain isn't allowed yet": - "Votre domaine n'est pas encore autorisé. Contactez-nous à l'adresse: ", - "mail body": [ - "Bonjour,", - "Veuillez, sous réserve qu'il soit éligible, ajouter mon nom de domaineà la liste des domaines autorisés pour s'inscrire sur la plateforme SILL.", - "", - "Cordialement," - ].join("\n"), - "mail subject": "[SILL] Autorisation d'un nouveau domaine pour l'inscription", - "login using": "S'identifier avec", - "what is franceConnect": "Qu'est-ce que FranceConnect ?", - "what is franceConnect title": "Qu'est ce que FranceConnect - nouvelle fenêtre", - "organization": "Organisme de rattachement" - /* spell-checker: enable */ - } -}); - -export type I18n = NonNullable>; diff --git a/web/src/keycloak-theme/login/kcContext.ts b/web/src/keycloak-theme/login/kcContext.ts deleted file mode 100644 index e4b4a1cf..00000000 --- a/web/src/keycloak-theme/login/kcContext.ts +++ /dev/null @@ -1,90 +0,0 @@ -import { createGetKcContext, type PageId } from "keycloakify/login"; - -const properties = { - "brandTop": "", - "homeUrl": "https://code.gouv.fr", - "serviceTitle": "CodeGouv" -}; - -export const { getKcContext } = createGetKcContext<{ - pageId: PageId; - properties: { - // NOTE: Needs to be kept in sync with the definition in the package.json - homeUrl: string; - serviceTitle: string; - brandTop: string; - }; -}>({ - "mockData": [ - { - "pageId": "login.ftl", - "locale": { - "currentLanguageTag": "fr" - }, - "social": { - "providers": [ - { - "alias": "agentconnect", - "displayName": "Agent Connect", - "loginUrl": "#", - "providerId": "agentconnect" - } - ] - }, - "realm": { - "loginWithEmailAllowed": true, - "registrationEmailAsUsername": true - }, - properties - }, - { - "pageId": "register-user-profile.ftl", - "locale": { - "currentLanguageTag": "fr" - }, - "profile": { - "attributes": [ - { - "validators": { - "pattern": { - "pattern": "^[a-zA-Z0-9]+$", - "ignore.empty.value": true, - // eslint-disable-next-line no-template-curly-in-string - "error-message": "${alphanumericalCharsOnly}" - } - }, - "value": undefined, - "name": "username" - }, - { - "validators": { - "pattern": { - /* spell-checker: disable */ - "pattern": - "^[^@]+@([^.]+\\.)*((gouv\\.fr)|(sorbonne-universite\\.fr)|(ac-dijon\\.fr)|(insee\\.fr)|(montreuil\\.fr)|(ac-versailles\\.fr)|(inserm\\.fr)|(cnafmail\\.fr)|(ac-grenoble\\.fr)|(univ-lille\\.fr)|(univ-nantes\\.fr)|(obspm\\.fr)|(ac-orleans-tours\\.fr)|(ac-rennes\\.fr)|(adullactorg)|(ac-toulouse\\.fr)|(ac-paris\\.fr)|(pole-emploi\\.fr)|(unistra\\.fr)|(cea\\.fr)|(telecom-st-etienne\\.fr)|(assurance-maladie\\.fr)|(diderot\\.org)|(recia\\.fr))$" - /* spell-checker: enabled */ - } - }, - "name": "email" - }, - { - // eslint-disable-next-line no-template-curly-in-string - "displayName": "${agencyName}", - "annotations": {}, - "required": true, - "groupAnnotations": {}, - "readOnly": false, - "name": "agencyName" - } - ] - }, - properties - } - ] -}); - -export const { kcContext } = getKcContext({ - //"mockPageId": "login.ftl" -}); - -export type KcContext = NonNullable["kcContext"]>; diff --git a/web/src/keycloak-theme/login/pages/Login.tsx b/web/src/keycloak-theme/login/pages/Login.tsx deleted file mode 100644 index 8cb36e9a..00000000 --- a/web/src/keycloak-theme/login/pages/Login.tsx +++ /dev/null @@ -1,272 +0,0 @@ -import { useState, type FormEventHandler } from "react"; -import { useConstCallback } from "keycloakify/tools/useConstCallback"; -import type { PageProps } from "keycloakify/login/pages/PageProps"; -import { tss } from "tss-react"; -import { fr } from "@codegouvfr/react-dsfr"; -import { Button } from "@codegouvfr/react-dsfr/Button"; -import { Input } from "@codegouvfr/react-dsfr/Input"; -import { useGetClassName } from "keycloakify/login/lib/useGetClassName"; -import type { KcContext } from "../kcContext"; -import type { I18n } from "../i18n"; -import { Checkbox } from "@codegouvfr/react-dsfr/Checkbox"; -import { PasswordInput } from "@codegouvfr/react-dsfr/blocks/PasswordInput"; -import { AgentConnectButton } from "@codegouvfr/react-dsfr/AgentConnectButton"; - -export default function Login( - props: PageProps, I18n> -) { - const { kcContext, i18n, Template, doUseDefaultCss, classes: classes_props } = props; - - const { getClassName } = useGetClassName({ - doUseDefaultCss, - "classes": classes_props - }); - - const { social, realm, url, usernameHidden, login, auth, registrationDisabled } = - kcContext; - - const { msg, msgStr } = i18n; - const { classes, cx } = useStyles(); - - const [isLoginButtonDisabled, setIsLoginButtonDisabled] = useState(false); - - const onSubmit = useConstCallback>(e => { - e.preventDefault(); - - setIsLoginButtonDisabled(true); - - const formElement = e.target as HTMLFormElement; - - //NOTE: Even if we login with email Keycloak expect username and password in - //the POST request. - formElement - .querySelector("input[name='email']") - ?.setAttribute("name", "username"); - - formElement.submit(); - }); - - return ( - - ); -} - -const useStyles = tss.withName({ Login }).create({ - "centerCol": { - "display": "flex", - "flexDirection": "column", - "alignItems": "center" - }, - "inputs": { - "display": "flex", - "flexDirection": "column", - "width": "100%" - }, - "agentConnect": { - "&&&": { - "borderRight": "none" - } - }, - "forgotPassword": { - "marginRight": fr.spacing("6v") - }, - "resetAndRegister": { - "display": "flex", - "justifyContent": "center", - "marginTop": fr.spacing("6v") - }, - "rememberMe": { - "marginTop": fr.spacing("5v") - } -}); diff --git a/web/src/keycloak-theme/login/pages/RegisterUserProfile.tsx b/web/src/keycloak-theme/login/pages/RegisterUserProfile.tsx deleted file mode 100644 index 6d5ba984..00000000 --- a/web/src/keycloak-theme/login/pages/RegisterUserProfile.tsx +++ /dev/null @@ -1,93 +0,0 @@ -import { useState } from "react"; -import { UserProfileFormFields } from "./shared/UserProfileFormFields"; -import { tss } from "tss-react"; -import { fr } from "@codegouvfr/react-dsfr"; -import type { PageProps } from "keycloakify/login/pages/PageProps"; -import { useGetClassName } from "keycloakify/login/lib/useGetClassName"; -import type { KcContext } from "../kcContext"; -import type { I18n } from "../i18n"; - -export default function RegisterUserProfile( - props: PageProps, I18n> -) { - const { kcContext, i18n, doUseDefaultCss, Template, classes: classes_props } = props; - - const { getClassName } = useGetClassName({ - doUseDefaultCss, - "classes": classes_props - }); - - const { url, messagesPerField, recaptchaRequired, recaptchaSiteKey } = kcContext; - - const { msg, msgStr } = i18n; - const { classes } = useStyles(); - - const [isFomSubmittable, setIsFomSubmittable] = useState(false); - - return ( - - ); -} - -const useStyles = tss.withName({ RegisterUserProfile }).create({ - "centerCol": { - "display": "flex", - "flexDirection": "column", - "alignItems": "center" - }, - "inputs": { - "display": "flex", - "flexDirection": "column", - "width": "100%" - }, - "buttons": { - "display": "flex", - "gap": fr.spacing("4v"), - "justifyContent": "end" - } -}); diff --git a/web/src/keycloak-theme/login/pages/Terms.tsx b/web/src/keycloak-theme/login/pages/Terms.tsx deleted file mode 100644 index fbdb3be8..00000000 --- a/web/src/keycloak-theme/login/pages/Terms.tsx +++ /dev/null @@ -1,104 +0,0 @@ -import { useRerenderOnStateChange } from "evt/hooks"; -import { Markdown } from "keycloakify/tools/Markdown"; -import { - evtTermMarkdown, - useDownloadTerms -} from "keycloakify/login/lib/useDownloadTerms"; -import tos_en_url from "../assets/tos_en.md"; -import tos_fr_url from "../assets/tos_fr.md"; -import type { PageProps } from "keycloakify/login/pages/PageProps"; -import { tss } from "tss-react"; -import { fr } from "@codegouvfr/react-dsfr"; -import { useGetClassName } from "keycloakify/login/lib/useGetClassName"; -import type { KcContext } from "../kcContext"; -import type { I18n } from "../i18n"; - -export default function Terms( - props: PageProps, I18n> -) { - const { kcContext, i18n, doUseDefaultCss, Template, classes: classes_props } = props; - - const { msg, msgStr } = i18n; - const { classes, cx } = useStyles(); - - const { getClassName } = useGetClassName({ - doUseDefaultCss, - "classes": classes_props - }); - - useDownloadTerms({ - kcContext, - "downloadTermMarkdown": async ({ currentLanguageTag }) => { - const markdownString = await fetch( - (() => { - switch (currentLanguageTag) { - case "fr": - return tos_fr_url; - default: - return tos_en_url; - } - })() - ).then(response => response.text()); - - return markdownString; - } - }); - - useRerenderOnStateChange(evtTermMarkdown); - - const { url } = kcContext; - - if (evtTermMarkdown.state === undefined) { - return null; - } - - return ( - - ); -} - -const useStyles = tss.withName({ Terms }).create({ - "formActions": { - "display": "flex", - "gap": fr.spacing("4v") - } -}); diff --git a/web/src/keycloak-theme/login/pages/shared/UserProfileFormFields.tsx b/web/src/keycloak-theme/login/pages/shared/UserProfileFormFields.tsx deleted file mode 100644 index 80adfc9c..00000000 --- a/web/src/keycloak-theme/login/pages/shared/UserProfileFormFields.tsx +++ /dev/null @@ -1,192 +0,0 @@ -import { useEffect, useState } from "react"; -import { useFormValidation } from "keycloakify/login/lib/useFormValidation"; -import type { I18n } from "keycloak-theme/login/i18n"; -import { Input } from "@codegouvfr/react-dsfr/Input"; -import type { ClassKey } from "keycloakify/login/TemplateProps"; -import { createSillApi } from "core/adapter/sillApi"; -import { sillApiUrl } from "keycloak-theme/login/valuesTransferredOverUrl"; -import { contactEmail } from "ui/shared/contactEmail"; -import MuiCircularProgress from "@mui/material/CircularProgress"; -import { AutocompleteFreeSoloInput } from "ui/shared/AutocompleteFreeSoloInput"; -import { useGetOrganizationFullName } from "ui/i18n/useGetOrganizationFullName"; - -export type UserProfileFormFieldsProps = { - kcContext: Parameters[0]["kcContext"]; - i18n: I18n; - getClassName: (classKey: ClassKey) => string; - onIsFormSubmittableValueChange: (isFormSubmittable: boolean) => void; -}; - -export function UserProfileFormFields({ - kcContext, - onIsFormSubmittableValueChange, - i18n, - getClassName -}: UserProfileFormFieldsProps) { - const { advancedMsg } = i18n; - - const { - formValidationState: { fieldStateByAttributeName, isFormSubmittable }, - formValidationDispatch, - attributesWithPassword - } = useFormValidation({ - kcContext, - i18n - }); - - const { msgStr } = i18n; - - useEffect(() => { - onIsFormSubmittableValueChange(isFormSubmittable); - }, [isFormSubmittable]); - - const { apiData } = (function () { - const [apiData, setApiData] = useState< - | { - organizations: string[]; - organizationUserProfileAttributeName: string; - } - | undefined - >(undefined); - - useEffect(() => { - const sillApi = createSillApi({ - "getOidcAccessToken": () => undefined, - "url": sillApiUrl - }); - - Promise.all([ - sillApi.getAllOrganizations(), - sillApi.getOrganizationUserProfileAttributeName() - ]).then(([organizations, organizationUserProfileAttributeName]) => - setApiData({ - organizations, - organizationUserProfileAttributeName - }) - ); - }, []); - - return { apiData }; - })(); - - const { getOrganizationFullName } = useGetOrganizationFullName(); - - if (apiData === undefined) { - return ( -
- -
- ); - } - - return ( - <> - {attributesWithPassword.map((attribute, i) => { - const { value, displayableErrors } = - fieldStateByAttributeName[attribute.name]; - - if (attribute.name === apiData.organizationUserProfileAttributeName) { - return ( - - getOrganizationFullName(organization) - } - value={value} - onValueChange={value => ( - console.log(value), - formValidationDispatch({ - "action": "update value", - "name": attribute.name, - "newValue": value ?? "" - }) - )} - dsfrInputProps={{ - "label": advancedMsg(attribute.displayName ?? ""), - "nativeInputProps": { - "type": "text", - "id": attribute.name, - "name": attribute.name, - "className": getClassName("kcInputClass"), - "aria-invalid": displayableErrors.length !== 0, - "disabled": attribute.readOnly, - "autoComplete": attribute.autocomplete, - "onBlur": () => - formValidationDispatch({ - "action": "focus lost", - "name": attribute.name - }) - } - }} - /> - ); - } - - return ( - { - switch (attribute.name) { - case "password-confirm": - case "password": - return "password"; - default: - return "text"; - } - })(), - "id": attribute.name, - "name": attribute.name, - "value": value, - "onChange": event => - formValidationDispatch({ - "action": "update value", - "name": attribute.name, - "newValue": event.currentTarget.value - }), - "className": getClassName("kcInputClass"), - "aria-invalid": displayableErrors.length !== 0, - "disabled": attribute.readOnly, - "autoComplete": attribute.autocomplete, - "onBlur": () => - formValidationDispatch({ - "action": "focus lost", - "name": attribute.name - }) - }} - state={displayableErrors.length !== 0 ? "error" : "default"} - stateRelatedMessage={ - attribute.name === "email" && - displayableErrors[0]?.validatorName === "pattern" ? ( - - {msgStr("you domain isn't allowed yet")} -   - - {contactEmail} - - - ) : ( - displayableErrors[0]?.errorMessageStr - ) - } - /> - ); - })} - - ); -} diff --git a/web/src/keycloak-theme/login/valuesTransferredOverUrl.ts b/web/src/keycloak-theme/login/valuesTransferredOverUrl.ts deleted file mode 100644 index b1535d4a..00000000 --- a/web/src/keycloak-theme/login/valuesTransferredOverUrl.ts +++ /dev/null @@ -1,180 +0,0 @@ -import { kcContext } from "./kcContext"; -import { - retrieveParamFromUrl, - addParamToUrl, - updateSearchBarUrl -} from "powerhooks/tools/urlSearchParams"; -import type { LocalizedString } from "ui/i18n"; -import { capitalize } from "tsafe/capitalize"; - -//This file must be imported in KcApp! - -export const { termsOfServiceUrl, addTermsOfServiceUrlToQueryParams } = (() => { - const queryParamName = "termsOfServiceUrl"; - - type Type = LocalizedString; - - const value = (() => { - const unparsedValue = read({ queryParamName }); - - if (unparsedValue === undefined) { - return undefined; - } - - return JSON.parse(unparsedValue) as Type; - })(); - - function addToUrlQueryParams(params: { url: string; value: Type }): string { - const { url, value } = params; - - return addParamToUrl({ - url, - "name": queryParamName, - "value": JSON.stringify(value) - }).newUrl; - } - - const out = { - [queryParamName]: value ?? "https://sill-preprod.lab.sspcloud.fr/terms", - [`add${capitalize(queryParamName)}ToQueryParams` as const]: addToUrlQueryParams - } as const; - - return out; -})(); - -export const { sillApiUrl, addSillApiUrlToQueryParams } = (() => { - const queryParamName = "sillApiUrl"; - - type Type = string; - - const value = (() => { - const unparsedValue = read({ queryParamName }); - - if (unparsedValue === undefined) { - return undefined; - } - - return JSON.parse(unparsedValue) as Type; - })(); - - function addToUrlQueryParams(params: { url: string; value: Type }): string { - const { url, value } = params; - - return addParamToUrl({ - url, - "name": queryParamName, - "value": JSON.stringify(value) - }).newUrl; - } - - const out = { - [queryParamName]: value ?? "http://localhost:8080/api", - [`add${capitalize(queryParamName)}ToQueryParams` as const]: addToUrlQueryParams - } as const; - - return out; -})(); - -export const { isDark, addIsDarkToQueryParams } = (() => { - const queryParamName = "isDark"; - - type Type = boolean | undefined; - - const value = (() => { - const unparsedValue = read({ queryParamName }); - - if (unparsedValue === undefined) { - return undefined; - } - - return JSON.parse(unparsedValue) as Type; - })(); - - function addToUrlQueryParams(params: { url: string; value: Type }): string { - const { url, value } = params; - - return addParamToUrl({ - url, - "name": queryParamName, - "value": JSON.stringify(value) - }).newUrl; - } - - const out = { - [queryParamName]: value, - [`add${capitalize(queryParamName)}ToQueryParams` as const]: addToUrlQueryParams - } as const; - - return out; -})(); - -export const { appLocationOrigin, addAppLocationOriginToQueryParams } = (() => { - const queryParamName = "appLocationOrigin"; - - type Type = string; - - const value = (() => { - const unparsedValue = read({ queryParamName }); - - if (unparsedValue === undefined) { - return undefined; - } - - return JSON.parse(unparsedValue) as Type; - })(); - - function addToUrlQueryParams(params: { url: string; value: Type }): string { - const { url, value } = params; - - return addParamToUrl({ - url, - "name": queryParamName, - "value": JSON.stringify(value) - }).newUrl; - } - - const out = { - [queryParamName]: value ?? "", - [`add${capitalize(queryParamName)}ToQueryParams` as const]: addToUrlQueryParams - } as const; - - return out; -})(); - -function read(params: { queryParamName: string }): string | undefined { - if (kcContext === undefined || process.env.NODE_ENV !== "production") { - //NOTE: We do something only if we are really in Keycloak - return undefined; - } - - const { queryParamName } = params; - - read_from_url: { - const result = retrieveParamFromUrl({ - "url": window.location.href, - "name": queryParamName - }); - - if (!result.wasPresent) { - break read_from_url; - } - - const { newUrl, value: serializedValue } = result; - - updateSearchBarUrl(newUrl); - - localStorage.setItem(queryParamName, serializedValue); - - return serializedValue; - } - - //Reading from local storage - const serializedValue = localStorage.getItem(queryParamName); - - if (serializedValue === null) { - // Missing ${queryParamName} in URL when redirecting to login page - return undefined; - } - - return serializedValue; -} diff --git a/web/src/stories/keycloak-theme/account/Password.stories.tsx b/web/src/stories/keycloak-theme/account/Password.stories.tsx deleted file mode 100644 index 0d84e847..00000000 --- a/web/src/stories/keycloak-theme/account/Password.stories.tsx +++ /dev/null @@ -1,15 +0,0 @@ -import type { ComponentMeta } from "@storybook/react"; -import { createPageStory } from "./createPageStory"; - -const pageId = "password.ftl"; - -const { PageStory } = createPageStory({ pageId }); - -const meta: ComponentMeta = { - title: `keycloak-theme/account/${pageId}`, - component: PageStory -}; - -export default meta; - -export const Default = () => ; diff --git a/web/src/stories/keycloak-theme/account/createPageStory.tsx b/web/src/stories/keycloak-theme/account/createPageStory.tsx deleted file mode 100644 index 91b397dd..00000000 --- a/web/src/stories/keycloak-theme/account/createPageStory.tsx +++ /dev/null @@ -1,22 +0,0 @@ -import { getKcContext, type KcContext } from "keycloak-theme/account/kcContext"; -import KcApp from "keycloak-theme/account/KcApp"; -import type { DeepPartial } from "keycloakify/tools/DeepPartial"; - -export function createPageStory(params: { - pageId: PageId; -}) { - const { pageId } = params; - - function PageStory(params: { - kcContext?: DeepPartial>; - }) { - const { kcContext } = getKcContext({ - "mockPageId": pageId, - "storyPartialKcContext": params.kcContext - }); - - return ; - } - - return { PageStory }; -} diff --git a/web/src/stories/keycloak-theme/login/Login.stories.tsx b/web/src/stories/keycloak-theme/login/Login.stories.tsx deleted file mode 100644 index 3ae2f7ce..00000000 --- a/web/src/stories/keycloak-theme/login/Login.stories.tsx +++ /dev/null @@ -1,156 +0,0 @@ -import type { ComponentMeta } from "@storybook/react"; -import { createPageStory } from "./getKcPageStory"; - -const pageId = "login.ftl"; - -const { PageStory } = createPageStory({ pageId }); - -const meta: ComponentMeta = { - "title": `keycloak-theme/login/${pageId}`, - "component": PageStory -}; - -export default meta; - -export const Default = () => ; - -export const WithoutPasswordField = () => ( - -); - -export const WithoutRegistration = () => ( - -); - -export const WithoutRememberMe = () => ( - -); - -export const WithoutPasswordReset = () => ( - -); - -export const WithEmailAsUsername = () => ( - -); - -export const WithPresetUsername = () => ( - -); - -export const WithImmutablePresetUsername = () => ( - -); - -export const WithSocialProviders = () => ( - -); diff --git a/web/src/stories/keycloak-theme/login/getKcPageStory.tsx b/web/src/stories/keycloak-theme/login/getKcPageStory.tsx deleted file mode 100644 index 18902cb0..00000000 --- a/web/src/stories/keycloak-theme/login/getKcPageStory.tsx +++ /dev/null @@ -1,22 +0,0 @@ -import { getKcContext, type KcContext } from "keycloak-theme/login/kcContext"; -import KcApp from "keycloak-theme/login/KcApp"; -import type { DeepPartial } from "keycloakify/tools/DeepPartial"; - -export function createPageStory(params: { - pageId: PageId; -}) { - const { pageId } = params; - - function PageStory(params: { - kcContext?: DeepPartial>; - }) { - const { kcContext } = getKcContext({ - mockPageId: pageId, - storyPartialKcContext: params.kcContext - }); - - return ; - } - - return { PageStory }; -} diff --git a/web/src/ui/App.tsx b/web/src/ui/App.tsx index fb0ca810..abb2d5b7 100644 --- a/web/src/ui/App.tsx +++ b/web/src/ui/App.tsx @@ -6,14 +6,7 @@ import { Footer } from "ui/shared/Footer"; import { declareComponentKeys } from "i18nifty"; import { useCore } from "core"; import { RouteProvider } from "ui/routes"; -import { injectGlobalStatesInSearchParams } from "powerhooks/useGlobalState"; import { evtLang } from "ui/i18n"; -import { - addSillApiUrlToQueryParams, - addTermsOfServiceUrlToQueryParams, - addIsDarkToQueryParams, - addAppLocationOriginToQueryParams -} from "keycloak-theme/login/valuesTransferredOverUrl"; import { createCoreProvider } from "core"; import { pages } from "ui/pages"; import { useConst } from "powerhooks/useConst"; @@ -28,25 +21,11 @@ import { apiUrl, appUrl, appPath } from "urls"; const { CoreProvider } = createCoreProvider({ apiUrl, appUrl, - // prettier-ignore - "transformUrlBeforeRedirectToLogin": ({ url, termsOfServiceUrl }) => - [url] - // TODO: Remove, Not needed in generic keycloak theme - .map(injectGlobalStatesInSearchParams) - // TODO: Remove, Not needed in generic keycloak theme - .map(url => addSillApiUrlToQueryParams({ url, "value": apiUrl })) - // TODO: Remove, the query param is dark=true or dark=false in generic keycloak theme - .map(url => addIsDarkToQueryParams({ url, "value": getIsDark() })) - // TODO: Remove, Not implemented in generic keycloak theme - .map(url => addTermsOfServiceUrlToQueryParams({ url, "value": termsOfServiceUrl })) - // TODO: Remove, Not needed in generic keycloak theme, inferred from redirect_uri (redirect to codegouv.fr and not codegouv.fr/sill though) - .map(url => addAppLocationOriginToQueryParams({ url, "value": window.location.origin })) - .map(url => { - const parsedUrl = new URL(url); - parsedUrl.searchParams.set("dark", `${getIsDark()}`); - return parsedUrl.toString(); - }) - [0], + "transformUrlBeforeRedirectToLogin": ({ url }) => { + const parsedUrl = new URL(url); + parsedUrl.searchParams.set("dark", `${getIsDark()}`); + return parsedUrl.toString(); + }, "getCurrentLang": () => evtLang.state, // TODO: Remove, this was to redirect to an other instance of the sill "onMoved": ({ redirectUrl }) => { diff --git a/web/src/ui/pages/readme/Readme.tsx b/web/src/ui/pages/readme/Readme.tsx index fa72727d..a34c4097 100644 --- a/web/src/ui/pages/readme/Readme.tsx +++ b/web/src/ui/pages/readme/Readme.tsx @@ -1,5 +1,5 @@ import { useEffect } from "react"; -import { Markdown } from "keycloakify/tools/Markdown"; +import Markdown from "react-markdown"; import { useCoreState, useCore } from "core"; import { tss } from "tss-react"; import { fr } from "@codegouvfr/react-dsfr"; diff --git a/web/src/ui/pages/softwareCatalog/SoftwareCatalogCard.tsx b/web/src/ui/pages/softwareCatalog/SoftwareCatalogCard.tsx index 57b3da81..020af492 100644 --- a/web/src/ui/pages/softwareCatalog/SoftwareCatalogCard.tsx +++ b/web/src/ui/pages/softwareCatalog/SoftwareCatalogCard.tsx @@ -10,7 +10,7 @@ import type { Equals } from "tsafe"; import Tooltip from "@mui/material/Tooltip"; import { DetailUsersAndReferents } from "ui/shared/DetailUsersAndReferents"; import softwareLogoPlaceholder from "ui/assets/software_logo_placeholder.png"; -import { Markdown } from "keycloakify/tools/Markdown"; +import Markdown from "react-markdown"; export type Props = { className?: string; diff --git a/web/src/ui/pages/terms/Terms.tsx b/web/src/ui/pages/terms/Terms.tsx index 7a58ca4c..16f44f94 100644 --- a/web/src/ui/pages/terms/Terms.tsx +++ b/web/src/ui/pages/terms/Terms.tsx @@ -1,12 +1,12 @@ import { useEffect } from "react"; import { declareComponentKeys } from "i18nifty"; import { useCoreState, useCore } from "core"; -import { Markdown } from "keycloakify/tools/Markdown"; import { useLang } from "ui/i18n"; import { tss } from "tss-react"; import { fr } from "@codegouvfr/react-dsfr"; import type { PageRoute } from "./route"; import { LoadingFallback } from "ui/shared/LoadingFallback"; +import Markdown from "react-markdown"; type Props = { className?: string; diff --git a/web/src/ui/pages/userProfile/UserProfile.tsx b/web/src/ui/pages/userProfile/UserProfile.tsx index 23eaf204..4de7a633 100644 --- a/web/src/ui/pages/userProfile/UserProfile.tsx +++ b/web/src/ui/pages/userProfile/UserProfile.tsx @@ -8,7 +8,7 @@ import type { PageRoute } from "./route"; import { LoadingFallback } from "ui/shared/LoadingFallback"; import { tss } from "tss-react"; import { fr } from "@codegouvfr/react-dsfr"; -import { Markdown } from "keycloakify/tools/Markdown"; +import Markdown from "react-markdown"; import { Breadcrumb } from "@codegouvfr/react-dsfr/Breadcrumb"; import { routes, session, getPreviousRouteName } from "ui/routes"; import { Button } from "@codegouvfr/react-dsfr/Button"; diff --git a/yarn.lock b/yarn.lock index fff0be5a..08f2081a 100644 --- a/yarn.lock +++ b/yarn.lock @@ -90,7 +90,7 @@ eslint-visitor-keys "^2.1.0" semver "^6.3.1" -"@babel/generator@^7.12.11", "@babel/generator@^7.12.5", "@babel/generator@^7.22.9", "@babel/generator@^7.25.9", "@babel/generator@^7.26.0", "@babel/generator@^7.7.2": +"@babel/generator@^7.12.11", "@babel/generator@^7.12.5", "@babel/generator@^7.25.9", "@babel/generator@^7.26.0", "@babel/generator@^7.7.2": version "7.26.2" resolved "https://registry.yarnpkg.com/@babel/generator/-/generator-7.26.2.tgz#87b75813bec87916210e5e01939a4c823d6bb74f" integrity sha512-zevQbhbau95nkoxSq3f/DC/SC+EEOUZd3DYqfSkMhY2/wfSeaHV1Ew4vk8e+x8lja31IbyuUa2uQ3JONqKbysw== @@ -101,6 +101,17 @@ "@jridgewell/trace-mapping" "^0.3.25" jsesc "^3.0.2" +"@babel/generator@^7.22.9": + version "7.26.3" + resolved "https://registry.yarnpkg.com/@babel/generator/-/generator-7.26.3.tgz#ab8d4360544a425c90c248df7059881f4b2ce019" + integrity sha512-6FF/urZvD0sTeO7k6/B15pMLC4CHUv1426lzr3N01aHJTl046uCAh9LXW/fzeXXjPNCJ6iABW5XaWOsIZB93aQ== + dependencies: + "@babel/parser" "^7.26.3" + "@babel/types" "^7.26.3" + "@jridgewell/gen-mapping" "^0.3.5" + "@jridgewell/trace-mapping" "^0.3.25" + jsesc "^3.0.2" + "@babel/helper-annotate-as-pure@^7.18.6", "@babel/helper-annotate-as-pure@^7.25.9": version "7.25.9" resolved "https://registry.yarnpkg.com/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.25.9.tgz#d8eac4d2dc0d7b6e11fa6e535332e0d3184f06b4" @@ -282,13 +293,20 @@ "@babel/template" "^7.25.9" "@babel/types" "^7.26.0" -"@babel/parser@^7.1.0", "@babel/parser@^7.12.11", "@babel/parser@^7.12.7", "@babel/parser@^7.14.7", "@babel/parser@^7.20.7", "@babel/parser@^7.22.7", "@babel/parser@^7.25.9", "@babel/parser@^7.26.0", "@babel/parser@^7.26.2": +"@babel/parser@^7.1.0", "@babel/parser@^7.12.11", "@babel/parser@^7.12.7", "@babel/parser@^7.14.7", "@babel/parser@^7.20.7", "@babel/parser@^7.25.9", "@babel/parser@^7.26.0", "@babel/parser@^7.26.2": version "7.26.2" resolved "https://registry.yarnpkg.com/@babel/parser/-/parser-7.26.2.tgz#fd7b6f487cfea09889557ef5d4eeb9ff9a5abd11" integrity sha512-DWMCZH9WA4Maitz2q21SRKHo9QXZxkDsbNZoVD62gusNtNBBqDg9i7uOhASfTfIGNzW+O+r7+jAlM8dwphcJKQ== dependencies: "@babel/types" "^7.26.0" +"@babel/parser@^7.22.7", "@babel/parser@^7.26.3": + version "7.26.3" + resolved "https://registry.yarnpkg.com/@babel/parser/-/parser-7.26.3.tgz#8c51c5db6ddf08134af1ddbacf16aaab48bac234" + integrity sha512-WJ/CvmY8Mea8iDXo6a7RK2wbmJITT5fN3BEkRuFlxVyNx8jOKIIhmC4fSkTcPcf8JyavbBwIe6OpiCOBXt/IcA== + dependencies: + "@babel/types" "^7.26.3" + "@babel/plugin-bugfix-firefox-class-in-computed-class-key@^7.25.9": version "7.25.9" resolved "https://registry.yarnpkg.com/@babel/plugin-bugfix-firefox-class-in-computed-class-key/-/plugin-bugfix-firefox-class-in-computed-class-key-7.25.9.tgz#cc2e53ebf0a0340777fff5ed521943e253b4d8fe" @@ -1206,7 +1224,7 @@ debug "^4.3.1" globals "^11.1.0" -"@babel/types@^7.0.0", "@babel/types@^7.12.11", "@babel/types@^7.12.6", "@babel/types@^7.12.7", "@babel/types@^7.2.0", "@babel/types@^7.20.7", "@babel/types@^7.22.5", "@babel/types@^7.25.9", "@babel/types@^7.26.0", "@babel/types@^7.3.3", "@babel/types@^7.4.4": +"@babel/types@^7.0.0", "@babel/types@^7.12.11", "@babel/types@^7.12.6", "@babel/types@^7.12.7", "@babel/types@^7.2.0", "@babel/types@^7.20.7", "@babel/types@^7.25.9", "@babel/types@^7.26.0", "@babel/types@^7.3.3", "@babel/types@^7.4.4": version "7.26.0" resolved "https://registry.yarnpkg.com/@babel/types/-/types-7.26.0.tgz#deabd08d6b753bc8e0f198f8709fb575e31774ff" integrity sha512-Z/yiTPj+lDVnF7lWeKCIJzaIkI0vYO87dMpZ4bg4TDrFe4XXLFWL1TbXU27gBP3QccxV9mZICCrnjnYlJjXHOA== @@ -1214,6 +1232,14 @@ "@babel/helper-string-parser" "^7.25.9" "@babel/helper-validator-identifier" "^7.25.9" +"@babel/types@^7.22.5", "@babel/types@^7.26.3": + version "7.26.3" + resolved "https://registry.yarnpkg.com/@babel/types/-/types-7.26.3.tgz#37e79830f04c2b5687acc77db97fbc75fb81f3c0" + integrity sha512-vN5p+1kl59GVKMvTHt55NzzmYVxprfJD+ql7U9NFIfKCBkYE55LYtS+WtPlaYOyzydrKI8Nezd+aZextrd+FMA== + dependencies: + "@babel/helper-string-parser" "^7.25.9" + "@babel/helper-validator-identifier" "^7.25.9" + "@base2/pretty-print-object@1.0.1": version "1.0.1" resolved "https://registry.yarnpkg.com/@base2/pretty-print-object/-/pretty-print-object-1.0.1.tgz#371ba8be66d556812dc7fb169ebc3c08378f69d4" @@ -3850,6 +3876,13 @@ "@types/estree" "*" "@types/json-schema" "*" +"@types/estree-jsx@^1.0.0": + version "1.0.5" + resolved "https://registry.yarnpkg.com/@types/estree-jsx/-/estree-jsx-1.0.5.tgz#858a88ea20f34fe65111f005a689fa1ebf70dc18" + integrity sha512-52CcUVNFyfb1A2ALocQw/Dd1BQFNmSdkuC3BkZ6iqhdMfQz7JWOFRuJFloOzjk+6WijU56m9oKXFAXc7o3Towg== + dependencies: + "@types/estree" "*" + "@types/estree@*", "@types/estree@1.0.6", "@types/estree@^1.0.0", "@types/estree@^1.0.6": version "1.0.6" resolved "https://registry.yarnpkg.com/@types/estree/-/estree-1.0.6.tgz#628effeeae2064a1b4e79f78e81d87b7e5fc7b50" @@ -3940,6 +3973,13 @@ dependencies: "@types/unist" "^2" +"@types/hast@^3.0.0": + version "3.0.4" + resolved "https://registry.yarnpkg.com/@types/hast/-/hast-3.0.4.tgz#1d6b39993b82cea6ad783945b0508c25903e15aa" + integrity sha512-WPs+bbQw5aCj+x6laNGWLH3wviHtoCv/P3+otBhbOhJgG8qtpdAMlTCxLtsTWA7LH1Oh/bFCHsBn0TPS5m30EQ== + dependencies: + "@types/unist" "*" + "@types/html-minifier-terser@^5.0.0": version "5.1.2" resolved "https://registry.yarnpkg.com/@types/html-minifier-terser/-/html-minifier-terser-5.1.2.tgz#693b316ad323ea97eed6b38ed1a3cc02b1672b57" @@ -4008,6 +4048,13 @@ dependencies: "@types/unist" "^2" +"@types/mdast@^4.0.0": + version "4.0.4" + resolved "https://registry.yarnpkg.com/@types/mdast/-/mdast-4.0.4.tgz#7ccf72edd2f1aa7dd3437e180c64373585804dd6" + integrity sha512-kGaNbPh1k7AFzgpud/gMdvIm5xuECykRR+JnWKQno9TAXVa6WIVCGTPvYGekIDL4uwCZQSYbUxNBSb1aUo79oA== + dependencies: + "@types/unist" "*" + "@types/memoizee@^0.4.4", "@types/memoizee@^0.4.7": version "0.4.11" resolved "https://registry.yarnpkg.com/@types/memoizee/-/memoizee-0.4.11.tgz#da8897f0064bff3e845b5185e2a323bbd5c8d0a3" @@ -4247,6 +4294,11 @@ resolved "https://registry.yarnpkg.com/@types/ungap__structured-clone/-/ungap__structured-clone-0.3.3.tgz#cf7e1252f18f5ee39291a8f52fa83c31b0102fc6" integrity sha512-RNmhIPwoip6K/zZOv3ypksTAqaqLEXvlNSXKyrC93xMSOAHZCR7PifW6xKZCwkbbnbM9dwB9X56PPoNTlNwEqw== +"@types/unist@*", "@types/unist@^3.0.0": + version "3.0.3" + resolved "https://registry.yarnpkg.com/@types/unist/-/unist-3.0.3.tgz#acaab0f919ce69cce629c2d4ed2eb4adc1b6c20c" + integrity sha512-ko/gIFJRv177XgZsZcBwnqJN5x/Gien8qNOn0D5bQU/zAzVf9Zt3BlcUiLqhV9y4ARk0GbT3tnUiPNgnTXzc/Q== + "@types/unist@^2", "@types/unist@^2.0.0", "@types/unist@^2.0.2", "@types/unist@^2.0.3": version "2.0.11" resolved "https://registry.yarnpkg.com/@types/unist/-/unist-2.0.11.tgz#11af57b127e32487774841f7a4e54eab166d03c4" @@ -4515,6 +4567,11 @@ resolved "https://registry.yarnpkg.com/@ungap/structured-clone/-/structured-clone-0.3.4.tgz#f6d804e185591373992781361e4aa5bb81ffba35" integrity sha512-TSVh8CpnwNAsPC5wXcIyh92Bv1gq6E9cNDeeLu7Z4h8V4/qWtXJp7y42qljRkqcpmsve1iozwv1wr+3BNdILCg== +"@ungap/structured-clone@^1.0.0": + version "1.2.1" + resolved "https://registry.yarnpkg.com/@ungap/structured-clone/-/structured-clone-1.2.1.tgz#28fa185f67daaf7b7a1a8c1d445132c5d979f8bd" + integrity sha512-fEzPV3hSkSMltkw152tJKNARhOupqbH96MZWyRjNaYZOMIzbrTeQDG+MTc6Mr2pgzFQzFxAfmhGDNP5QK++2ZA== + "@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" @@ -7348,7 +7405,7 @@ debug@2.6.9, debug@^2.2.0, debug@^2.3.3, debug@^2.6.0: dependencies: ms "2.0.0" -debug@4, debug@^4.0.0, debug@^4.1.0, debug@^4.1.1, debug@^4.3.1, debug@^4.3.2, debug@^4.3.3, debug@^4.3.4: +debug@4, debug@^4.0.0, debug@^4.1.0, debug@^4.1.1, debug@^4.3.1, debug@^4.3.2, debug@^4.3.4: version "4.3.7" resolved "https://registry.yarnpkg.com/debug/-/debug-4.3.7.tgz#87945b4151a011d76d95a198d7111c865c360a52" integrity sha512-Er2nc/H7RrMXZBFCEim6TCmMk02Z8vLC2Rbi1KEBggpo0fS6l0S1nnapwmIi3yW/+GOJap1Krg4w0Hg80oCqgQ== @@ -7362,6 +7419,13 @@ debug@^3.0.0, debug@^3.2.7: dependencies: ms "^2.1.1" +debug@^4.3.3: + version "4.4.0" + resolved "https://registry.yarnpkg.com/debug/-/debug-4.4.0.tgz#2b3f2aea2ffeb776477460267377dc8710faba8a" + integrity sha512-6WTZ/IxCY/T6BALoZHaE4ctp9xm+Z5kY/pzYaCHRFeyVhojxlrm+46y68HA6hr0TcwEssoxNiDEUJQjfPZ/RYA== + dependencies: + ms "^2.1.3" + decamelize@^1.1.2: version "1.2.0" resolved "https://registry.yarnpkg.com/decamelize/-/decamelize-1.2.0.tgz#f6534d15148269b20352e7bee26f501f9a191290" @@ -7584,6 +7648,13 @@ detect-port@^1.3.0: address "^1.0.1" debug "4" +devlop@^1.0.0, devlop@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/devlop/-/devlop-1.1.0.tgz#4db7c2ca4dc6e0e834c30be70c94bbc976dc7018" + integrity sha512-RWmIqhcFf1lRYBvNmr7qTNuyCt/7/ns2jbpp1+PalgE/rDQcBT0fioSMUpJ93irlUhC5hrg4cYqe6U+0ImW0rA== + dependencies: + dequal "^2.0.0" + didyoumean@^1.2.2: version "1.2.2" resolved "https://registry.yarnpkg.com/didyoumean/-/didyoumean-1.2.2.tgz#989346ffe9e839b4555ecf5666edea0d3e8ad037" @@ -8615,6 +8686,11 @@ estree-to-babel@^3.1.0: "@babel/types" "^7.2.0" c8 "^7.6.0" +estree-util-is-identifier-name@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/estree-util-is-identifier-name/-/estree-util-is-identifier-name-3.0.0.tgz#0b5ef4c4ff13508b34dcd01ecfa945f61fce5dbd" + integrity sha512-hFtqIDZTIUZ9BXLb8y4pYGyk6+wekIivNVTcmvk8NoOh+VeRn5y6cEHzbURrWbfp1fIqdVipilzj+lfaadNZmg== + estree-walker@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/estree-walker/-/estree-walker-1.0.1.tgz#31bc5d612c96b704106b477e6dd5d8aa138cb700" @@ -8691,7 +8767,16 @@ evp_bytestokey@^1.0.0, evp_bytestokey@^1.0.3: md5.js "^1.3.4" safe-buffer "^5.1.1" -evt@^2.4.18, evt@^2.5.7: +evt@^2.4.18: + version "2.5.8" + resolved "https://registry.yarnpkg.com/evt/-/evt-2.5.8.tgz#4cc4e2db92d89cc43e00a0755703317f5f9b6d4c" + integrity sha512-wjurRtEqepH03fZSzkCUAw2tNNtEoeoEYXf7EqG8uU52wQ3D/+ctyQE8hf+YR/5DXZlwl2jNGLMm4hAd/wyD6g== + dependencies: + minimal-polyfills "^2.2.3" + run-exclusive "^2.2.19" + tsafe "^1.8.5" + +evt@^2.5.7: version "2.5.7" resolved "https://registry.yarnpkg.com/evt/-/evt-2.5.7.tgz#55c5f8ff910f4b7531bfac91e963d4cb3231f253" integrity sha512-dr7Wd16ry5F8WNU1xXLKpFpO3HsoAGg8zC48e08vDdzMzGWCP9/QFGt1PQptEEDh8SwYP3EL8M+d/Gb0kgUp6g== @@ -9913,6 +9998,27 @@ hast-util-to-html@^8.0.0: stringify-entities "^4.0.0" zwitch "^2.0.4" +hast-util-to-jsx-runtime@^2.0.0: + version "2.3.2" + resolved "https://registry.yarnpkg.com/hast-util-to-jsx-runtime/-/hast-util-to-jsx-runtime-2.3.2.tgz#6d11b027473e69adeaa00ca4cfb5bb68e3d282fa" + integrity sha512-1ngXYb+V9UT5h+PxNRa1O1FYguZK/XL+gkeqvp7EdHlB9oHUG0eYRo/vY5inBdcqo3RkPMC58/H94HvkbfGdyg== + dependencies: + "@types/estree" "^1.0.0" + "@types/hast" "^3.0.0" + "@types/unist" "^3.0.0" + comma-separated-tokens "^2.0.0" + devlop "^1.0.0" + estree-util-is-identifier-name "^3.0.0" + hast-util-whitespace "^3.0.0" + mdast-util-mdx-expression "^2.0.0" + mdast-util-mdx-jsx "^3.0.0" + mdast-util-mdxjs-esm "^2.0.0" + property-information "^6.0.0" + space-separated-tokens "^2.0.0" + style-to-object "^1.0.0" + unist-util-position "^5.0.0" + vfile-message "^4.0.0" + hast-util-to-parse5@^6.0.0: version "6.0.0" resolved "https://registry.yarnpkg.com/hast-util-to-parse5/-/hast-util-to-parse5-6.0.0.tgz#1ec44650b631d72952066cea9b1445df699f8479" @@ -9948,6 +10054,13 @@ hast-util-whitespace@^2.0.0: resolved "https://registry.yarnpkg.com/hast-util-whitespace/-/hast-util-whitespace-2.0.1.tgz#0ec64e257e6fc216c7d14c8a1b74d27d650b4557" integrity sha512-nAxA0v8+vXSBDt3AnRUNjyRIQ0rD+ntpbAp4LnPkumc5M9yUbSMa4XDU9Q6etY4f1Wp4bNgvc1yjiZtsTTrSng== +hast-util-whitespace@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/hast-util-whitespace/-/hast-util-whitespace-3.0.0.tgz#7778ed9d3c92dd9e8c5c8f648a49c21fc51cb621" + integrity sha512-88JUN06ipLwsnv+dVn+OIYOvAuvBMy/Qoi6O7mQHxdPXpjy+Cd6xRkWwux7DKO+4sYILtLBRIKgsdpS2gQc7qw== + dependencies: + "@types/hast" "^3.0.0" + hastscript@^6.0.0: version "6.0.0" resolved "https://registry.yarnpkg.com/hastscript/-/hastscript-6.0.0.tgz#e8768d7eac56c3fdeac8a92830d58e811e5bf640" @@ -10075,6 +10188,11 @@ html-to-react@^1.3.4: htmlparser2 "^9.0" lodash.camelcase "^4.3.0" +html-url-attributes@^3.0.0: + version "3.0.1" + resolved "https://registry.yarnpkg.com/html-url-attributes/-/html-url-attributes-3.0.1.tgz#83b052cd5e437071b756cd74ae70f708870c2d87" + integrity sha512-ol6UPyBWqsrO6EJySPz2O7ZSr856WDrEzM5zMqp+FJJLGMW35cLYmmZnl0vztAZxRUoNZJFTCohfjuIJ8I4QBQ== + html-void-elements@^1.0.0: version "1.0.5" resolved "https://registry.yarnpkg.com/html-void-elements/-/html-void-elements-1.0.5.tgz#ce9159494e86d95e45795b166c2021c2cfca4483" @@ -10387,6 +10505,11 @@ inline-style-parser@0.1.1: resolved "https://registry.yarnpkg.com/inline-style-parser/-/inline-style-parser-0.1.1.tgz#ec8a3b429274e9c0a1f1c4ffa9453a7fef72cea1" integrity sha512-7NXolsK4CAS5+xvdj5OMMbI962hU/wvwoxk+LWR9Ek9bVtyuuYScDN6eS0rUm6TxApFpw7CX1o4uJzcd4AyD3Q== +inline-style-parser@0.2.4: + version "0.2.4" + resolved "https://registry.yarnpkg.com/inline-style-parser/-/inline-style-parser-0.2.4.tgz#f4af5fe72e612839fcd453d989a586566d695f22" + integrity sha512-0aO8FkhNZlj/ZIbNi7Lxxr12obT7cL1moPfE4tg1LkX7LlLfC6DeX4l2ZEud1ukP9jNQyNnfzQVqwbwmAATY4Q== + internal-slot@^1.0.4, internal-slot@^1.0.7: version "1.0.7" resolved "https://registry.yarnpkg.com/internal-slot/-/internal-slot-1.0.7.tgz#c06dcca3ed874249881007b0a5523b172a190802" @@ -12174,13 +12297,20 @@ magic-string@^0.25.0, magic-string@^0.25.7: dependencies: sourcemap-codec "^1.4.8" -magic-string@^0.30.5, magic-string@^0.30.7: +magic-string@^0.30.5: version "0.30.12" resolved "https://registry.yarnpkg.com/magic-string/-/magic-string-0.30.12.tgz#9eb11c9d072b9bcb4940a5b2c2e1a217e4ee1a60" integrity sha512-Ea8I3sQMVXr8JhN4z+H/d8zwo+tYDgHE9+5G4Wnrwhs0gaK9fXTKx0Tw5Xwsd/bCPTTZNRAdpyzvoeORe9LYpw== dependencies: "@jridgewell/sourcemap-codec" "^1.5.0" +magic-string@^0.30.7: + version "0.30.15" + resolved "https://registry.yarnpkg.com/magic-string/-/magic-string-0.30.15.tgz#d5474a2c4c5f35f041349edaba8a5cb02733ed3c" + integrity sha512-zXeaYRgZ6ldS1RJJUrMrYgNJ4fdwnyI6tVqoiIhyCyv5IVTK9BU8Ic2l253GGETQHxI4HNUwhJ3fjDhKqEoaAw== + dependencies: + "@jridgewell/sourcemap-codec" "^1.5.0" + make-dir@^1.0.0: version "1.3.0" resolved "https://registry.yarnpkg.com/make-dir/-/make-dir-1.3.0.tgz#79c1033b80515bd6d24ec9933e860ca75ee27f0c" @@ -12365,6 +12495,24 @@ mdast-util-from-markdown@^1.0.0: unist-util-stringify-position "^3.0.0" uvu "^0.5.0" +mdast-util-from-markdown@^2.0.0: + version "2.0.2" + resolved "https://registry.yarnpkg.com/mdast-util-from-markdown/-/mdast-util-from-markdown-2.0.2.tgz#4850390ca7cf17413a9b9a0fbefcd1bc0eb4160a" + integrity sha512-uZhTV/8NBuw0WHkPTrCqDOl0zVe1BIng5ZtHoDk49ME1qqcjYmmLmOf0gELgcRMxN4w2iuIeVso5/6QymSrgmA== + dependencies: + "@types/mdast" "^4.0.0" + "@types/unist" "^3.0.0" + decode-named-character-reference "^1.0.0" + devlop "^1.0.0" + mdast-util-to-string "^4.0.0" + micromark "^4.0.0" + micromark-util-decode-numeric-character-reference "^2.0.0" + micromark-util-decode-string "^2.0.0" + micromark-util-normalize-identifier "^2.0.0" + micromark-util-symbol "^2.0.0" + micromark-util-types "^2.0.0" + unist-util-stringify-position "^4.0.0" + mdast-util-gfm-autolink-literal@^1.0.0: version "1.0.3" resolved "https://registry.yarnpkg.com/mdast-util-gfm-autolink-literal/-/mdast-util-gfm-autolink-literal-1.0.3.tgz#67a13abe813d7eba350453a5333ae1bc0ec05c06" @@ -12423,6 +12571,48 @@ mdast-util-gfm@^2.0.0: mdast-util-gfm-task-list-item "^1.0.0" mdast-util-to-markdown "^1.0.0" +mdast-util-mdx-expression@^2.0.0: + version "2.0.1" + resolved "https://registry.yarnpkg.com/mdast-util-mdx-expression/-/mdast-util-mdx-expression-2.0.1.tgz#43f0abac9adc756e2086f63822a38c8d3c3a5096" + integrity sha512-J6f+9hUp+ldTZqKRSg7Vw5V6MqjATc+3E4gf3CFNcuZNWD8XdyI6zQ8GqH7f8169MM6P7hMBRDVGnn7oHB9kXQ== + dependencies: + "@types/estree-jsx" "^1.0.0" + "@types/hast" "^3.0.0" + "@types/mdast" "^4.0.0" + devlop "^1.0.0" + mdast-util-from-markdown "^2.0.0" + mdast-util-to-markdown "^2.0.0" + +mdast-util-mdx-jsx@^3.0.0: + version "3.1.3" + resolved "https://registry.yarnpkg.com/mdast-util-mdx-jsx/-/mdast-util-mdx-jsx-3.1.3.tgz#76b957b3da18ebcfd0de3a9b4451dcd6fdec2320" + integrity sha512-bfOjvNt+1AcbPLTFMFWY149nJz0OjmewJs3LQQ5pIyVGxP4CdOqNVJL6kTaM5c68p8q82Xv3nCyFfUnuEcH3UQ== + dependencies: + "@types/estree-jsx" "^1.0.0" + "@types/hast" "^3.0.0" + "@types/mdast" "^4.0.0" + "@types/unist" "^3.0.0" + ccount "^2.0.0" + devlop "^1.1.0" + mdast-util-from-markdown "^2.0.0" + mdast-util-to-markdown "^2.0.0" + parse-entities "^4.0.0" + stringify-entities "^4.0.0" + unist-util-stringify-position "^4.0.0" + vfile-message "^4.0.0" + +mdast-util-mdxjs-esm@^2.0.0: + version "2.0.1" + resolved "https://registry.yarnpkg.com/mdast-util-mdxjs-esm/-/mdast-util-mdxjs-esm-2.0.1.tgz#019cfbe757ad62dd557db35a695e7314bcc9fa97" + integrity sha512-EcmOpxsZ96CvlP03NghtH1EsLtr0n9Tm4lPUJUBccV9RwUOneqSycg19n5HGzCf+10LozMRSObtVr3ee1WoHtg== + dependencies: + "@types/estree-jsx" "^1.0.0" + "@types/hast" "^3.0.0" + "@types/mdast" "^4.0.0" + devlop "^1.0.0" + mdast-util-from-markdown "^2.0.0" + mdast-util-to-markdown "^2.0.0" + mdast-util-phrasing@^3.0.0: version "3.0.1" resolved "https://registry.yarnpkg.com/mdast-util-phrasing/-/mdast-util-phrasing-3.0.1.tgz#c7c21d0d435d7fb90956038f02e8702781f95463" @@ -12431,6 +12621,14 @@ mdast-util-phrasing@^3.0.0: "@types/mdast" "^3.0.0" unist-util-is "^5.0.0" +mdast-util-phrasing@^4.0.0: + version "4.1.0" + resolved "https://registry.yarnpkg.com/mdast-util-phrasing/-/mdast-util-phrasing-4.1.0.tgz#7cc0a8dec30eaf04b7b1a9661a92adb3382aa6e3" + integrity sha512-TqICwyvJJpBwvGAMZjj4J2n0X8QWp21b9l0o7eXyVJ25YNWYbJDVIyD1bZXE6WtV6RmKJVYmQAKWa0zWOABz2w== + dependencies: + "@types/mdast" "^4.0.0" + unist-util-is "^6.0.0" + mdast-util-to-hast@10.0.1: version "10.0.1" resolved "https://registry.yarnpkg.com/mdast-util-to-hast/-/mdast-util-to-hast-10.0.1.tgz#0cfc82089494c52d46eb0e3edb7a4eb2aea021eb" @@ -12459,6 +12657,21 @@ mdast-util-to-hast@^12.1.0: unist-util-position "^4.0.0" unist-util-visit "^4.0.0" +mdast-util-to-hast@^13.0.0: + version "13.2.0" + resolved "https://registry.yarnpkg.com/mdast-util-to-hast/-/mdast-util-to-hast-13.2.0.tgz#5ca58e5b921cc0a3ded1bc02eed79a4fe4fe41f4" + integrity sha512-QGYKEuUsYT9ykKBCMOEDLsU5JRObWQusAolFMeko/tYPufNkRffBAQjIE+99jbA87xv6FgmjLtwjh9wBWajwAA== + dependencies: + "@types/hast" "^3.0.0" + "@types/mdast" "^4.0.0" + "@ungap/structured-clone" "^1.0.0" + devlop "^1.0.0" + micromark-util-sanitize-uri "^2.0.0" + trim-lines "^3.0.0" + unist-util-position "^5.0.0" + unist-util-visit "^5.0.0" + vfile "^6.0.0" + mdast-util-to-markdown@^1.0.0, mdast-util-to-markdown@^1.3.0: version "1.5.0" resolved "https://registry.yarnpkg.com/mdast-util-to-markdown/-/mdast-util-to-markdown-1.5.0.tgz#c13343cb3fc98621911d33b5cd42e7d0731171c6" @@ -12473,6 +12686,21 @@ mdast-util-to-markdown@^1.0.0, mdast-util-to-markdown@^1.3.0: unist-util-visit "^4.0.0" zwitch "^2.0.0" +mdast-util-to-markdown@^2.0.0: + version "2.1.2" + resolved "https://registry.yarnpkg.com/mdast-util-to-markdown/-/mdast-util-to-markdown-2.1.2.tgz#f910ffe60897f04bb4b7e7ee434486f76288361b" + integrity sha512-xj68wMTvGXVOKonmog6LwyJKrYXZPvlwabaryTjLh9LuvovB/KAH+kvi8Gjj+7rJjsFi23nkUxRQv1KqSroMqA== + dependencies: + "@types/mdast" "^4.0.0" + "@types/unist" "^3.0.0" + longest-streak "^3.0.0" + mdast-util-phrasing "^4.0.0" + mdast-util-to-string "^4.0.0" + micromark-util-classify-character "^2.0.0" + micromark-util-decode-string "^2.0.0" + unist-util-visit "^5.0.0" + zwitch "^2.0.0" + mdast-util-to-string@^1.0.0: version "1.1.0" resolved "https://registry.yarnpkg.com/mdast-util-to-string/-/mdast-util-to-string-1.1.0.tgz#27055500103f51637bd07d01da01eb1967a43527" @@ -12490,6 +12718,13 @@ mdast-util-to-string@^3.0.0, mdast-util-to-string@^3.1.0: dependencies: "@types/mdast" "^3.0.0" +mdast-util-to-string@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/mdast-util-to-string/-/mdast-util-to-string-4.0.0.tgz#7a5121475556a04e7eddeb67b264aae79d312814" + integrity sha512-0H44vDimn51F0YwvxSJSm0eCDOJTRlmN0R1yBh4HLj9wiV1Dn0QoXGbvFAWj2hSItVTlCmBF1hqKlIyUBVFLPg== + dependencies: + "@types/mdast" "^4.0.0" + mdn-data@2.0.14: version "2.0.14" resolved "https://registry.yarnpkg.com/mdn-data/-/mdn-data-2.0.14.tgz#7113fc4281917d63ce29b43446f701e68c25ba50" @@ -12625,6 +12860,28 @@ micromark-core-commonmark@^1.0.0, micromark-core-commonmark@^1.0.1: micromark-util-types "^1.0.1" uvu "^0.5.0" +micromark-core-commonmark@^2.0.0: + version "2.0.2" + resolved "https://registry.yarnpkg.com/micromark-core-commonmark/-/micromark-core-commonmark-2.0.2.tgz#6a45bbb139e126b3f8b361a10711ccc7c6e15e93" + integrity sha512-FKjQKbxd1cibWMM1P9N+H8TwlgGgSkWZMmfuVucLCHaYqeSvJ0hFeHsIa65pA2nYbes0f8LDHPMrd9X7Ujxg9w== + dependencies: + decode-named-character-reference "^1.0.0" + devlop "^1.0.0" + micromark-factory-destination "^2.0.0" + micromark-factory-label "^2.0.0" + micromark-factory-space "^2.0.0" + micromark-factory-title "^2.0.0" + micromark-factory-whitespace "^2.0.0" + micromark-util-character "^2.0.0" + micromark-util-chunked "^2.0.0" + micromark-util-classify-character "^2.0.0" + micromark-util-html-tag-name "^2.0.0" + micromark-util-normalize-identifier "^2.0.0" + micromark-util-resolve-all "^2.0.0" + micromark-util-subtokenize "^2.0.0" + micromark-util-symbol "^2.0.0" + micromark-util-types "^2.0.0" + micromark-extension-gfm-autolink-literal@^1.0.0: version "1.0.5" resolved "https://registry.yarnpkg.com/micromark-extension-gfm-autolink-literal/-/micromark-extension-gfm-autolink-literal-1.0.5.tgz#5853f0e579bbd8ef9e39a7c0f0f27c5a063a66e7" @@ -12713,6 +12970,15 @@ micromark-factory-destination@^1.0.0: micromark-util-symbol "^1.0.0" micromark-util-types "^1.0.0" +micromark-factory-destination@^2.0.0: + version "2.0.1" + resolved "https://registry.yarnpkg.com/micromark-factory-destination/-/micromark-factory-destination-2.0.1.tgz#8fef8e0f7081f0474fbdd92deb50c990a0264639" + integrity sha512-Xe6rDdJlkmbFRExpTOmRj9N3MaWmbAgdpSrBQvCFqhezUn4AHqJHbaEnfbVYYiexVSs//tqOdY/DxhjdCiJnIA== + dependencies: + micromark-util-character "^2.0.0" + micromark-util-symbol "^2.0.0" + micromark-util-types "^2.0.0" + micromark-factory-label@^1.0.0: version "1.1.0" resolved "https://registry.yarnpkg.com/micromark-factory-label/-/micromark-factory-label-1.1.0.tgz#cc95d5478269085cfa2a7282b3de26eb2e2dec68" @@ -12723,6 +12989,16 @@ micromark-factory-label@^1.0.0: micromark-util-types "^1.0.0" uvu "^0.5.0" +micromark-factory-label@^2.0.0: + version "2.0.1" + resolved "https://registry.yarnpkg.com/micromark-factory-label/-/micromark-factory-label-2.0.1.tgz#5267efa97f1e5254efc7f20b459a38cb21058ba1" + integrity sha512-VFMekyQExqIW7xIChcXn4ok29YE3rnuyveW3wZQWWqF4Nv9Wk5rgJ99KzPvHjkmPXF93FXIbBp6YdW3t71/7Vg== + dependencies: + devlop "^1.0.0" + micromark-util-character "^2.0.0" + micromark-util-symbol "^2.0.0" + micromark-util-types "^2.0.0" + micromark-factory-space@^1.0.0: version "1.1.0" resolved "https://registry.yarnpkg.com/micromark-factory-space/-/micromark-factory-space-1.1.0.tgz#c8f40b0640a0150751d3345ed885a080b0d15faf" @@ -12731,6 +13007,14 @@ micromark-factory-space@^1.0.0: micromark-util-character "^1.0.0" micromark-util-types "^1.0.0" +micromark-factory-space@^2.0.0: + version "2.0.1" + resolved "https://registry.yarnpkg.com/micromark-factory-space/-/micromark-factory-space-2.0.1.tgz#36d0212e962b2b3121f8525fc7a3c7c029f334fc" + integrity sha512-zRkxjtBxxLd2Sc0d+fbnEunsTj46SWXgXciZmHq0kDYGnck/ZSGj9/wULTV95uoeYiK5hRXP2mJ98Uo4cq/LQg== + dependencies: + micromark-util-character "^2.0.0" + micromark-util-types "^2.0.0" + micromark-factory-title@^1.0.0: version "1.1.0" resolved "https://registry.yarnpkg.com/micromark-factory-title/-/micromark-factory-title-1.1.0.tgz#dd0fe951d7a0ac71bdc5ee13e5d1465ad7f50ea1" @@ -12741,6 +13025,16 @@ micromark-factory-title@^1.0.0: micromark-util-symbol "^1.0.0" micromark-util-types "^1.0.0" +micromark-factory-title@^2.0.0: + version "2.0.1" + resolved "https://registry.yarnpkg.com/micromark-factory-title/-/micromark-factory-title-2.0.1.tgz#237e4aa5d58a95863f01032d9ee9b090f1de6e94" + integrity sha512-5bZ+3CjhAd9eChYTHsjy6TGxpOFSKgKKJPJxr293jTbfry2KDoWkhBb6TcPVB4NmzaPhMs1Frm9AZH7OD4Cjzw== + dependencies: + micromark-factory-space "^2.0.0" + micromark-util-character "^2.0.0" + micromark-util-symbol "^2.0.0" + micromark-util-types "^2.0.0" + micromark-factory-whitespace@^1.0.0: version "1.1.0" resolved "https://registry.yarnpkg.com/micromark-factory-whitespace/-/micromark-factory-whitespace-1.1.0.tgz#798fb7489f4c8abafa7ca77eed6b5745853c9705" @@ -12751,6 +13045,16 @@ micromark-factory-whitespace@^1.0.0: micromark-util-symbol "^1.0.0" micromark-util-types "^1.0.0" +micromark-factory-whitespace@^2.0.0: + version "2.0.1" + resolved "https://registry.yarnpkg.com/micromark-factory-whitespace/-/micromark-factory-whitespace-2.0.1.tgz#06b26b2983c4d27bfcc657b33e25134d4868b0b1" + integrity sha512-Ob0nuZ3PKt/n0hORHyvoD9uZhr+Za8sFoP+OnMcnWK5lngSzALgQYKMr9RJVOWLqQYuyn6ulqGWSXdwf6F80lQ== + dependencies: + micromark-factory-space "^2.0.0" + micromark-util-character "^2.0.0" + micromark-util-symbol "^2.0.0" + micromark-util-types "^2.0.0" + micromark-util-character@^1.0.0: version "1.2.0" resolved "https://registry.yarnpkg.com/micromark-util-character/-/micromark-util-character-1.2.0.tgz#4fedaa3646db249bc58caeb000eb3549a8ca5dcc" @@ -12759,6 +13063,14 @@ micromark-util-character@^1.0.0: micromark-util-symbol "^1.0.0" micromark-util-types "^1.0.0" +micromark-util-character@^2.0.0: + version "2.1.1" + resolved "https://registry.yarnpkg.com/micromark-util-character/-/micromark-util-character-2.1.1.tgz#2f987831a40d4c510ac261e89852c4e9703ccda6" + integrity sha512-wv8tdUTJ3thSFFFJKtpYKOYiGP2+v96Hvk4Tu8KpCAsTMs6yi+nVmGh1syvSCsaxz45J6Jbw+9DD6g97+NV67Q== + dependencies: + micromark-util-symbol "^2.0.0" + micromark-util-types "^2.0.0" + micromark-util-chunked@^1.0.0: version "1.1.0" resolved "https://registry.yarnpkg.com/micromark-util-chunked/-/micromark-util-chunked-1.1.0.tgz#37a24d33333c8c69a74ba12a14651fd9ea8a368b" @@ -12766,6 +13078,13 @@ micromark-util-chunked@^1.0.0: dependencies: micromark-util-symbol "^1.0.0" +micromark-util-chunked@^2.0.0: + version "2.0.1" + resolved "https://registry.yarnpkg.com/micromark-util-chunked/-/micromark-util-chunked-2.0.1.tgz#47fbcd93471a3fccab86cff03847fc3552db1051" + integrity sha512-QUNFEOPELfmvv+4xiNg2sRYeS/P84pTW0TCgP5zc9FpXetHY0ab7SxKyAQCNCc1eK0459uoLI1y5oO5Vc1dbhA== + dependencies: + micromark-util-symbol "^2.0.0" + micromark-util-classify-character@^1.0.0: version "1.1.0" resolved "https://registry.yarnpkg.com/micromark-util-classify-character/-/micromark-util-classify-character-1.1.0.tgz#6a7f8c8838e8a120c8e3c4f2ae97a2bff9190e9d" @@ -12775,6 +13094,15 @@ micromark-util-classify-character@^1.0.0: micromark-util-symbol "^1.0.0" micromark-util-types "^1.0.0" +micromark-util-classify-character@^2.0.0: + version "2.0.1" + resolved "https://registry.yarnpkg.com/micromark-util-classify-character/-/micromark-util-classify-character-2.0.1.tgz#d399faf9c45ca14c8b4be98b1ea481bced87b629" + integrity sha512-K0kHzM6afW/MbeWYWLjoHQv1sgg2Q9EccHEDzSkxiP/EaagNzCm7T/WMKZ3rjMbvIpvBiZgwR3dKMygtA4mG1Q== + dependencies: + micromark-util-character "^2.0.0" + micromark-util-symbol "^2.0.0" + micromark-util-types "^2.0.0" + micromark-util-combine-extensions@^1.0.0: version "1.1.0" resolved "https://registry.yarnpkg.com/micromark-util-combine-extensions/-/micromark-util-combine-extensions-1.1.0.tgz#192e2b3d6567660a85f735e54d8ea6e3952dbe84" @@ -12783,6 +13111,14 @@ micromark-util-combine-extensions@^1.0.0: micromark-util-chunked "^1.0.0" micromark-util-types "^1.0.0" +micromark-util-combine-extensions@^2.0.0: + version "2.0.1" + resolved "https://registry.yarnpkg.com/micromark-util-combine-extensions/-/micromark-util-combine-extensions-2.0.1.tgz#2a0f490ab08bff5cc2fd5eec6dd0ca04f89b30a9" + integrity sha512-OnAnH8Ujmy59JcyZw8JSbK9cGpdVY44NKgSM7E9Eh7DiLS2E9RNQf0dONaGDzEG9yjEl5hcqeIsj4hfRkLH/Bg== + dependencies: + micromark-util-chunked "^2.0.0" + micromark-util-types "^2.0.0" + micromark-util-decode-numeric-character-reference@^1.0.0: version "1.1.0" resolved "https://registry.yarnpkg.com/micromark-util-decode-numeric-character-reference/-/micromark-util-decode-numeric-character-reference-1.1.0.tgz#b1e6e17009b1f20bc652a521309c5f22c85eb1c6" @@ -12790,6 +13126,13 @@ micromark-util-decode-numeric-character-reference@^1.0.0: dependencies: micromark-util-symbol "^1.0.0" +micromark-util-decode-numeric-character-reference@^2.0.0: + version "2.0.2" + resolved "https://registry.yarnpkg.com/micromark-util-decode-numeric-character-reference/-/micromark-util-decode-numeric-character-reference-2.0.2.tgz#fcf15b660979388e6f118cdb6bf7d79d73d26fe5" + integrity sha512-ccUbYk6CwVdkmCQMyr64dXz42EfHGkPQlBj5p7YVGzq8I7CtjXZJrubAYezf7Rp+bjPseiROqe7G6foFd+lEuw== + dependencies: + micromark-util-symbol "^2.0.0" + micromark-util-decode-string@^1.0.0: version "1.1.0" resolved "https://registry.yarnpkg.com/micromark-util-decode-string/-/micromark-util-decode-string-1.1.0.tgz#dc12b078cba7a3ff690d0203f95b5d5537f2809c" @@ -12800,16 +13143,36 @@ micromark-util-decode-string@^1.0.0: micromark-util-decode-numeric-character-reference "^1.0.0" micromark-util-symbol "^1.0.0" +micromark-util-decode-string@^2.0.0: + version "2.0.1" + resolved "https://registry.yarnpkg.com/micromark-util-decode-string/-/micromark-util-decode-string-2.0.1.tgz#6cb99582e5d271e84efca8e61a807994d7161eb2" + integrity sha512-nDV/77Fj6eH1ynwscYTOsbK7rR//Uj0bZXBwJZRfaLEJ1iGBR6kIfNmlNqaqJf649EP0F3NWNdeJi03elllNUQ== + dependencies: + decode-named-character-reference "^1.0.0" + micromark-util-character "^2.0.0" + micromark-util-decode-numeric-character-reference "^2.0.0" + micromark-util-symbol "^2.0.0" + micromark-util-encode@^1.0.0: version "1.1.0" resolved "https://registry.yarnpkg.com/micromark-util-encode/-/micromark-util-encode-1.1.0.tgz#92e4f565fd4ccb19e0dcae1afab9a173bbeb19a5" integrity sha512-EuEzTWSTAj9PA5GOAs992GzNh2dGQO52UvAbtSOMvXTxv3Criqb6IOzJUBCmEqrrXSblJIJBbFFv6zPxpreiJw== +micromark-util-encode@^2.0.0: + version "2.0.1" + resolved "https://registry.yarnpkg.com/micromark-util-encode/-/micromark-util-encode-2.0.1.tgz#0d51d1c095551cfaac368326963cf55f15f540b8" + integrity sha512-c3cVx2y4KqUnwopcO9b/SCdo2O67LwJJ/UyqGfbigahfegL9myoEFoDYZgkT7f36T0bLrM9hZTAaAyH+PCAXjw== + micromark-util-html-tag-name@^1.0.0: version "1.2.0" resolved "https://registry.yarnpkg.com/micromark-util-html-tag-name/-/micromark-util-html-tag-name-1.2.0.tgz#48fd7a25826f29d2f71479d3b4e83e94829b3588" integrity sha512-VTQzcuQgFUD7yYztuQFKXT49KghjtETQ+Wv/zUjGSGBioZnkA4P1XXZPT1FHeJA6RwRXSF47yvJ1tsJdoxwO+Q== +micromark-util-html-tag-name@^2.0.0: + version "2.0.1" + resolved "https://registry.yarnpkg.com/micromark-util-html-tag-name/-/micromark-util-html-tag-name-2.0.1.tgz#e40403096481986b41c106627f98f72d4d10b825" + integrity sha512-2cNEiYDhCWKI+Gs9T0Tiysk136SnR13hhO8yW6BGNyhOC4qYFnwF1nKfD3HFAIXA5c45RrIG1ub11GiXeYd1xA== + micromark-util-normalize-identifier@^1.0.0: version "1.1.0" resolved "https://registry.yarnpkg.com/micromark-util-normalize-identifier/-/micromark-util-normalize-identifier-1.1.0.tgz#7a73f824eb9f10d442b4d7f120fecb9b38ebf8b7" @@ -12817,6 +13180,13 @@ micromark-util-normalize-identifier@^1.0.0: dependencies: micromark-util-symbol "^1.0.0" +micromark-util-normalize-identifier@^2.0.0: + version "2.0.1" + resolved "https://registry.yarnpkg.com/micromark-util-normalize-identifier/-/micromark-util-normalize-identifier-2.0.1.tgz#c30d77b2e832acf6526f8bf1aa47bc9c9438c16d" + integrity sha512-sxPqmo70LyARJs0w2UclACPUUEqltCkJ6PhKdMIDuJ3gSf/Q+/GIe3WKl0Ijb/GyH9lOpUkRAO2wp0GVkLvS9Q== + dependencies: + micromark-util-symbol "^2.0.0" + micromark-util-resolve-all@^1.0.0: version "1.1.0" resolved "https://registry.yarnpkg.com/micromark-util-resolve-all/-/micromark-util-resolve-all-1.1.0.tgz#4652a591ee8c8fa06714c9b54cd6c8e693671188" @@ -12824,6 +13194,13 @@ micromark-util-resolve-all@^1.0.0: dependencies: micromark-util-types "^1.0.0" +micromark-util-resolve-all@^2.0.0: + version "2.0.1" + resolved "https://registry.yarnpkg.com/micromark-util-resolve-all/-/micromark-util-resolve-all-2.0.1.tgz#e1a2d62cdd237230a2ae11839027b19381e31e8b" + integrity sha512-VdQyxFWFT2/FGJgwQnJYbe1jjQoNTS4RjglmSjTUlpUMa95Htx9NHeYW4rGDJzbjvCsl9eLjMQwGeElsqmzcHg== + dependencies: + micromark-util-types "^2.0.0" + micromark-util-sanitize-uri@^1.0.0, micromark-util-sanitize-uri@^1.1.0: version "1.2.0" resolved "https://registry.yarnpkg.com/micromark-util-sanitize-uri/-/micromark-util-sanitize-uri-1.2.0.tgz#613f738e4400c6eedbc53590c67b197e30d7f90d" @@ -12833,6 +13210,15 @@ micromark-util-sanitize-uri@^1.0.0, micromark-util-sanitize-uri@^1.1.0: micromark-util-encode "^1.0.0" micromark-util-symbol "^1.0.0" +micromark-util-sanitize-uri@^2.0.0: + version "2.0.1" + resolved "https://registry.yarnpkg.com/micromark-util-sanitize-uri/-/micromark-util-sanitize-uri-2.0.1.tgz#ab89789b818a58752b73d6b55238621b7faa8fd7" + integrity sha512-9N9IomZ/YuGGZZmQec1MbgxtlgougxTodVwDzzEouPKo3qFWvymFHWcnDi2vzV1ff6kas9ucW+o3yzJK9YB1AQ== + dependencies: + micromark-util-character "^2.0.0" + micromark-util-encode "^2.0.0" + micromark-util-symbol "^2.0.0" + micromark-util-subtokenize@^1.0.0: version "1.1.0" resolved "https://registry.yarnpkg.com/micromark-util-subtokenize/-/micromark-util-subtokenize-1.1.0.tgz#941c74f93a93eaf687b9054aeb94642b0e92edb1" @@ -12843,16 +13229,36 @@ micromark-util-subtokenize@^1.0.0: micromark-util-types "^1.0.0" uvu "^0.5.0" +micromark-util-subtokenize@^2.0.0: + version "2.0.3" + resolved "https://registry.yarnpkg.com/micromark-util-subtokenize/-/micromark-util-subtokenize-2.0.3.tgz#70ffb99a454bd8c913c8b709c3dc97baefb65f96" + integrity sha512-VXJJuNxYWSoYL6AJ6OQECCFGhIU2GGHMw8tahogePBrjkG8aCCas3ibkp7RnVOSTClg2is05/R7maAhF1XyQMg== + dependencies: + devlop "^1.0.0" + micromark-util-chunked "^2.0.0" + micromark-util-symbol "^2.0.0" + micromark-util-types "^2.0.0" + micromark-util-symbol@^1.0.0: version "1.1.0" resolved "https://registry.yarnpkg.com/micromark-util-symbol/-/micromark-util-symbol-1.1.0.tgz#813cd17837bdb912d069a12ebe3a44b6f7063142" integrity sha512-uEjpEYY6KMs1g7QfJ2eX1SQEV+ZT4rUD3UcF6l57acZvLNK7PBZL+ty82Z1qhK1/yXIY4bdx04FKMgR0g4IAag== +micromark-util-symbol@^2.0.0: + version "2.0.1" + resolved "https://registry.yarnpkg.com/micromark-util-symbol/-/micromark-util-symbol-2.0.1.tgz#e5da494e8eb2b071a0d08fb34f6cefec6c0a19b8" + integrity sha512-vs5t8Apaud9N28kgCrRUdEed4UJ+wWNvicHLPxCa9ENlYuAY31M0ETy5y1vA33YoNPDFTghEbnh6efaE8h4x0Q== + micromark-util-types@^1.0.0, micromark-util-types@^1.0.1: version "1.1.0" resolved "https://registry.yarnpkg.com/micromark-util-types/-/micromark-util-types-1.1.0.tgz#e6676a8cae0bb86a2171c498167971886cb7e283" integrity sha512-ukRBgie8TIAcacscVHSiddHjO4k/q3pnedmzMQ4iwDcK0FtFCohKOlFbaOL/mPgfnPsL3C1ZyxJa4sbWrBl3jg== +micromark-util-types@^2.0.0: + version "2.0.1" + resolved "https://registry.yarnpkg.com/micromark-util-types/-/micromark-util-types-2.0.1.tgz#a3edfda3022c6c6b55bfb049ef5b75d70af50709" + integrity sha512-534m2WhVTddrcKVepwmVEVnUAmtrx9bfIjNoQHRqfnvdaHQiFytEhJoTgpWJvDEXCO5gLTQh3wYC1PgOJA4NSQ== + micromark@^3.0.0: version "3.2.0" resolved "https://registry.yarnpkg.com/micromark/-/micromark-3.2.0.tgz#1af9fef3f995ea1ea4ac9c7e2f19c48fd5c006e9" @@ -12876,6 +13282,29 @@ micromark@^3.0.0: micromark-util-types "^1.0.1" uvu "^0.5.0" +micromark@^4.0.0: + version "4.0.1" + resolved "https://registry.yarnpkg.com/micromark/-/micromark-4.0.1.tgz#294c2f12364759e5f9e925a767ae3dfde72223ff" + integrity sha512-eBPdkcoCNvYcxQOAKAlceo5SNdzZWfF+FcSupREAzdAh9rRmE239CEQAiTwIgblwnoM8zzj35sZ5ZwvSEOF6Kw== + dependencies: + "@types/debug" "^4.0.0" + debug "^4.0.0" + decode-named-character-reference "^1.0.0" + devlop "^1.0.0" + micromark-core-commonmark "^2.0.0" + micromark-factory-space "^2.0.0" + micromark-util-character "^2.0.0" + micromark-util-chunked "^2.0.0" + micromark-util-combine-extensions "^2.0.0" + micromark-util-decode-numeric-character-reference "^2.0.0" + micromark-util-encode "^2.0.0" + micromark-util-normalize-identifier "^2.0.0" + micromark-util-resolve-all "^2.0.0" + micromark-util-sanitize-uri "^2.0.0" + micromark-util-subtokenize "^2.0.0" + micromark-util-symbol "^2.0.0" + micromark-util-types "^2.0.0" + micromark@~2.11.0: version "2.11.4" resolved "https://registry.yarnpkg.com/micromark/-/micromark-2.11.4.tgz#d13436138eea826383e822449c9a5c50ee44665a" @@ -15431,6 +15860,22 @@ react-markdown@^5.0.3: unist-util-visit "^2.0.0" xtend "^4.0.1" +react-markdown@^9.0.1: + version "9.0.1" + resolved "https://registry.yarnpkg.com/react-markdown/-/react-markdown-9.0.1.tgz#c05ddbff67fd3b3f839f8c648e6fb35d022397d1" + integrity sha512-186Gw/vF1uRkydbsOIkcGXw7aHq0sZOCRFFjGrr7b9+nVZg4UfA4enXCaxm4fUzecU38sWfrNDitGhshuU7rdg== + dependencies: + "@types/hast" "^3.0.0" + devlop "^1.0.0" + hast-util-to-jsx-runtime "^2.0.0" + html-url-attributes "^3.0.0" + mdast-util-to-hast "^13.0.0" + remark-parse "^11.0.0" + remark-rehype "^11.0.0" + unified "^11.0.0" + unist-util-visit "^5.0.0" + vfile "^6.0.0" + react-markdown@~8.0.0: version "8.0.7" resolved "https://registry.yarnpkg.com/react-markdown/-/react-markdown-8.0.7.tgz#c8dbd1b9ba5f1c5e7e5f2a44de465a3caafdf89b" @@ -15956,6 +16401,16 @@ remark-parse@^10.0.0: mdast-util-from-markdown "^1.0.0" unified "^10.0.0" +remark-parse@^11.0.0: + version "11.0.0" + resolved "https://registry.yarnpkg.com/remark-parse/-/remark-parse-11.0.0.tgz#aa60743fcb37ebf6b069204eb4da304e40db45a1" + integrity sha512-FCxlKLNGknS5ba/1lmpYijMUzX2esxW5xQqjWxw2eHFfS2MSdaHVINFmhjo+qN1WhZhNimq0dZATN9pH0IDrpA== + dependencies: + "@types/mdast" "^4.0.0" + mdast-util-from-markdown "^2.0.0" + micromark-util-types "^2.0.0" + unified "^11.0.0" + remark-parse@^9.0.0: version "9.0.0" resolved "https://registry.yarnpkg.com/remark-parse/-/remark-parse-9.0.0.tgz#4d20a299665880e4f4af5d90b7c7b8a935853640" @@ -15973,6 +16428,17 @@ remark-rehype@^10.0.0: mdast-util-to-hast "^12.1.0" unified "^10.0.0" +remark-rehype@^11.0.0: + version "11.1.1" + resolved "https://registry.yarnpkg.com/remark-rehype/-/remark-rehype-11.1.1.tgz#f864dd2947889a11997c0a2667cd6b38f685bca7" + integrity sha512-g/osARvjkBXb6Wo0XvAeXQohVta8i84ACbenPpoSsxTOQH/Ae0/RGP4WZgnMH5pMLpsj4FG7OHmcIcXxpza8eQ== + dependencies: + "@types/hast" "^3.0.0" + "@types/mdast" "^4.0.0" + mdast-util-to-hast "^13.0.0" + unified "^11.0.0" + vfile "^6.0.0" + remark-slug@^6.0.0: version "6.1.0" resolved "https://registry.yarnpkg.com/remark-slug/-/remark-slug-6.1.0.tgz#0503268d5f0c4ecb1f33315c00465ccdd97923ce" @@ -16140,9 +16606,9 @@ revalidator@0.1.x: integrity sha512-xcBILK2pA9oh4SiinPEZfhP8HfrB/ha+a2fTMyl7Om2WjlDVrOQy99N2MXXlUHqGJz4qEu2duXxHJjDWuK/0xg== rfc4648@^1.5.2: - version "1.5.3" - resolved "https://registry.yarnpkg.com/rfc4648/-/rfc4648-1.5.3.tgz#e62b81736c10361ca614efe618a566e93d0b41c0" - integrity sha512-MjOWxM065+WswwnmNONOT+bD1nXzY9Km6u3kzvnx8F8/HXGZdz3T6e6vZJ8Q/RIMUSp/nxqjH3GwvJDy8ijeQQ== + version "1.5.4" + resolved "https://registry.yarnpkg.com/rfc4648/-/rfc4648-1.5.4.tgz#1174c0afba72423a0b70c386ecfeb80aa61b05ca" + integrity sha512-rRg/6Lb+IGfJqO05HZkN50UtY7K/JhxJag1kP23+zyMfrvoB0B7RWv06MbOzoc79RgCdNTiUaNsTT1AJZ7Z+cg== rimraf@2.x.x, rimraf@^2.5.4, rimraf@^2.6.3: version "2.7.1" @@ -17065,7 +17531,16 @@ string-natural-compare@^3.0.1: resolved "https://registry.yarnpkg.com/string-natural-compare/-/string-natural-compare-3.0.1.tgz#7a42d58474454963759e8e8b7ae63d71c1e7fdf4" integrity sha512-n3sPwynL1nwKi3WJ6AIsClwBMa0zTi54fn2oLU6ndfTSIO05xaznjSf15PcBZU6FNWbmN5Q6cxT4V5hGvB4taw== -"string-width-cjs@npm:string-width@^4.2.0", "string-width@^1.0.2 || 2 || 3 || 4", string-width@^4.0.0, string-width@^4.1.0, string-width@^4.2.0, string-width@^4.2.2, 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== + dependencies: + emoji-regex "^8.0.0" + is-fullwidth-code-point "^3.0.0" + strip-ansi "^6.0.1" + +"string-width@^1.0.2 || 2 || 3 || 4", string-width@^4.0.0, string-width@^4.1.0, string-width@^4.2.0, string-width@^4.2.2, 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== @@ -17197,7 +17672,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.0, 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== @@ -17211,6 +17686,13 @@ strip-ansi@^3.0.1: dependencies: ansi-regex "^2.0.0" +strip-ansi@^6.0.0, strip-ansi@^6.0.1: + version "6.0.1" + resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-6.0.1.tgz#9e26c63d30f53443e9489495b2105d37b67a85d9" + integrity sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A== + 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" @@ -17316,6 +17798,13 @@ style-to-object@^0.4.0: dependencies: inline-style-parser "0.1.1" +style-to-object@^1.0.0: + version "1.0.8" + resolved "https://registry.yarnpkg.com/style-to-object/-/style-to-object-1.0.8.tgz#67a29bca47eaa587db18118d68f9d95955e81292" + integrity sha512-xT47I/Eo0rwJmaXC4oilDGDWLohVhR6o/xAQcPQN8q6QBuZVL8qMYL85kLmST5cPjAorwvqIA4qXTRQoYHaL6g== + dependencies: + inline-style-parser "0.2.4" + stylehacks@^5.1.1: version "5.1.1" resolved "https://registry.yarnpkg.com/stylehacks/-/stylehacks-5.1.1.tgz#7934a34eb59d7152149fa69d6e9e56f2fc34bcc9" @@ -17837,16 +18326,16 @@ ts-pnp@^1.1.6: resolved "https://registry.yarnpkg.com/ts-pnp/-/ts-pnp-1.2.0.tgz#a500ad084b0798f1c3071af391e65912c86bca92" integrity sha512-csd+vJOb/gkzvcCHgTGSChYpy5f1/XKNsmvBGO4JXS+z1v2HobugDz4s1IeFXM3wZB44uczs+eazB5Q/ccdhQw== -tsafe@^1.6.0, tsafe@^1.6.5, tsafe@^1.6.6, tsafe@^1.7.2, tsafe@^1.8.4: - version "1.8.4" - resolved "https://registry.yarnpkg.com/tsafe/-/tsafe-1.8.4.tgz#ef2ecb21829eb5003d931de6a80b34303ed907ee" - integrity sha512-k1myNdDFEbqfq2hS7ln4qlgpvRlJq3wkOawQWieqVHu/K7dX+qQHTDkdzfvBBPNFrkIM7S/846JD6B3fm6MWHQ== - -tsafe@^1.8.5: +tsafe@^1.6.0, tsafe@^1.8.5: version "1.8.5" resolved "https://registry.yarnpkg.com/tsafe/-/tsafe-1.8.5.tgz#cdf9fa3111974ac480d7ee519f8241815e5d22ea" integrity sha512-LFWTWQrW6rwSY+IBNFl2ridGfUzVsPwrZ26T4KUJww/py8rzaQ/SY+MIz6YROozpUCaRcuISqagmlwub9YT9kw== +tsafe@^1.6.5, tsafe@^1.6.6, tsafe@^1.7.2, tsafe@^1.8.4: + version "1.8.4" + resolved "https://registry.yarnpkg.com/tsafe/-/tsafe-1.8.4.tgz#ef2ecb21829eb5003d931de6a80b34303ed907ee" + integrity sha512-k1myNdDFEbqfq2hS7ln4qlgpvRlJq3wkOawQWieqVHu/K7dX+qQHTDkdzfvBBPNFrkIM7S/846JD6B3fm6MWHQ== + tsconfig-paths@^3.15.0: version "3.15.0" resolved "https://registry.yarnpkg.com/tsconfig-paths/-/tsconfig-paths-3.15.0.tgz#5299ec605e55b1abb23ec939ef15edaf483070d4" @@ -18176,6 +18665,19 @@ unified@^10.0.0, unified@^10.1.2, unified@~10.1.1: trough "^2.0.0" vfile "^5.0.0" +unified@^11.0.0: + version "11.0.5" + resolved "https://registry.yarnpkg.com/unified/-/unified-11.0.5.tgz#f66677610a5c0a9ee90cab2b8d4d66037026d9e1" + integrity sha512-xKvGhPWw3k84Qjh8bI3ZeJjqnyadK+GEFtazSfZv/rKeTkTjOJho6mFqh2SM96iIcZokxiOpg78GazTSg8+KHA== + dependencies: + "@types/unist" "^3.0.0" + bail "^2.0.0" + devlop "^1.0.0" + extend "^3.0.0" + is-plain-obj "^4.0.0" + trough "^2.0.0" + vfile "^6.0.0" + unified@^9.0.0: version "9.2.2" resolved "https://registry.yarnpkg.com/unified/-/unified-9.2.2.tgz#67649a1abfc3ab85d2969502902775eb03146975" @@ -18276,6 +18778,13 @@ unist-util-is@^5.0.0: dependencies: "@types/unist" "^2.0.0" +unist-util-is@^6.0.0: + version "6.0.0" + resolved "https://registry.yarnpkg.com/unist-util-is/-/unist-util-is-6.0.0.tgz#b775956486aff107a9ded971d996c173374be424" + integrity sha512-2qCTHimwdxLfz+YzdGfkqNlH0tLi9xjTnHddPmJwtIG9MGsdbutfTc4P+haPD7l7Cjxf/WZj+we5qfVPvvxfYw== + dependencies: + "@types/unist" "^3.0.0" + unist-util-position@^3.0.0: version "3.1.0" resolved "https://registry.yarnpkg.com/unist-util-position/-/unist-util-position-3.1.0.tgz#1c42ee6301f8d52f47d14f62bbdb796571fa2d47" @@ -18288,6 +18797,13 @@ unist-util-position@^4.0.0: dependencies: "@types/unist" "^2.0.0" +unist-util-position@^5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/unist-util-position/-/unist-util-position-5.0.0.tgz#678f20ab5ca1207a97d7ea8a388373c9cf896be4" + integrity sha512-fucsC7HjXvkB5R3kTCO7kUjRdrS0BJt3M/FPxmHMBOm8JQi2BsHAHFsy27E0EolP8rp0NzXsJ+jNPyDWvOJZPA== + dependencies: + "@types/unist" "^3.0.0" + unist-util-remove-position@^2.0.0: version "2.0.1" resolved "https://registry.yarnpkg.com/unist-util-remove-position/-/unist-util-remove-position-2.0.1.tgz#5d19ca79fdba712301999b2b73553ca8f3b352cc" @@ -18316,6 +18832,13 @@ unist-util-stringify-position@^3.0.0: dependencies: "@types/unist" "^2.0.0" +unist-util-stringify-position@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/unist-util-stringify-position/-/unist-util-stringify-position-4.0.0.tgz#449c6e21a880e0855bf5aabadeb3a740314abac2" + integrity sha512-0ASV06AAoKCDkS2+xw5RXJywruurpbC4JZSm7nr7MOt1ojAzvyyaO+UxZf18j8FCF6kmzCZKcAgN/yu2gm2XgQ== + dependencies: + "@types/unist" "^3.0.0" + unist-util-visit-parents@1.1.2: version "1.1.2" resolved "https://registry.yarnpkg.com/unist-util-visit-parents/-/unist-util-visit-parents-1.1.2.tgz#f6e3afee8bdbf961c0e6f028ea3c0480028c3d06" @@ -18337,6 +18860,14 @@ unist-util-visit-parents@^5.0.0, unist-util-visit-parents@^5.1.1: "@types/unist" "^2.0.0" unist-util-is "^5.0.0" +unist-util-visit-parents@^6.0.0: + version "6.0.1" + resolved "https://registry.yarnpkg.com/unist-util-visit-parents/-/unist-util-visit-parents-6.0.1.tgz#4d5f85755c3b8f0dc69e21eca5d6d82d22162815" + integrity sha512-L/PqWzfTP9lzzEa6CKs0k2nARxTdZduw3zyh8d2NVBnsyvHjSX4TWse388YrrQKbvI8w20fGjGlhgT96WwKykw== + dependencies: + "@types/unist" "^3.0.0" + unist-util-is "^6.0.0" + unist-util-visit@2.0.3, unist-util-visit@^2.0.0: version "2.0.3" resolved "https://registry.yarnpkg.com/unist-util-visit/-/unist-util-visit-2.0.3.tgz#c3703893146df47203bb8a9795af47d7b971208c" @@ -18355,6 +18886,15 @@ unist-util-visit@^4.0.0, unist-util-visit@^4.1.0, unist-util-visit@^4.1.2, unist unist-util-is "^5.0.0" unist-util-visit-parents "^5.1.1" +unist-util-visit@^5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/unist-util-visit/-/unist-util-visit-5.0.0.tgz#a7de1f31f72ffd3519ea71814cccf5fd6a9217d6" + integrity sha512-MR04uvD+07cwl/yhVuVWAtw+3GOR/knlL55Nd/wAdblk27GCVt3lqpTivy/tkJcZoNPzTwS1Y+KMojlLDhoTzg== + dependencies: + "@types/unist" "^3.0.0" + unist-util-is "^6.0.0" + unist-util-visit-parents "^6.0.0" + universal-user-agent@^6.0.0: version "6.0.1" resolved "https://registry.yarnpkg.com/universal-user-agent/-/universal-user-agent-6.0.1.tgz#15f20f55da3c930c57bddbf1734c6654d5fd35aa" @@ -18604,6 +19144,14 @@ vfile-message@^3.0.0: "@types/unist" "^2.0.0" unist-util-stringify-position "^3.0.0" +vfile-message@^4.0.0: + version "4.0.2" + resolved "https://registry.yarnpkg.com/vfile-message/-/vfile-message-4.0.2.tgz#c883c9f677c72c166362fd635f21fc165a7d1181" + integrity sha512-jRDZ1IMLttGj41KcZvlrYAaI3CfqpLpfpf+Mfig13viT6NKvRzWZ+lXz0Y5D60w6uJIBAOGq9mSHf0gktF0duw== + dependencies: + "@types/unist" "^3.0.0" + unist-util-stringify-position "^4.0.0" + vfile@^4.0.0: version "4.2.1" resolved "https://registry.yarnpkg.com/vfile/-/vfile-4.2.1.tgz#03f1dce28fc625c625bc6514350fbdb00fa9e624" @@ -18624,6 +19172,14 @@ vfile@^5.0.0: unist-util-stringify-position "^3.0.0" vfile-message "^3.0.0" +vfile@^6.0.0: + version "6.0.3" + resolved "https://registry.yarnpkg.com/vfile/-/vfile-6.0.3.tgz#3652ab1c496531852bf55a6bac57af981ebc38ab" + integrity sha512-KzIbH/9tXat2u30jf+smMwFCsno4wHVdNmzFyL+T/L3UGqqk6JKfVqOFOZEpZSHADH1k40ab6NUIXZq422ov3Q== + dependencies: + "@types/unist" "^3.0.0" + vfile-message "^4.0.0" + vite-node@1.6.0: version "1.6.0" resolved "https://registry.yarnpkg.com/vite-node/-/vite-node-1.6.0.tgz#2c7e61129bfecc759478fa592754fd9704aaba7f" @@ -19344,7 +19900,16 @@ worker-rpc@^0.1.0: dependencies: microevent.ts "~0.1.1" -"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== + dependencies: + ansi-styles "^4.0.0" + string-width "^4.1.0" + strip-ansi "^6.0.0" + +wrap-ansi@^7.0.0: version "7.0.0" resolved "https://registry.yarnpkg.com/wrap-ansi/-/wrap-ansi-7.0.0.tgz#67e145cff510a6a6984bdf1152911d69d2eb9e43" integrity sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q== @@ -19513,7 +20078,12 @@ yocto-queue@^1.0.0: resolved "https://registry.yarnpkg.com/yocto-queue/-/yocto-queue-1.1.1.tgz#fef65ce3ac9f8a32ceac5a634f74e17e5b232110" integrity sha512-b4JR1PFR10y1mKjhHY9LaGo6tmrgjit7hxVIeAmyMw3jegXR4dhYqLaQF5zMXZxY7tLpMyJeLjr1C4rLmkVe8g== -zod@^3.17.10, zod@^3.21.4: +zod@^3.17.10: + version "3.24.1" + resolved "https://registry.yarnpkg.com/zod/-/zod-3.24.1.tgz#27445c912738c8ad1e9de1bea0359fa44d9d35ee" + integrity sha512-muH7gBL9sI1nciMZV67X5fTKKBLtwpZ5VBp1vsOQzj1MhrBZ4wlVCm3gedKZWLp0Oyel8sIGfeiz54Su+OVT+A== + +zod@^3.21.4: version "3.23.8" resolved "https://registry.yarnpkg.com/zod/-/zod-3.23.8.tgz#e37b957b5d52079769fb8097099b592f0ef4067d" integrity sha512-XBx9AXhXktjUqnepgTiE5flcKIYWi/rme0Eaj+5Y0lftuGBq+jyRu/md4WnuxqgP1ubdpNCsYEYPxrzVHD8d6g==