From fb8c453e599e76e6e92e31ddffec8056a79f26ac Mon Sep 17 00:00:00 2001 From: Anthony LC Date: Wed, 27 Nov 2024 11:31:57 +0100 Subject: [PATCH 1/4] =?UTF-8?q?=E2=99=BB=EF=B8=8F(frontend)=20add=20hooks?= =?UTF-8?q?=20useUploadFile?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Move upload file logic to hooks useUploadFile. It will be more readable and easy to reuse. --- .../doc-editor/components/BlockNoteEditor.tsx | 31 +++------------- .../features/docs/doc-editor/hook/index.ts | 2 ++ .../docs/doc-editor/hook/useUploadFile.tsx | 35 +++++++++++++++++++ 3 files changed, 42 insertions(+), 26 deletions(-) create mode 100644 src/frontend/apps/impress/src/features/docs/doc-editor/hook/index.ts create mode 100644 src/frontend/apps/impress/src/features/docs/doc-editor/hook/useUploadFile.tsx diff --git a/src/frontend/apps/impress/src/features/docs/doc-editor/components/BlockNoteEditor.tsx b/src/frontend/apps/impress/src/features/docs/doc-editor/components/BlockNoteEditor.tsx index d0e741ca3a..4fd411b961 100644 --- a/src/frontend/apps/impress/src/features/docs/doc-editor/components/BlockNoteEditor.tsx +++ b/src/frontend/apps/impress/src/features/docs/doc-editor/components/BlockNoteEditor.tsx @@ -4,16 +4,14 @@ import { BlockNoteView } from '@blocknote/mantine'; import '@blocknote/mantine/style.css'; import { useCreateBlockNote } from '@blocknote/react'; import { HocuspocusProvider } from '@hocuspocus/provider'; -import { t } from 'i18next'; -import React, { useCallback, useEffect } from 'react'; +import React, { useEffect } from 'react'; import { useTranslation } from 'react-i18next'; import { Box, TextErrors } from '@/components'; import { useAuthStore } from '@/core/auth'; -import { useMediaUrl } from '@/core/config'; import { Doc } from '@/features/docs/doc-management'; -import { useCreateDocAttachment } from '../api/useCreateDocUpload'; +import { useUploadFile } from '../hook'; import useSaveDoc from '../hook/useSaveDoc'; import { useEditorStore, useHeadingStore } from '../stores'; import { randomColor } from '../utils'; @@ -87,33 +85,14 @@ export const BlockNoteEditor = ({ const isVersion = doc.id !== storeId; const { userData } = useAuthStore(); const { setEditor } = useEditorStore(); - const mediaUrl = useMediaUrl(); - + const { t } = useTranslation(); const readOnly = !doc.abilities.partial_update || isVersion; useSaveDoc(doc.id, provider.document, !readOnly); - const { - mutateAsync: createDocAttachment, - isError: isErrorAttachment, - error: errorAttachment, - } = useCreateDocAttachment(); const { setHeadings, resetHeadings } = useHeadingStore(); const { i18n } = useTranslation(); const lang = i18n.language; - const uploadFile = useCallback( - async (file: File) => { - const body = new FormData(); - body.append('file', file); - - const ret = await createDocAttachment({ - docId: doc.id, - body, - }); - - return `${mediaUrl}${ret.file}`; - }, - [createDocAttachment, doc.id, mediaUrl], - ); + const { uploadFile, errorAttachment } = useUploadFile(doc.id); const editor = useCreateBlockNote( { @@ -153,7 +132,7 @@ export const BlockNoteEditor = ({ return ( - {isErrorAttachment && ( + {errorAttachment && ( { + const mediaUrl = useMediaUrl(); + const { + mutateAsync: createDocAttachment, + isError: isErrorAttachment, + error: errorAttachment, + } = useCreateDocAttachment(); + + const uploadFile = useCallback( + async (file: File) => { + const body = new FormData(); + body.append('file', file); + + const ret = await createDocAttachment({ + docId, + body, + }); + + return `${mediaUrl}${ret.file}`; + }, + [createDocAttachment, docId, mediaUrl], + ); + + return { + uploadFile, + isErrorAttachment, + errorAttachment, + }; +}; From dcccfca3cccd9736e465e7c971f67e7b3bfe526b Mon Sep 17 00:00:00 2001 From: Anthony LC Date: Wed, 27 Nov 2024 11:35:49 +0100 Subject: [PATCH 2/4] =?UTF-8?q?=F0=9F=90=9B(frontend)=20use=20hook=20useTr?= =?UTF-8?q?anslation?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Sentry highlitghted a few errors about the function "t" not being defined. Better to get it from the hook useTranslation. --- .../src/features/docs/doc-header/components/ModalExport.tsx | 3 ++- .../features/docs/doc-management/components/ModalRemoveDoc.tsx | 3 ++- .../src/features/docs/doc-management/components/ModalShare.tsx | 3 ++- .../features/docs/doc-versioning/components/ModalVersion.tsx | 3 ++- .../features/docs/doc-versioning/components/VersionItem.tsx | 3 ++- 5 files changed, 10 insertions(+), 5 deletions(-) diff --git a/src/frontend/apps/impress/src/features/docs/doc-header/components/ModalExport.tsx b/src/frontend/apps/impress/src/features/docs/doc-header/components/ModalExport.tsx index b4507f8e1f..240ca6a503 100644 --- a/src/frontend/apps/impress/src/features/docs/doc-header/components/ModalExport.tsx +++ b/src/frontend/apps/impress/src/features/docs/doc-header/components/ModalExport.tsx @@ -10,8 +10,8 @@ import { VariantType, useToastProvider, } from '@openfun/cunningham-react'; -import { t } from 'i18next'; import { useEffect, useMemo, useState } from 'react'; +import { useTranslation } from 'react-i18next'; import { Box, Text } from '@/components'; import { useEditorStore } from '@/features/docs/doc-editor'; @@ -27,6 +27,7 @@ interface ModalPDFProps { } export const ModalPDF = ({ onClose, doc }: ModalPDFProps) => { + const { t } = useTranslation(); const { data: templates } = useTemplates({ ordering: TemplatesOrdering.BY_CREATED_ON_DESC, }); diff --git a/src/frontend/apps/impress/src/features/docs/doc-management/components/ModalRemoveDoc.tsx b/src/frontend/apps/impress/src/features/docs/doc-management/components/ModalRemoveDoc.tsx index 6b341b70bb..3841d503e0 100644 --- a/src/frontend/apps/impress/src/features/docs/doc-management/components/ModalRemoveDoc.tsx +++ b/src/frontend/apps/impress/src/features/docs/doc-management/components/ModalRemoveDoc.tsx @@ -6,8 +6,8 @@ import { VariantType, useToastProvider, } from '@openfun/cunningham-react'; -import { t } from 'i18next'; import { useRouter } from 'next/router'; +import { useTranslation } from 'react-i18next'; import { Box, Text, TextErrors } from '@/components'; import { useCunninghamTheme } from '@/cunningham/'; @@ -22,6 +22,7 @@ interface ModalRemoveDocProps { } export const ModalRemoveDoc = ({ onClose, doc }: ModalRemoveDocProps) => { + const { t } = useTranslation(); const { colorsTokens } = useCunninghamTheme(); const { toast } = useToastProvider(); const { push } = useRouter(); diff --git a/src/frontend/apps/impress/src/features/docs/doc-management/components/ModalShare.tsx b/src/frontend/apps/impress/src/features/docs/doc-management/components/ModalShare.tsx index 278d9fb1e4..f55c97f2b8 100644 --- a/src/frontend/apps/impress/src/features/docs/doc-management/components/ModalShare.tsx +++ b/src/frontend/apps/impress/src/features/docs/doc-management/components/ModalShare.tsx @@ -3,7 +3,7 @@ import { VariantType, useToastProvider, } from '@openfun/cunningham-react'; -import { t } from 'i18next'; +import { useTranslation } from 'react-i18next'; import { createGlobalStyle } from 'styled-components'; import { Box, Card, IconBG, SideModal, Text } from '@/components'; @@ -44,6 +44,7 @@ interface ModalShareProps { } export const ModalShare = ({ onClose, doc }: ModalShareProps) => { + const { t } = useTranslation(); const { isMobile, isSmallMobile } = useResponsiveStore(); const width = isSmallMobile ? '100vw' : isMobile ? '90vw' : '70vw'; const { toast } = useToastProvider(); diff --git a/src/frontend/apps/impress/src/features/docs/doc-versioning/components/ModalVersion.tsx b/src/frontend/apps/impress/src/features/docs/doc-versioning/components/ModalVersion.tsx index c1046176d8..7bc4504696 100644 --- a/src/frontend/apps/impress/src/features/docs/doc-versioning/components/ModalVersion.tsx +++ b/src/frontend/apps/impress/src/features/docs/doc-versioning/components/ModalVersion.tsx @@ -6,8 +6,8 @@ import { VariantType, useToastProvider, } from '@openfun/cunningham-react'; -import { t } from 'i18next'; import { useRouter } from 'next/router'; +import { useTranslation } from 'react-i18next'; import * as Y from 'yjs'; import { Box, Text } from '@/components'; @@ -30,6 +30,7 @@ export const ModalVersion = ({ docId, versionId, }: ModalVersionProps) => { + const { t } = useTranslation(); const { toast } = useToastProvider(); const { push } = useRouter(); const { providers } = useDocStore(); diff --git a/src/frontend/apps/impress/src/features/docs/doc-versioning/components/VersionItem.tsx b/src/frontend/apps/impress/src/features/docs/doc-versioning/components/VersionItem.tsx index 5dcf0e9f15..626d6ff1ae 100644 --- a/src/frontend/apps/impress/src/features/docs/doc-versioning/components/VersionItem.tsx +++ b/src/frontend/apps/impress/src/features/docs/doc-versioning/components/VersionItem.tsx @@ -1,6 +1,6 @@ import { Button } from '@openfun/cunningham-react'; -import { t } from 'i18next'; import React, { PropsWithChildren, useState } from 'react'; +import { useTranslation } from 'react-i18next'; import { Box, DropButton, IconOptions, StyledLink, Text } from '@/components'; import { useCunninghamTheme } from '@/cunningham'; @@ -25,6 +25,7 @@ export const VersionItem = ({ link, isActive, }: VersionItemProps) => { + const { t } = useTranslation(); const { colorsTokens } = useCunninghamTheme(); const [isDropOpen, setIsDropOpen] = useState(false); const [isModalVersionOpen, setIsModalVersionOpen] = useState(false); From b214168fe8606acdda56aa96f604a2a051a5687f Mon Sep 17 00:00:00 2001 From: Anthony LC Date: Wed, 27 Nov 2024 15:44:42 +0100 Subject: [PATCH 3/4] =?UTF-8?q?=F0=9F=90=9B(frontend)=20link=20not=20click?= =?UTF-8?q?able=20and=20flickering=20firefox?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit The link in the read mode was not clickable anymore, it was due to a attempt to not display the cursor of anonymous users. We changes the way to do it by rendering our own cursor, when a user is anonymous we don't render the cursor. By rendering our own cursor we fixed another problem, the cursor was flickering when the user was typing at the end of the line on the firefox browser. --- CHANGELOG.md | 4 ++ .../doc-editor/components/BlockNoteEditor.tsx | 45 ++++++++++++++----- 2 files changed, 37 insertions(+), 12 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 86a6574dd2..9120a9e834 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -9,6 +9,10 @@ and this project adheres to ## [Unreleased] +## Fixed + +🐛(frontend) link not clickable and flickering firefox #457 + ## [1.8.0] - 2024-11-25 diff --git a/src/frontend/apps/impress/src/features/docs/doc-editor/components/BlockNoteEditor.tsx b/src/frontend/apps/impress/src/features/docs/doc-editor/components/BlockNoteEditor.tsx index 4fd411b961..8c04127b8a 100644 --- a/src/frontend/apps/impress/src/features/docs/doc-editor/components/BlockNoteEditor.tsx +++ b/src/frontend/apps/impress/src/features/docs/doc-editor/components/BlockNoteEditor.tsx @@ -24,17 +24,8 @@ const cssEditor = (readonly: boolean) => ` }; & .bn-editor { padding-right: 30px; - ${ - readonly && - ` - padding-left: 30px; - pointer-events: none; - ` - } + ${readonly && `padding-left: 30px;`} }; - & .collaboration-cursor__caret.ProseMirror-widget{ - word-wrap: initial; - } & .bn-inline-content code { background-color: gainsboro; padding: 2px; @@ -94,20 +85,50 @@ export const BlockNoteEditor = ({ const { uploadFile, errorAttachment } = useUploadFile(doc.id); + const collabName = + userData?.full_name || + userData?.email || + (readOnly ? 'Reader' : t('Anonymous')); + const editor = useCreateBlockNote( { collaboration: { provider, fragment: provider.document.getXmlFragment('document-store'), user: { - name: userData?.full_name || userData?.email || t('Anonymous'), + name: collabName, color: randomColor(), }, + /** + * We re-use the blocknote code to render the cursor but we: + * - fix rendering issue with Firefox + * - We don't want to show the cursor when anonymous users + */ + renderCursor: (user: { color: string; name: string }) => { + const cursor = document.createElement('span'); + + if (user.name === 'Reader') { + return cursor; + } + + cursor.classList.add('collaboration-cursor__caret'); + cursor.setAttribute('style', `border-color: ${user.color}`); + + const label = document.createElement('span'); + + label.classList.add('collaboration-cursor__label'); + label.setAttribute('style', `background-color: ${user.color}`); + label.insertBefore(document.createTextNode(user.name), null); + + cursor.insertBefore(label, null); + + return cursor; + }, }, dictionary: locales[lang as keyof typeof locales] as Dictionary, uploadFile, }, - [lang, provider, uploadFile, userData?.email, userData?.full_name], + [collabName, lang, provider, uploadFile], ); useEffect(() => { From c4f51c0020d46372e942d4972f2b87df3fdd0494 Mon Sep 17 00:00:00 2001 From: Anthony LC Date: Wed, 27 Nov 2024 16:20:58 +0100 Subject: [PATCH 4/4] =?UTF-8?q?=E2=AC=87=EF=B8=8F(SW)=20workbox-webpack-pl?= =?UTF-8?q?ugin=20to=207.1.0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit A recent update to the workbox-webpack-plugin package seems to introduce strange behavior. Better to downgrade in waiting that it is more stable. --- src/frontend/apps/impress/package.json | 2 +- src/frontend/yarn.lock | 224 ++++++++++++------------- 2 files changed, 113 insertions(+), 113 deletions(-) diff --git a/src/frontend/apps/impress/package.json b/src/frontend/apps/impress/package.json index 7cdb3941e1..c6218d313e 100644 --- a/src/frontend/apps/impress/package.json +++ b/src/frontend/apps/impress/package.json @@ -66,6 +66,6 @@ "stylelint-prettier": "5.0.2", "typescript": "*", "webpack": "5.96.1", - "workbox-webpack-plugin": "7.3.0" + "workbox-webpack-plugin": "7.1.0" } } diff --git a/src/frontend/yarn.lock b/src/frontend/yarn.lock index 357288ed33..b18fbd833a 100644 --- a/src/frontend/yarn.lock +++ b/src/frontend/yarn.lock @@ -12900,25 +12900,25 @@ word-wrap@^1.2.5: resolved "https://registry.yarnpkg.com/word-wrap/-/word-wrap-1.2.5.tgz#d2c45c6dd4fbce621a66f136cbe328afd0410b34" integrity sha512-BN22B5eaMMI9UMtjrGd5g5eCYPpCPDUy0FJXbYsaT5zYxjFOckS53SQDE3pWkVoWpHXVb3BrYcEN4Twa55B5cA== -workbox-background-sync@7.3.0: - version "7.3.0" - resolved "https://registry.yarnpkg.com/workbox-background-sync/-/workbox-background-sync-7.3.0.tgz#b6340731a8d5b42b9e75a8a87c8806928e6e6303" - integrity sha512-PCSk3eK7Mxeuyatb22pcSx9dlgWNv3+M8PqPaYDokks8Y5/FX4soaOqj3yhAZr5k6Q5JWTOMYgaJBpbw11G9Eg== +workbox-background-sync@7.1.0: + version "7.1.0" + resolved "https://registry.yarnpkg.com/workbox-background-sync/-/workbox-background-sync-7.1.0.tgz#dac65e30af603511f1c92c3e99f53d6c064fde90" + integrity sha512-rMbgrzueVWDFcEq1610YyDW71z0oAXLfdRHRQcKw4SGihkfOK0JUEvqWHFwA6rJ+6TClnMIn7KQI5PNN1XQXwQ== dependencies: idb "^7.0.1" - workbox-core "7.3.0" + workbox-core "7.1.0" -workbox-broadcast-update@7.3.0: - version "7.3.0" - resolved "https://registry.yarnpkg.com/workbox-broadcast-update/-/workbox-broadcast-update-7.3.0.tgz#bff86b91795c4b9fa46a758d1a7a151828623280" - integrity sha512-T9/F5VEdJVhwmrIAE+E/kq5at2OY6+OXXgOWQevnubal6sO92Gjo24v6dCVwQiclAF5NS3hlmsifRrpQzZCdUA== +workbox-broadcast-update@7.1.0: + version "7.1.0" + resolved "https://registry.yarnpkg.com/workbox-broadcast-update/-/workbox-broadcast-update-7.1.0.tgz#fe21c491cc70f1e037898bba63de0752ef59bd82" + integrity sha512-O36hIfhjej/c5ar95pO67k1GQw0/bw5tKP7CERNgK+JdxBANQhDmIuOXZTNvwb2IHBx9hj2kxvcDyRIh5nzOgQ== dependencies: - workbox-core "7.3.0" + workbox-core "7.1.0" -workbox-build@7.3.0: - version "7.3.0" - resolved "https://registry.yarnpkg.com/workbox-build/-/workbox-build-7.3.0.tgz#ab688f3241b32862236aeeb62b240195f1fe4b62" - integrity sha512-JGL6vZTPlxnlqZRhR/K/msqg3wKP+m0wfEUVosK7gsYzSgeIxvZLi1ViJJzVL7CEeI8r7rGFV973RiEqkP3lWQ== +workbox-build@7.1.0: + version "7.1.0" + resolved "https://registry.yarnpkg.com/workbox-build/-/workbox-build-7.1.0.tgz#64d1532f1b9ad04d2b8b43ce0b9af06ba3fdd159" + integrity sha512-F6R94XAxjB2j4ETMkP1EXKfjECOtDmyvt0vz3BzgWJMI68TNSXIVNkgatwUKBlPGOfy9n2F/4voYRNAhEvPJNg== dependencies: "@apideck/better-ajv-errors" "^0.3.1" "@babel/core" "^7.24.4" @@ -12942,132 +12942,132 @@ workbox-build@7.3.0: strip-comments "^2.0.1" tempy "^0.6.0" upath "^1.2.0" - workbox-background-sync "7.3.0" - workbox-broadcast-update "7.3.0" - workbox-cacheable-response "7.3.0" - workbox-core "7.3.0" - workbox-expiration "7.3.0" - workbox-google-analytics "7.3.0" - workbox-navigation-preload "7.3.0" - workbox-precaching "7.3.0" - workbox-range-requests "7.3.0" - workbox-recipes "7.3.0" - workbox-routing "7.3.0" - workbox-strategies "7.3.0" - workbox-streams "7.3.0" - workbox-sw "7.3.0" - workbox-window "7.3.0" - -workbox-cacheable-response@7.3.0: - version "7.3.0" - resolved "https://registry.yarnpkg.com/workbox-cacheable-response/-/workbox-cacheable-response-7.3.0.tgz#557b0f5fdfceb22fe243e3f19807c76a0ae646e3" - integrity sha512-eAFERIg6J2LuyELhLlmeRcJFa5e16Mj8kL2yCDbhWE+HUun9skRQrGIFVUagqWj4DMaaPSMWfAolM7XZZxNmxA== - dependencies: - workbox-core "7.3.0" - -workbox-core@7.3.0: - version "7.3.0" - resolved "https://registry.yarnpkg.com/workbox-core/-/workbox-core-7.3.0.tgz#f24fb92041a0b7482fe2dd856544aaa9fa105248" - integrity sha512-Z+mYrErfh4t3zi7NVTvOuACB0A/jA3bgxUN3PwtAVHvfEsZxV9Iju580VEETug3zYJRc0Dmii/aixI/Uxj8fmw== - -workbox-expiration@7.3.0: - version "7.3.0" - resolved "https://registry.yarnpkg.com/workbox-expiration/-/workbox-expiration-7.3.0.tgz#2c1ee1fdada34aa7e7474f706d5429c914bd10d2" - integrity sha512-lpnSSLp2BM+K6bgFCWc5bS1LR5pAwDWbcKt1iL87/eTSJRdLdAwGQznZE+1czLgn/X05YChsrEegTNxjM067vQ== + workbox-background-sync "7.1.0" + workbox-broadcast-update "7.1.0" + workbox-cacheable-response "7.1.0" + workbox-core "7.1.0" + workbox-expiration "7.1.0" + workbox-google-analytics "7.1.0" + workbox-navigation-preload "7.1.0" + workbox-precaching "7.1.0" + workbox-range-requests "7.1.0" + workbox-recipes "7.1.0" + workbox-routing "7.1.0" + workbox-strategies "7.1.0" + workbox-streams "7.1.0" + workbox-sw "7.1.0" + workbox-window "7.1.0" + +workbox-cacheable-response@7.1.0: + version "7.1.0" + resolved "https://registry.yarnpkg.com/workbox-cacheable-response/-/workbox-cacheable-response-7.1.0.tgz#d138cc8ef2c32a9f28f29c5b2b0a8681da846c33" + integrity sha512-iwsLBll8Hvua3xCuBB9h92+/e0wdsmSVgR2ZlvcfjepZWwhd3osumQB3x9o7flj+FehtWM2VHbZn8UJeBXXo6Q== + dependencies: + workbox-core "7.1.0" + +workbox-core@7.1.0: + version "7.1.0" + resolved "https://registry.yarnpkg.com/workbox-core/-/workbox-core-7.1.0.tgz#1867576f994f20d9991b71a7d0b2581af22db170" + integrity sha512-5KB4KOY8rtL31nEF7BfvU7FMzKT4B5TkbYa2tzkS+Peqj0gayMT9SytSFtNzlrvMaWgv6y/yvP9C0IbpFjV30Q== + +workbox-expiration@7.1.0: + version "7.1.0" + resolved "https://registry.yarnpkg.com/workbox-expiration/-/workbox-expiration-7.1.0.tgz#c9d348ffc8c3d1ffdddaf6c37bf5be830a69073e" + integrity sha512-m5DcMY+A63rJlPTbbBNtpJ20i3enkyOtSgYfv/l8h+D6YbbNiA0zKEkCUaMsdDlxggla1oOfRkyqTvl5Ni5KQQ== dependencies: idb "^7.0.1" - workbox-core "7.3.0" + workbox-core "7.1.0" -workbox-google-analytics@7.3.0: - version "7.3.0" - resolved "https://registry.yarnpkg.com/workbox-google-analytics/-/workbox-google-analytics-7.3.0.tgz#3c4d4956c0a9800dfb587d82ec8bc0f9cf963791" - integrity sha512-ii/tSfFdhjLHZ2BrYgFNTrb/yk04pw2hasgbM70jpZfLk0vdJAXgaiMAWsoE+wfJDNWoZmBYY0hMVI0v5wWDbg== +workbox-google-analytics@7.1.0: + version "7.1.0" + resolved "https://registry.yarnpkg.com/workbox-google-analytics/-/workbox-google-analytics-7.1.0.tgz#25cca57a05554b6121521590543e59628eb15a65" + integrity sha512-FvE53kBQHfVTcZyczeBVRexhh7JTkyQ8HAvbVY6mXd2n2A7Oyz/9fIwnY406ZcDhvE4NFfKGjW56N4gBiqkrew== dependencies: - workbox-background-sync "7.3.0" - workbox-core "7.3.0" - workbox-routing "7.3.0" - workbox-strategies "7.3.0" + workbox-background-sync "7.1.0" + workbox-core "7.1.0" + workbox-routing "7.1.0" + workbox-strategies "7.1.0" -workbox-navigation-preload@7.3.0: - version "7.3.0" - resolved "https://registry.yarnpkg.com/workbox-navigation-preload/-/workbox-navigation-preload-7.3.0.tgz#9d54693b9179d5175e66af5ef9a92d1b7cf3e605" - integrity sha512-fTJzogmFaTv4bShZ6aA7Bfj4Cewaq5rp30qcxl2iYM45YD79rKIhvzNHiFj1P+u5ZZldroqhASXwwoyusnr2cg== +workbox-navigation-preload@7.1.0: + version "7.1.0" + resolved "https://registry.yarnpkg.com/workbox-navigation-preload/-/workbox-navigation-preload-7.1.0.tgz#2610674d412a1774b5d9f03c9644c9964407b8b6" + integrity sha512-4wyAbo0vNI/X0uWNJhCMKxnPanNyhybsReMGN9QUpaePLTiDpKxPqFxl4oUmBNddPwIXug01eTSLVIFXimRG/A== dependencies: - workbox-core "7.3.0" + workbox-core "7.1.0" -workbox-precaching@7.3.0: - version "7.3.0" - resolved "https://registry.yarnpkg.com/workbox-precaching/-/workbox-precaching-7.3.0.tgz#a84663d69efdb334f25c04dba0a72ed3391c4da8" - integrity sha512-ckp/3t0msgXclVAYaNndAGeAoWQUv7Rwc4fdhWL69CCAb2UHo3Cef0KIUctqfQj1p8h6aGyz3w8Cy3Ihq9OmIw== +workbox-precaching@7.1.0: + version "7.1.0" + resolved "https://registry.yarnpkg.com/workbox-precaching/-/workbox-precaching-7.1.0.tgz#71e27ec2e85661a41b48dec0c92dae707c429eaa" + integrity sha512-LyxzQts+UEpgtmfnolo0hHdNjoB7EoRWcF7EDslt+lQGd0lW4iTvvSe3v5JiIckQSB5KTW5xiCqjFviRKPj1zA== dependencies: - workbox-core "7.3.0" - workbox-routing "7.3.0" - workbox-strategies "7.3.0" + workbox-core "7.1.0" + workbox-routing "7.1.0" + workbox-strategies "7.1.0" -workbox-range-requests@7.3.0: - version "7.3.0" - resolved "https://registry.yarnpkg.com/workbox-range-requests/-/workbox-range-requests-7.3.0.tgz#1b3d5c235a0ff5271418c3a7183281dc131ccd0d" - integrity sha512-EyFmM1KpDzzAouNF3+EWa15yDEenwxoeXu9bgxOEYnFfCxns7eAxA9WSSaVd8kujFFt3eIbShNqa4hLQNFvmVQ== +workbox-range-requests@7.1.0: + version "7.1.0" + resolved "https://registry.yarnpkg.com/workbox-range-requests/-/workbox-range-requests-7.1.0.tgz#8d4344cd85b87d8077289a64dda59fb614628783" + integrity sha512-m7+O4EHolNs5yb/79CrnwPR/g/PRzMFYEdo01LqwixVnc/sbzNSvKz0d04OE3aMRel1CwAAZQheRsqGDwATgPQ== dependencies: - workbox-core "7.3.0" + workbox-core "7.1.0" -workbox-recipes@7.3.0: - version "7.3.0" - resolved "https://registry.yarnpkg.com/workbox-recipes/-/workbox-recipes-7.3.0.tgz#fa407101e8ce52850dfba8e17a5afccb733a3942" - integrity sha512-BJro/MpuW35I/zjZQBcoxsctgeB+kyb2JAP5EB3EYzePg8wDGoQuUdyYQS+CheTb+GhqJeWmVs3QxLI8EBP1sg== +workbox-recipes@7.1.0: + version "7.1.0" + resolved "https://registry.yarnpkg.com/workbox-recipes/-/workbox-recipes-7.1.0.tgz#37625cd2fe7e5decd70c8934a673a7cc080a7675" + integrity sha512-NRrk4ycFN9BHXJB6WrKiRX3W3w75YNrNrzSX9cEZgFB5ubeGoO8s/SDmOYVrFYp9HMw6sh1Pm3eAY/1gVS8YLg== dependencies: - workbox-cacheable-response "7.3.0" - workbox-core "7.3.0" - workbox-expiration "7.3.0" - workbox-precaching "7.3.0" - workbox-routing "7.3.0" - workbox-strategies "7.3.0" + workbox-cacheable-response "7.1.0" + workbox-core "7.1.0" + workbox-expiration "7.1.0" + workbox-precaching "7.1.0" + workbox-routing "7.1.0" + workbox-strategies "7.1.0" -workbox-routing@7.3.0: - version "7.3.0" - resolved "https://registry.yarnpkg.com/workbox-routing/-/workbox-routing-7.3.0.tgz#fc86296bc1155c112ee2c16b3180853586c30208" - integrity sha512-ZUlysUVn5ZUzMOmQN3bqu+gK98vNfgX/gSTZ127izJg/pMMy4LryAthnYtjuqcjkN4HEAx1mdgxNiKJMZQM76A== +workbox-routing@7.1.0: + version "7.1.0" + resolved "https://registry.yarnpkg.com/workbox-routing/-/workbox-routing-7.1.0.tgz#c44bda350d1c5eb633ee97a660e64ce5473250c4" + integrity sha512-oOYk+kLriUY2QyHkIilxUlVcFqwduLJB7oRZIENbqPGeBP/3TWHYNNdmGNhz1dvKuw7aqvJ7CQxn27/jprlTdg== dependencies: - workbox-core "7.3.0" + workbox-core "7.1.0" -workbox-strategies@7.3.0: - version "7.3.0" - resolved "https://registry.yarnpkg.com/workbox-strategies/-/workbox-strategies-7.3.0.tgz#bb1530f205806895aacdea3639e6cf6bfb3a6cb0" - integrity sha512-tmZydug+qzDFATwX7QiEL5Hdf7FrkhjaF9db1CbB39sDmEZJg3l9ayDvPxy8Y18C3Y66Nrr9kkN1f/RlkDgllg== +workbox-strategies@7.1.0: + version "7.1.0" + resolved "https://registry.yarnpkg.com/workbox-strategies/-/workbox-strategies-7.1.0.tgz#a589f2adc0df8f33049c7f4d4cdf4c9556715918" + integrity sha512-/UracPiGhUNehGjRm/tLUQ+9PtWmCbRufWtV0tNrALuf+HZ4F7cmObSEK+E4/Bx1p8Syx2tM+pkIrvtyetdlew== dependencies: - workbox-core "7.3.0" + workbox-core "7.1.0" -workbox-streams@7.3.0: - version "7.3.0" - resolved "https://registry.yarnpkg.com/workbox-streams/-/workbox-streams-7.3.0.tgz#a4c0ae51b66121a2aa6f89229e237aca6dc27eb5" - integrity sha512-SZnXucyg8x2Y61VGtDjKPO5EgPUG5NDn/v86WYHX+9ZqvAsGOytP0Jxp1bl663YUuMoXSAtsGLL+byHzEuMRpw== +workbox-streams@7.1.0: + version "7.1.0" + resolved "https://registry.yarnpkg.com/workbox-streams/-/workbox-streams-7.1.0.tgz#8e080e56b5dee7aa0f956fdd3a10506821d2e786" + integrity sha512-WyHAVxRXBMfysM8ORwiZnI98wvGWTVAq/lOyBjf00pXFvG0mNaVz4Ji+u+fKa/mf1i2SnTfikoYKto4ihHeS6w== dependencies: - workbox-core "7.3.0" - workbox-routing "7.3.0" + workbox-core "7.1.0" + workbox-routing "7.1.0" -workbox-sw@7.3.0: - version "7.3.0" - resolved "https://registry.yarnpkg.com/workbox-sw/-/workbox-sw-7.3.0.tgz#39215017e868d7cfe6835b2961f55369d89b3e73" - integrity sha512-aCUyoAZU9IZtH05mn0ACUpyHzPs0lMeJimAYkQkBsOWiqaJLgusfDCR+yllkPkFRxWpZKF8vSvgHYeG7LwhlmA== +workbox-sw@7.1.0: + version "7.1.0" + resolved "https://registry.yarnpkg.com/workbox-sw/-/workbox-sw-7.1.0.tgz#3df97d7cccb647eb94d66be7dc733c9fda26b9fc" + integrity sha512-Hml/9+/njUXBglv3dtZ9WBKHI235AQJyLBV1G7EFmh4/mUdSQuXui80RtjDeVRrXnm/6QWgRUEHG3/YBVbxtsA== -workbox-webpack-plugin@7.3.0: - version "7.3.0" - resolved "https://registry.yarnpkg.com/workbox-webpack-plugin/-/workbox-webpack-plugin-7.3.0.tgz#e19d2836e2db4f1f4b68d5a8b354f5c407d190c3" - integrity sha512-EC8lmSAuNmPli04+a5r5lTgv8ab+f5l+XjdYuYpbGnxDT15kH6DBeBazVslpffqTDHt+wkdBMnBCu8GdkKrTSA== +workbox-webpack-plugin@7.1.0: + version "7.1.0" + resolved "https://registry.yarnpkg.com/workbox-webpack-plugin/-/workbox-webpack-plugin-7.1.0.tgz#404ca3da3f19ed59e58e8c71fae01f5e61ee288f" + integrity sha512-em0vY0Uq7zXzOeEJYpFNX7x6q3RrRVqfaMhA4kadd3UkX/JuClgT9IUW2iX2cjmMPwI3W611c4fSRjtG5wPm2w== dependencies: fast-json-stable-stringify "^2.1.0" pretty-bytes "^5.4.1" upath "^1.2.0" webpack-sources "^1.4.3" - workbox-build "7.3.0" + workbox-build "7.1.0" -workbox-window@7.3.0: - version "7.3.0" - resolved "https://registry.yarnpkg.com/workbox-window/-/workbox-window-7.3.0.tgz#e71bb0b4d880d2295c96bf1ccadb6cea0df51c07" - integrity sha512-qW8PDy16OV1UBaUNGlTVcepzrlzyzNW/ZJvFQQs2j2TzGsg6IKjcpZC1RSquqQnTOafl5pCj5bGfAHlCjOOjdA== +workbox-window@7.1.0: + version "7.1.0" + resolved "https://registry.yarnpkg.com/workbox-window/-/workbox-window-7.1.0.tgz#58a90ba89ca35d26f2b322223ee575c750bac7a1" + integrity sha512-ZHeROyqR+AS5UPzholQRDttLFqGMwP0Np8MKWAdyxsDETxq3qOAyXvqessc3GniohG6e0mAqSQyKOHmT8zPF7g== dependencies: "@types/trusted-types" "^2.0.2" - workbox-core "7.3.0" + workbox-core "7.1.0" wrap-ansi@^7.0.0: version "7.0.0"